Pulse 게시 ·

Rust 1.99.0 출시, C ABI 가변 인자 함수 정의 안정화

Rust 개발팀이 10월 1일 Rust 1.99.0을 공개했다. C·C-unwind ABI의 가변 인자 함수를 Rust로 정의하는 기능과 원시 포인터에서 크기·정렬 정보를 얻는 API를 안정화했다. Box::leak 뒤 메모리를 다시 해제하는 패턴은 피하도록 문서를 바꿨으며, 언어 의미 자체의 변경은 없다.

가변 인자 목록의 VaList는 대상 플랫폼의 C va_list와 ABI 호환성을 갖고, 읽을 수 있는 타입은 VaArgSafe로 제한한다.

C 이외 ABI의 naked 가변 인자 함수 정의도 안정화됐으며, 구현에는 인라인 어셈블리가 필요하다.

Layout::for_value_raw·mem::size_of_val_raw·mem::align_of_val_raw가 안정화됐다.

Box::leak 후 해제하는 패턴은 컴파일러 최적화 및 향후 사용자 지정 할당자와 문제가 생길 수 있어 Box::into_non_null 또는 Box::into_raw를 권장한다.

Box::into_non_null·Box::from_non_null, Vec::into_parts·Vec::from_parts, 파일 시간 설정 API 등도 안정화됐다.

rustup 사용자는 rustup update stable로 업데이트할 수 있다.

C 가변 인자 함수를 호출하는 데 더해 Rust로 직접 구현할 수 있게 돼, C 인터페이스를 제공하는 라이브러리의 구현 선택지가 넓어졌다.

원문