Reddit

Rust 1.99.0 is out

Rust 1.99.0 출시

Rust 1.99.0이 안정 버전으로 출시됐습니다. C ABI 가변 인자를 받는 함수를 Rust로 정의하는 기능과 raw pointer의 크기·정렬 정보를 다루는 기능이 안정화됐으며, Box::leak으로 누수시킨 메모리를 나중에 해제하는 패턴은 피하도록 문서 지침을 바꿨습니다.

AI 요약

Rust 1.99.0이 안정 채널에 출시됐습니다. rustup을 사용한다면 rustup update stable 명령으로 업데이트합니다. 이번 릴리스는 C ABI 가변 인자 함수 정의를 안정화하고, raw pointer에서 타입의 크기와 정렬 정보를 얻을 때 필요한 안전성 요건을 정리했습니다.

C ABI 가변 인자 함수

이제 Rust 코드에서 C와 C-unwind ABI를 사용하는 가변 인자 함수를 정의합니다. 가변 인자는 ...로 나타내며, 함수는 임의 개수의 인자를 받습니다. Rust는 이전에도 libc::printf처럼 외부에서 정의한 가변 인자 함수를 호출했지만, 이번 버전부터 Rust 자체에서 이런 함수를 작성합니다.

함수 안의 가변 인자 목록은 VaList 타입으로 다룹니다. VaList는 대상 플랫폼마다 C의 va_list 타입과 ABI 호환성을 갖습니다. 어떤 타입을 목록에서 읽을 수 있는지는 VaArgSafe trait가 제한합니다. 가변 인자 함수를 호출하는 쪽과 구현하는 쪽 모두 인자 타입과 개수를 맞춰야 하므로, 예시처럼 안전성 조건을 문서화하고 unsafe 호출을 사용합니다. C가 아닌 ABI를 사용하는 naked variadic 함수 지원도 안정화됐습니다. 이 함수는 inline assembly로 작성해야 합니다.

raw pointer의 레이아웃 정보

raw pointer가 가리키는 타입의 크기와 정렬 정보를 얻는 데 필요한 안전성 요건을 이번 릴리스에서 확정했습니다. Sized 타입은 이런 정보를 얻는 작업이 안전하며, 기존에도 안정 버전에서 지원했습니다. 이번에는 Sized가 아닌 타입까지 포함해 관련 함수 세 개를 안정화했습니다.

Box::leak 사용 지침

Rust 1.99.0에서 언어 의미가 바뀌지는 않았습니다. 다만 표준 라이브러리 문서는 Box::leak으로 메모리를 누수시킨 뒤 나중에 다시 해제하는 패턴을 권장하지 않도록 바뀌었습니다. 이런 코드는 현재와 향후의 컴파일러 최적화와 충돌할 수 있으며, 사용자 정의 allocator가 안정화되면 문제가 특히 두드러질 수 있습니다. 대신 Box::into_non_null을 사용하라고 안내합니다. 같은 지침은 표준 라이브러리의 다른 누수 함수에도 적용됩니다.

Reddit 반응

  • @u/Illustrious_Car344 — Rust 2가 정말 기대됩니다.
  • @u/CobbwebBros — 안정 버전에서 C 가변 인자를 지원하다니 정말 좋습니다.

원문: Rust Blog / 번역·요약: Trawling