Menu
Dossiers

Rust 1.99 : les fonctions variadiques C stabilisées, la 1.99.1 corrige trois régressions

Deux semaines après la sortie de Rust 1.99, l’équipe du langage a publié le 15 octobre une version corrective, Rust 1.99.1. Elle règle trois régressions qui pouvaient casser des builds, notamment sur les cibles UEFI et sur macOS. L’occasion de revenir sur ce qu’apporte cette version 1.99, dont la nouveauté phare intéressera tous ceux qui font de l’interopérabilité avec du C.

En bref
• Rust 1.99.0 est sorti le 1er octobre 2026, Rust 1.99.1 le 15 octobre.
• Nouveauté principale : on peut désormais définir des fonctions variadiques à l’ABI C directement en Rust.
• La 1.99.1 corrige un symbole wcslen manquant, un bug de retour bool en FFI sur x86_64 et un souci de rust-lld sur macOS.
• Mise à jour : rustup update stable.

Rust 1.99.1 : trois régressions corrigées #

L’annonce officielle de Rust 1.99.1 est courte et précise : il s’agit d’une version de correction, sans avis de sécurité associé. Trois problèmes introduits par des versions précédentes sont réglés.

À lire Ubuntu 26.10 Stonking Stingray est sortie : noyau Linux 7.3, GNOME 51 et outils en Rust

Le symbole wcslen manquant

Une passe d’optimisation de LLVM, loop-idiom-wcslen, peut remplacer certaines boucles par un appel à la fonction wcslen. Problème : toutes les cibles ne fournissent pas cette fonction. Résultat, des erreurs à l’édition de liens. Les cibles UEFI étaient particulièrement touchées : tout projet utilisant std y était cassé. La fonction est désormais présente dans la bibliothèque compiler-builtins de Rust, en solution de repli.

Les booléens renvoyés par FFI sur x86_64

Le bug le plus sournois. Une fonction renvoyant un bool à travers une frontière FFI pouvait laisser les bits 1 à 7 du registre de retour non définis. Côté appelant, on pouvait donc lire autre chose que 0 ou 1. Ce type de retour est de nouveau marqué pour une extension par zéros, comme l’exige l’ABI. Ce genre de régression ne fait pas planter la compilation : il produit des comportements erratiques à l’exécution, ce qui justifie de mettre à jour sans attendre si votre code dialogue avec du C.

rust-lld sur macOS

Enfin, l’éditeur de liens rust-lld pouvait échouer à charger libLLVM sur macOS quand le compilateur était lancé sans passer par le proxy rustup. Il est maintenant compilé avec une entrée rpath pointant vers le dossier qui contient libLLVM.dylib.

Rust 1.99 : les fonctions variadiques C arrivent en stable #

La version 1.99.0, publiée le 1er octobre, stabilise une fonctionnalité attendue de longue date par les développeurs système : la définition de fonctions variadiques compatibles C. Jusqu’ici, Rust savait appeler une fonction comme printf, mais pas en écrire une lui-même avec ce comportement.

À lire Node.js : correctifs de sécurité le 21 octobre et ouverture de l’alpha de Node 27

C’est désormais possible avec les ABI "C" et "C-unwind". Dans la signature, le paramètre variadique s’écrit ... et correspond au type VaList, lui aussi stabilisé dans core::ffi. Les arguments se lisent un par un avec next_arg::<T>(), et seuls les types qui implémentent le trait VaArgSafe peuvent être lus de cette façon. Une garde utile : elle évite de lire un type dont la représentation n’a pas de sens dans ce contexte.

Concrètement, cela simplifie le portage progressif de bibliothèques C vers Rust. Une fonction variadique exposée par une bibliothèque historique peut maintenant être réécrite en Rust sans changer son interface pour les programmes C qui l’utilisent. Les fonctions variadiques « naked » avec d’autres ABI sont également stabilisées, mais elles doivent être écrites en assembleur en ligne.

Taille et alignement depuis un pointeur brut #

Deuxième point technique de cette version : l’équipe a fixé les règles de sécurité permettant d’obtenir la taille et l’alignement d’une valeur à partir d’un pointeur brut. Trois fonctions passent en stable : Layout::for_value_raw, mem::size_of_val_raw et mem::align_of_val_raw. Elles servent surtout aux auteurs d’allocateurs et de structures de données bas niveau, qui manipulent des types de taille dynamique sans disposer d’une référence valide.

Box::leak : un changement de doctrine plus que de code #

Rust 1.99 ne modifie pas la sémantique de Box::leak, mais sa documentation déconseille désormais les usages qui consistent à « fuir » une allocation puis à la libérer plus tard. Pour ce cas, l’équipe recommande Box::into_non_null ou Box::into_raw. La même consigne vaut pour les autres fonctions leak de la bibliothèque standard. Si votre code utilise ce motif, c’est le moment de le revoir avant qu’un outil d’analyse ne le signale.

À lire Comment nettoyer et dédoublonner une base de prospects sans perdre de leads ?

Les autres API stabilisées #

La liste est longue, mais quelques ajouts méritent l’attention au quotidien. Vec::into_parts et Vec::from_parts permettent de décomposer et recomposer un vecteur sans passer par des manipulations dangereuses. String::from_utf8_lossy_owned convertit des octets en chaîne en remplaçant les séquences invalides, en renvoyant une String possédée. VecDeque::retain_back complète les outils de filtrage des files doubles, et std::fs::set_times permet de modifier les dates d’un fichier.

On note aussi l’implémentation d’IntoIterator pour Box<[T; N]>, qui rend l’itération sur des tableaux en boîte plus naturelle.

Fin du support complet pour Windows 32 bits #

Autre annonce récente à garder en tête : le 2 octobre, le projet a fait savoir qu’il rétrograde les cibles Windows i686, c’est-à-dire 32 bits, à un niveau de support limité à la bibliothèque standard. Si vous distribuez encore des binaires Windows 32 bits, lisez l’annonce pour vérifier ce qui change pour votre chaîne de compilation.

Comment mettre à jour #

Si Rust est installé via rustup, une seule commande suffit :

À lire Comment vérifier la couverture réseau à l’étranger avant d’acheter ?

rustup update stable

Pour les projets en intégration continue qui épinglent une version précise, pensez à passer directement en 1.99.1 plutôt qu’en 1.99.0, surtout si vous ciblez UEFI, macOS ou du code FFI sur x86_64.

Questions fréquentes #

Rust 1.99.1 corrige-t-il une faille de sécurité ?

Non. L’annonce présente trois corrections de régressions et ne mentionne aucun avis de sécurité.

Que sont les fonctions variadiques C en Rust ?

Des fonctions acceptant un nombre variable d’arguments, comme printf en C. Depuis Rust 1.99, on peut les définir en Rust avec l’ABI C et lire les arguments via VaList.

Faut-il mettre à jour tout de suite ?

C’est recommandé si votre code passe des booléens à travers une interface C sur x86_64, ou si vous compilez pour UEFI ou macOS sans rustup.

À lire NodeJS JavaScript : comprendre le duo qui fait tourner le web moderne

Gener est édité de façon indépendante. Soutenez la rédaction en nous ajoutant dans vos favoris sur Google Actualités :

Dans la même rubrique : News

A decouvrir : création de site e-commerce | consultant SEO Paris