Rust, 'only bounds'로 타입 시스템의 새 지평을 열다
Rust의 기본 'Sized' 바운드를 넘어선 'only bounds' 개념이 소개됨
Arm 팀의 기여로 Scalable Vector Extension 지원 및 타입 계층 구조 확장이 목표임
기존 '?Sized'의 한계를 극복하고 유연한 타입 요구사항 정의가 가능해짐
향후 다양한 기본 바운드(Default Bound) 가족 지원 확장이 기대됨
기존 'Sized' 바운드의 한계와 'only bounds'의 필요성
현재 Rust의 기본 'Sized' 바운드는 컴파일 타임에 크기 계산이 가능한 타입에만 적용되어, 동적 크기 타입(Dynamically Sized Types, DST)이나 extern 타입 등 다양한 시나리오를 포괄하기 어렵다는 지적이 있습니다. 커뮤니티에서는 'only bounds'가 이러한 제약을 해소하고, 'MetadataSized', 'MaybeSized'와 같은 새로운 타입 계층 구조(Type Hierarchy)를 도입하여 더 세밀한 타입 요구사항을 명시할 수 있게 한다고 분석합니다.
Arm 팀의 기여와 Scalable Vector Extension (SVE)
Arm 팀은 Scalable Vector Extension(SVE) 지원을 위해 Rust의 타입 시스템 개선에 기여하고 있습니다. 이들은 런타임에 크기가 결정되는 SIMD 타입을 Rust에서 효율적으로 다루기 위한 방안으로 'only bounds'를 제안했습니다. 이는 단순히 크기 계산 가능 여부를 넘어, 메타데이터 기반 크기 추론 등 더 복잡한 요구사항을 타입 시스템에 반영하려는 시도로 평가됩니다.
'only' 키워드의 역할과 명확성
Lobsters 커뮤니티에서는 'only' 키워드의 필요성에 대한 논의가 있었습니다. 일부 사용자는 'only' 없이도 타입 계층 구조를 통해 명확성을 확보할 수 있다고 주장했지만, 다른 의견으로는 'only' 키워드가 새로운 기본 바운드(Default Bound)의 존재를 명시적으로 알려 개발자가 해당 바운드의 의미를 쉽게 파악하고 학습 곡선을 줄이는 데 도움이 된다는 반론이 제기되었습니다. 특히 향후 바운드 체계가 확장될 경우 'only'의 역할이 더욱 중요해질 것이라는 분석입니다.
다중 바운드 가족(Multiple Bound Families) 확장 가능성
글에서는 'Sized' 계열 외에 'Access' 계열(Move, Destruct 등)의 기본 바운드 가족을 도입할 가능성을 제시합니다. 'only bounds'는 이러한 다중 바운드 가족 간의 독립적인 확장을 지원하며, 특정 가족의 기본 바운드만 선택적으로 해제(Opt-out)할 수 있게 합니다. 이는 Rust의 타입 시스템이 더욱 정교하고 유연해질 수 있는 기반을 마련한다는 점에서 주목받고 있습니다.