Réécrire Rust
- Le langage de programmation Rust donne l’impression d’un produit de première génération
- Les attraits initiaux de Rust : types algébriques, sécurité mémoire, absence de surcoût de performance, gestionnaire de paquets moderne
- Après 4 ans d’utilisation, Rust n’est pas toujours parfait
- L’évolution du langage a considérablement ralenti
- De nombreuses fonctionnalités instables ne sont pas intégrées à Rust stable
Un langage fantastique
- Envie de forker le compilateur Rust et de créer une nouvelle édition « seph »
- Possibilité d’ajouter de nouvelles fonctionnalités tout en conservant les fonctions existantes de Rust
Traits de fonction (effets)
- Rust définit des traits pour les structures, mais il faudrait aussi définir des traits pour les fonctions
- Cela permettrait d’exprimer différentes propriétés des fonctions
- si une fonction peut provoquer une panique
- si elle possède une taille de pile fixe
- si elle s’exécute jusqu’au bout ou s’interrompt en attente en cours de route
- si elle est pure
- si elle exécute du code unsafe
- si elle garantit sa terminaison
Fonctionnalités au moment de la compilation
- De nombreux projets Rust utilisent beaucoup de crates tierces
- Ces crates augmentent les risques de supply chain
- Proposition d’ajouter un mécanisme imposant l’autorisation explicite des appels à des fonctions sensibles pour la sécurité
- Pour appeler une fonctionnalité comme
fs_write, il faudrait l’autoriser explicitement
Pin, Move et emprunt de structures
Pin est un hack complexe pour résoudre des problèmes du borrow checker de Rust
- Utiliser un trait marqueur
Move à la place de Pin serait plus logique
- Proposition d’ajouter une syntaxe permettant de marquer les champs d’une structure comme empruntés
- Proposition d’introduire un trait marqueur
Move et un trait Mover
Compilation
- Introduire la fonctionnalité
comptime de Zig pour remplacer le langage de macros de Rust
- Ajouter un petit interpréteur capable d’exécuter du code au moment de la compilation
- Utiliser Rust lui-même au lieu du langage de macros de Rust
Petites corrections
- Correction de
impl<T: Copy> for Range<T>
- Correction de
derive avec des types associés
- Prise en charge du AND logique dans les expressions
if-let
- Amélioration de l’ergonomie des pointeurs bruts
- Ajout d’un argument
Allocator à tous les types de collections intégrés
Réflexions de conclusion
- Les fonctionnalités asynchrones doivent aussi être améliorées, mais cela nécessiterait un billet séparé
- La plupart des changements ne sont pas compatibles avec Rust existant
- Une nouvelle édition de Rust pourrait être nécessaire
- L’auteur envisage de forker directement le compilateur plutôt que de se fatiguer avec le processus RFC sur GitHub
Résumé de GN⁺
- Rust n’est pas parfait malgré ses attraits initiaux
- L’évolution du langage ralentit et de nombreuses fonctionnalités instables n’arrivent pas dans Rust stable
- Diverses propositions existent, notamment sur les traits de fonction, les fonctionnalités de compilation, ainsi que les améliorations de Pin et Move
- Ces propositions pourraient fortement améliorer l’utilisabilité de Rust
- Zig est un autre langage proposant des fonctionnalités similaires
1 commentaires
Commentaires sur Hacker News
Avis sur le processus RFC de Rust
Le problème des dépendances de Rust
État actuel de Rust
Avis sur la réécriture de Rust
Mécontentement sur le processus de décision de Rust
Commentaire de Josh Triplett
Avis sur la complexité de Rust
Avis sur la vitesse de Rust
Avis sur l’amélioration de Mutex
Avis sur la vitesse de développement des fonctionnalités de Rust
Avis sur la conception des fonctionnalités de Rust
Problème du borrow checker de Rust
Fonctionnalités de compilation de Rust
Fonctionnalités instables de Rust
Avis sur le rythme d’évolution de Rust