La mise à jour du langage de programmation été annoncée le 26 juin par la Rust Release Team. La version 1.88 ajoute le support du langage pour l'écriture de fonctions « Naked » sans épilogue ni prologue générés par le compilateur ce qui permet un contrôle total sur l'assemblage généré pour une fonction particulière. Selon l'équipe de Rust, cette alternative est plus ergonomique à la définition de fonctions dans un bloc global_asm!. Une fonction « naked » est marquée par l'attribut #[unsafe(naked)] et son corps est constitué d'un seul appel à naked_asm! .
L'équipe a montré un exemple dans lequel un bloc d'assemblage écrit à la main définit l'ensemble du corps de la fonction. Pour les fonctions nues, le compilateur n'ajoute pas de traitement spécial pour les valeurs de retour ou les arguments, contrairement aux fonctions non nues. Les fonctions naked sont utilisées dans des environnements de bas niveau comme les compilateurs intégrés à Rust, les systèmes d'exploitation et les applications embarquées.
Support des littéraux booléens
Avec Rust 1.88, le langage de prédicats cfg supporte désormais les littéraux booléens, true et false, agissant comme une configuration qui est toujours activée ou désactivée. « Cela fonctionne dans la compilation conditionnelle Rust avec les attributs cfg et cfg_attr, dans la macro cfg ! intégrée, et dans les tables Cargo [target] à la fois dans la configuration et les manifestes », a déclaré l'équipe Rust. « Auparavant, des listes de prédicats vides pouvaient être utilisées pour la configuration inconditionnelle, comme cfg(all()) pour enabled et cfg(any()) pour disabled, mais cfg(true) et cfg(false) offrent un moyen plus direct de dire ce que l'on veut dire », a ajouté l'équipe.
Toujours dans Rust 1.88, les instructions let peuvent dorénavant être enchaînées (&&) à l'intérieur de conditions if et while, et même s'entremêler avec des expressions booléennes. Ainsi, il y a moins de distinction entre if et if let et entre while et while let. Les motifs à l'intérieur des sous-expressions let peuvent être réfutables ou irréfutables, et les bindings sont utilisables dans les parties ultérieures de la chaîne ainsi que dans le corps, selon l'équipe de Rust.
Un nettoyeur de vieux fichiers
Enfin, le gestionnaire de paquets Cargo exécute désormais automatiquement le collecteur de déchets GC sur le cache dans son répertoire d'origine. Pour expliquer ce changement, l'équipe de Rust a déclaré que lors de la construction, Cargo télécharge et met en cache les crates nécessaires en tant que dépendances. Historiquement, ces fichiers téléchargés n'étaient jamais nettoyés, ce qui entraînait une utilisation illimitée du disque dans le répertoire d'origine de Cargo. Avec Rust 1.88, Cargo introduit un mécanisme de collecte de déchets pour nettoyer automatiquement les vieux fichiers.
Rust 1.88 fait suite à la version 1.87 de Rust publiée le mois dernier, qui apportait des aménagements pour les pipes anonymes et les éléments intrinsèques de l'architecture. Les utilisateurs actuels de Rust peuvent obtenir la version 1.88 de Rust en exécutant rustup update stable.