1 points par GN⁺ 2024-09-27 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-09-27
Commentaires sur Hacker News
  • Avis sur le processus RFC de Rust

    • Le fait que l’équipe principale de Rust rende l’ajout de nouvelles fonctionnalités difficile est une bonne décision pour préserver la cohérence et la prévisibilité du langage
    • Dans le cas de Swift, l’introduction de nombreuses nouvelles fonctionnalités l’a rendu complexe, au point de finir par abandonner Swift
    • Il est important de garder Rust aussi concis que possible
  • Le problème des dépendances de Rust

    • En prenant l’exemple de la crate Cargo-watch, il s’agit d’une simple application de surveillance de fichiers, mais à cause des dépendances, elle totalise 4 millions de lignes de code
  • État actuel de Rust

    • Rust est désormais dans une phase de « travail pour une adoption à grande échelle »
    • Le développement lent des fonctionnalités est un phénomène naturel et sain, et de mauvais choix de conception peuvent causer des torts plus importants
    • L’attrait de Rust vient moins de nouvelles fonctionnalités que de sa sûreté mémoire et du fait qu’il s’agit d’un langage prêt pour la production sans GC
  • Avis sur la réécriture de Rust

    • Réécrire Rust en Rust semblait être une blague méta-satirique
  • Mécontentement sur le processus de décision de Rust

    • Il y a des plaintes sur la lenteur du processus de décision, mais c’est davantage un problème de personnes et de temps qu’un problème technique
    • Certaines anciennes fonctionnalités stagnent, mais beaucoup de fonctionnalités ne sont pas destinées à être stabilisées
  • Commentaire de Josh Triplett

    • Il souligne qu’un exemple précis est erroné et partage un lien connexe
  • Avis sur la complexité de Rust

    • Rust possède déjà de nombreuses fonctionnalités, mais certains en demandent encore davantage
    • Zig est plus simple et plus rapide, avec moins de drama dans la communauté
  • Avis sur la vitesse de Rust

    • À mesure qu’un projet mûrit, beaucoup d’efforts sont nécessaires pour peaufiner les fonctionnalités existantes
    • La collaboration entre équipes est devenue plus difficile, et il existe des objectifs de projet pour améliorer cela
  • Avis sur l’amélioration de Mutex

    • Beaucoup d’efforts ont été faits pour améliorer les primitives de synchronisation de Rust
    • Des fonctionnalités comme les fonctions asynchrones ont été ajoutées, servant de base à l’implémentation de fonctionnalités plus complexes
  • Avis sur la vitesse de développement des fonctionnalités de Rust

    • Certaines personnes se plaignent que le langage évolue trop vite ou trop lentement
    • Certaines fonctionnalités avancent lentement, mais de nombreuses activités sont en cours
  • Avis sur la conception des fonctionnalités de Rust

    • Des fonctionnalités comme les traits de fonctions ont récemment fait l’objet d’une importante exploration de conception
    • Les capacités de compilation ne peuvent pas être résolues au niveau du langage, et des solutions comme WebAssembly sont plus probables
  • Problème du borrow checker de Rust

    • Comprendre les structures auto-référentielles est un problème extrêmement difficile
    • On sait déjà comment prendre en charge les emprunts partiels, mais le problème est de les exposer au système de types
  • Fonctionnalités de compilation de Rust

    • Une RFC a été rédigée pour rendre les règles de macro plus puissantes
    • Davantage de travail est nécessaire pour l’analyse syntaxique programmatique
  • Fonctionnalités instables de Rust

    • Il existe de nombreuses fonctionnalités instables, et il est nécessaire de faire du ménage
  • Avis sur le rythme d’évolution de Rust

    • Le départ de Mozilla a ralenti le projet, mais c’est préférable à suivre une mauvaise direction