Announcing Rust 1.99.0
Rust 1.99.0 stabilizes C-ABI variadic functions, allowing developers to define functions with variable argument lists using standard Rust syntax. The release also settles safety requirements for retrieving layout information from raw pointers to both Sized and non-Sized types. Additionally, documentation now advises against patterns that leak and then deallocate Box memory, addressing problematic interactions with current and future compiler behaviors.
The Rust team announces version 1.99.0, which can be installed on an existing rustup setup with rustup update stable, or obtained by first installing rustup; readers are encouraged to test future releases via the beta or nightly channels and to file any bugs. This release stabilizes defining C‑ABI variadic functions using the “C” and “C‑unwind” ABIs, allowing Rust code to implement functions with a variable argument list (…); the argument type is VaList, which matches C’s va_list and is constrained by the VaArgSafe trait, and naked variadic functions with non‑“C” ABIs are now supported through inline assembly. Safety rules for extracting size and alignment from raw pointers to both Sized and non‑Sized types are finalized by stabilizing Layout::for_value_raw, mem::size_of_val_raw, and mem::align_of_val_raw. Documentation for Box::leak now advises against patterns that later deallocate the leaked memory, recommending Box::into_non_null or Box::into_raw instead, a change that also applies to other leak functions. Numerous APIs are stabilized, including various IntoIterator implementations for boxed arrays, VecDeque::retain_back, core ffi VaList, box conversion functions, vector part extraction, raw size/alignment queries, layout creation, string loss‑y conversion, FusedIterator for StepBy, and file‑time setters. The release notes also point to broader changes in Rust, Cargo, and Clippy and thank the contributors.