기타 Lobsters · 2026-09-21

"러스트에서 제일 싫은 부분"… 이름 있는 인자 문법이 절실한 이유

핵심 요약
  • 한 개발자가 러스트(Rust)에 '이름 있는 인자'와 '선택적 인자' 문법이 없어 함수 호출과 정의가 지나치게 장황해진다고 지적했습니다.
  • Dart와 C#은 깔끔하게 지원하고 TypeScript는 다소 복잡하게 흉내 내는 반면, 러스트는 구조체와 Default 트레이트를 동원해야 해 가장 비효율적이라고 비교했습니다.
  • 러스트 표준 라이브러리의 HashMap처럼 인자 조합마다 별도 함수를 만들어야 하는 문제 등을 예로 들며 언어 차원의 지원 필요성을 주장했습니다.
요약 한 개발자가 러스트(Rust) 언어에서 가장 아쉬운 점으로 '이름 있는 인자(named arguments)'와 '선택적 인자(optional arguments)'의 부재를 꼽으며 다른 언어들과의 비교 글을 게시했습니다. 작성자는 자신이 주로 쓰는 프로그래밍 언어(Rust, C#, TypeScript, Dart, Python) 중 러스트가 이름 있는 인자를 구현하기 가장 까다롭다고 설명합니다. 먼저 UI 프레임워크 목적으로 설계된 Dart의 경우, 중괄호`{}`나 대괄호`[]`를 활용해 이름 있는 인자와 기본값, 필수 여부(`required`)를 매우 직관적으로 지원해 가장 훌륭하다고 평가했습니다. C# 역시 모든 매개변수에 이름을 붙여 호출할 수 있고 기본값 지정이 간결해 완성도가 높다고 보았습니다. 반면 타입스크립트(TypeScript)는 전용 문법 대신 익명 객체 타입과 구조 분해 할당을 조합해 구현해야 하므로 매개변수 이름을 타입과 본문에서 두 번 정의해야 하는 등 불필요하게 장황해진다고 지적했습니다(특히 React 컴포넌트 개발 시 이 방식이 강제된다는 점을 짚었습니다). 그러나 러스트는 이보다도 훨씬 불편하다고 강조합니다. 러스트에서는 구조체(struct)를 정의하고 `Default` 트레이트를 구현한 뒤 `..Default::default()` 문법을 쓰는 우회 방식을 주로 쓰는데, 익명 타입이 지원되지 않아 타입 정의 자체가 지나치게 길어지며, 타입의 기본값과 다른 기본값을 지정하려면 추가 함수를 짜야 하는 등 한계가 명확하다는 설명입니다. 또한 러스트 표준 라이브러리의 `HashMap` 생성자들(`new`, `with_capacity`, `with_hasher` 등)처럼 인자 조합에 따라 메서드가 여러 개로 나뉘는 문제점을 짚으며 개선 필요성을 제기했습니다.
Sponsored · 광고