Ce qui se passe
Rust 1.99.0 est sorti le 1er octobre. Rust savait déjà appeler une fonction C
variadique comme printf ; il peut désormais en définir une, avec les ABI
"C" et "C-unwind".
/// SAFETY : l'appelant doit passer au moins un i64.
unsafe extern "C" fn first(mut args: ...) -> i64 {
unsafe { args.next_arg::<i64>() }
}Le paramètre ... est de type VaList, compatible au niveau binaire avec le
va_list du C sur toutes les cibles. Le trait VaArgSafe borne les types
lisibles. Le nombre et le type des arguments restent sous la responsabilité de
l'appelant, d'où le unsafe. Les fonctions variadiques nues (naked) avec
d'autres ABI sont aussi stabilisées, à écrire en assembleur en ligne.
Box::leak, et ce qu'il ne faut plus faire après
La sémantique ne bouge pas, mais la documentation de Box::leak déconseille
désormais de « dé-fuiter » : récupérer plus tard une mémoire volontairement
fuitée pour la libérer. Ce motif se marie mal avec les optimisations du
compilateur, actuelles et futures, et plus encore avec les allocateurs
personnalisés qui approchent de la stabilisation. La consigne vaut pour les
autres fonctions leak de la bibliothèque standard : préférer
Box::into_raw ou Box::into_non_null quand la mémoire doit revenir.
Les API stabilisées
IntoIteratorpourBox<[T; N]>,&Box<[T; N]>et&mut Box<[T; N]>VecDeque::retain_backcore::ffi::VaListBox::into_non_null,Box::from_non_nullVec::into_parts,Vec::from_partscore::mem::size_of_val_raw,core::mem::align_of_val_raw,core::alloc::Layout::for_value_raw— taille et alignement à partir d'un pointeur brut, y compris vers un type nonSizedString::from_utf8_lossy_owned,string::FromUtf8Error::into_utf8_lossyFusedIteratorpourStepBy<I>std::fs::set_times,std::fs::set_times_nofollow
Comment s'y prendre
rustup update stablePuis chercher les Box::leak suivis d'un Box::from_raw sur le même pointeur.
Source : Announcing Rust 1.99.0, Rust Blog, 1er octobre 2026.