Rust 함수 오버로딩 실험 참여 요청

1 week ago 9

Rust Project가 FFI 바인딩에서 외부 오버로드 함수를 자연스럽게 호출할 수 있도록 nightly Rust의 splat 기능을 공개하고, 컴파일러·상호운용 도구 개발자의 실험을 요청함 2026년 7월 31일 이후 nightly에서는 #[rustc_splat]으로 hypot((2.0, 3.0, 6.0)) 대신 hypot(2.0, 3.0, 6.0) 처럼 인수를 분리해 전달하며, 타입 추론과 검사는 기존 튜플·트레이트 방식대로 동작함 이번 실험은 기존 트레이트 시스템의 오버로딩 범위와 C++ 호출의 사용성을 확인하며, 언어마다 다른 오버로드 결정 규칙을 다루는 것이 주요 설계 과제임 splat은 RFC가 없는 불완전한 nightly 기능으로 언제든 변경되거나 제거될 수 있으며, rustdoc·함수 포인터 지원도 최근 추가돼 버그와 기능 제약이 남아 있음 장기적으로 트레이트·튜플·#[rustc_splat]을 숨기는 #[overload] 같은 인터페이스를 검토하지만, 초기 적용을 extern 블록으로 제한하거나 네이티브 Rust 지원을 별도 기능으로 둘 수도 있음 기존 Rust의 오버로딩 방식 Stable Rust는 튜플과 트레이트를 이용한 오버로딩을 이미 지원함 오버로드된 인수를 하나의 튜플로 전달해야 하므로 hypot((2.0, 3.0, 6.0))처럼 호출 형태가 부자연스러움 사용자 정의 타입에서는 Add와 Neg 같은 트레이트를 통해 +와 단항 - 등의 내장 연산자 오버로딩도 가능함 새 실험은 기존 트레이트 시스템이 지원할 수 있는 오버로딩 범위와 C++ 함수를 Rust에서 편리하게 호출할 수 있는지 확인함 nightly의 splat 실험 2026년 7월 31일 이후 nightly 빌드는 불완전한 splat 컴파일러 기능으로 함수와 메서드 오버로딩 호출을 지원함 #[rustc_splat] 실험은 튜플 인수를 개별 인수처럼 펼쳐 hypot(2.0, 3.0, 6.0)으로 호출하게 함 이중 괄호는 사라지지만 타입 추론과 타입 검사는 stable Rust의 기존 오버로드와 동일하게 수행됨 초기에는 문법 논쟁을 피하고자 기본적인 #[rustc_splat] 속성을 사용하며, 실험 결과가 유용하면 대안 문법을 이후 검토할 수 있음 구현 복잡도와 언어 상호운용 사례의 해결 여부를 파악하기 위한 실험으로, RFC가 없고 언제든 변경되거나 제거될 수 있음 설계 원칙과 매크로 작업 향후 기능이 크게 바뀌거나 더 편리한 인터페...

Read Entire Article