Introduction
La communauté Rust est en effervescence avec la sortie de Rust 1.98.0. Cette version promet d'améliorer les performances des opérations sur les flottants et le formatage des entiers. Si tu développes en Rust, tu sais à quel point chaque micro-optimisation compte dans des projets exigeants. Voyons de plus près ce que Rust 1.98.0 a à offrir.
Méthodes Algébriques pour les Flottants
Rust 1.98.0 introduit des méthodes algébriques pour les types flottants f32 et f64. Ces méthodes permettent aux développeurs de réaliser des opérations d'addition, de soustraction, de multiplication, de division et de reste en exploitant les propriétés algébriques des nombres réels. Bien que ces propriétés ne soient pas toujours respectées à cause des limitations des représentations en virgule flottante, ces méthodes permettent des optimisations similaires à l'option -ffast-math que l'on peut retrouver dans d'autres langages.
Par exemple, dans une somme comme a + b + c + d, l'ordre d'évaluation par défaut est (a + b) + c + d. Avec les méthodes algébriques, le compilateur peut réordonner les opérations pour optimiser les calculs, par exemple en évaluant (a + b) + (c + d) simultanément. Bien que ces méthodes soient non déterministes, elles ne provoqueront jamais de comportement indéfini.
Formatage des Entiers Optimisé
Tous les types entiers primitifs disposent maintenant d'une méthode format_into qui accepte un paramètre &mut NumBuffer<Self>, un buffer suffisamment grand pour contenir le format décimal de n'importe quelle valeur de ce type. Cette méthode contourne une grande partie du dispatch dynamique que l'on trouve avec le formatage write! tamponné, ce qui peut grandement améliorer les performances.
Les benchmarks de itoa montrent que format_into performe de manière similaire, ce qui en fait un remplaçant standard potentiel pour cette dépendance et d'autres similaires. Pour les développeurs cherchant à réduire les dépendances externes tout en optimisant les performances, c'est une avancée majeure.
Correction de l'Interaction entre ManuallyDrop et Box
Avant Rust 1.96.0, un bug dans le compilateur Rust rendait le comportement du code suivant indéfini :
``rust let mut x = ManuallyDrop::new(Box::new(1)); unsafe { ManuallyDrop::drop(&mut x) }; let x = x; // Comportement indéfini ! ``
Ce problème est désormais corrigé dans Rust 1.98.0, assurant une manipulation plus sûre des ManuallyDrop.
Conclusion
Avec Rust 1.98.0, les développeurs bénéficient de nouvelles fonctionnalités qui optimisent les performances et la sécurité. Si tu n'as pas encore mis à jour, il est temps de le faire pour profiter de ces améliorations. Discutons de ton projet en 15 minutes.