러스트 1.99.0 공개, C 가변인자 함수 안정화
1. 개요
러스트(Rust) 팀이 2026년 10월 1일 러스트 1.99.0을 공개했습니다. 이번 릴리스의 핵심은 C ABI 가변인자(variadic) 함수를 러스트 코드 안에서 직접 정의할 수 있게 된 점입니다. 그동안은 외부 C 함수를 호출하는 쪽만 가능했는데, 이제 "C"와 "C-unwind" ABI로 가변인자 함수 자체를 러스트로 작성할 수 있습니다. 가변 인자는 내부적으로 VaList 타입으로 다루고, 안전하게 넘길 수 있는 타입은 VaArgSafe 트레잇으로 제한합니다.
2. 주요 변경
공식 블로그에 실린 예시는 아래처럼 생겼습니다.
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 등이 포함됩니다.
3. 빌드 도구와 플랫폼
카고(Cargo) 쪽에는 내장 debug 프로파일이 추가됐습니다. 지금은 dev 프로파일과 동작 차이가 없지만 향후 전환을 위한 준비로 보입니다. 에디션 2024 이상에서는 워크스페이스 멤버가 상속받은 의존성의 default-features를 재정의할 수 있고, CI 환경(환경 변수 CI로 감지)에서는 증분 컴파일이 기본 비활성화됩니다. 컴파일러는 LLVM 23으로 올라갔고, riscv64-unknown-linux-musl 타깃이 호스트 도구를 포함한 Tier 2로 승격됐습니다.
4. 업데이트
설치는 평소대로입니다.
$ rustup update stableC 가변인자 함수 지원은 FFI 경계를 다루는 분들에게 특히 의미가 있습니다. printf 류처럼 가변인자를 받는 C 인터페이스를 러스트 쪽에서 구현해야 할 때 그동안은 우회가 필요했는데, 이제 러스트 코드로 바로 정의할 수 있게 됐기 때문입니다.
로그인 후 답글을 남길 수 있습니다.