러스트 1.99.0 공개, C 가변인자 함수 안정화
러스트(Rust) 팀이 2026년 10월 1일 러스트 1.99.0을 공개했습니다. 이번 릴리스의 핵심은 C ABI 가변인자(variadic) 함수를 러스트 코드 안에서 직접 정의할 수 있게 된 점입니다. 그동안은 외부 C 함수를 호출하는 쪽만 가능했는데, 이제 "C"와 "C-unwind" ABI로 가변인자 함수 자체를 러스트로 작성할 수 있습니다. 가변 인자는 내부적으로 VaList 타입으로 다루고, 안전하게 넘길 수 있는 타입은 VaArgSafe 트레잇으로 제한합니다.
공식 블로그에 실린 예시는 아래처럼 생겼습니다.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
let a = unsafe { args.next_arg::<i32>() };
let b = unsafe { args.next_arg::<i32>() };
a + b
}이 외에 로우 포인터에서 크기와 정렬 값을 얻는 Layout::for_value_raw, mem::size_of_val_raw, mem::align_of_val_raw 세 함수가 안정화됐습니다. Box::leak 문서는 나중에 그 메모리를 다시 해제하는 패턴이 컴파일러 최적화와 충돌할 수 있다는 이유로 권장하지 않도록 바뀌었고, 대신 Box::into_non_null이나 Box::into_raw를 쓰라고 안내합니다. 새로 안정화된 API로는 Box::into_non_null, Box::from_non_null, Vec::into_parts, Vec::from_parts 등이 포함됩니다.
카고(Cargo) 쪽에는 내장 debug 프로파일이 추가됐습니다. 지금은 dev 프로파일과 동작 차이가 없지만 향후 전환을 위한 준비로 보입니다. 에디션 2024 이상에서는 워크스페이스 멤버가 상속받은 의존성의 default-features를 재정의할 수 있고, CI 환경(환경 변수 CI로 감지)에서는 증분 컴파일이 기본 비활성화됩니다. 컴파일러는 LLVM 23으로 올라갔고, riscv64-unknown-linux-musl 타깃이 호스트 도구를 포함한 Tier 2로 승격됐습니다.
설치는 평소대로입니다.
$ rustup update stableC 가변인자 함수 지원은 FFI 경계를 다루는 분들에게 특히 의미가 있습니다. printf 류처럼 가변인자를 받는 C 인터페이스를 러스트 쪽에서 구현해야 할 때 그동안은 우회가 필요했는데, 이제 러스트 코드로 바로 정의할 수 있게 됐기 때문입니다.
로그인 후 답글을 남길 수 있습니다.