Rust est en effet un langage très intéressant (à mon humble avis ce qui se fait de mieux en ce moment niveau collaboration entre l'industrie, la communauté du logiciel libre et la recherche). Les changements de la 0.4 sont variés et plus intéressants pour la plupart que des renommages de mots-clés. Quelques détails (essentiellement une traduction de mon message reddit à ce sujet):
comme évoqué dans la dépêche, les développeurs sont en train de s'éloigner de la présentation des langages objets typiques (les valeurs sont la combinaison d'un état privé et des opérations qu'elles gèrent) vers une présentation séparée, avec d'un côté des records pour les données, et un système de "traits", qui correspondent en fait assez exactement aux type classes de Haskell, pour transporter les implémentation. L'idée est qu'on définit des interfaces/traits (mettons Printable) et que chaque type peut dire ensuite "je sais être Printable, voilà comment m'afficher"; ensuite le compilateur passe ces implémentations avec les valeurs de façon implicite, en utilisant les types des valeurs. Il n'est pas encore clair de savoir comment les programmeurs vont s'organiser, mais pour l'instant ça ressemble à un mouvement vers des types abstraits de données plutôt que des objets (selon le sens de l'article On Understanding Data Abstraction, Revisited de William Cook en 2009)
les développeurs et développeuses de Rust ont pas mal réfléchi aux question d'export de modules, de résolution des noms (à quoi fait référence tel nom ?), et bougent vers un système plus propre avec des séparations entre les différentes étapes de résolution
l'utilisation de types de méthodes où apparaît explicitement l'argument self, comme en Python, permet de mettre des quantificateurs de type sur cet argument pour indiquer comment la méthode se comporte avec l'état interne de l'objet : si elle le considère comme immutable, le passe en référence, etc. C'est une évolution intéressante.
les notions d'état mutable / non mutable / const, et de fonctions pure, continuent à évoluer en Rust. C'est un point de conception délicats des langages mainstream qui essaient de combiner effets de bords et bonnes propriétiés (D a eu le mêmes genre d'errances): on essaie de ne pas utiliser un système explicite trop compliqué comme peuvent le faire les chercheurs du domaine, mais d'avoir un truc pas totalement stupide non plus, et le compromis est difficile à trouver—à mon avis on n'a pas fini de voir des changements sur ce front là.
Rust est un langage qui essaie d'apporter des idées nouvelles à la programmation système (… contrairement à Go qui fait un best-of des anciennes idées déjà bien connues, ce qui est très utile en soi mais quand même moins excitant), les concepteurs n'ont pas peur d'expérimenter et de faire encore longtemps des changements fondamentaux. Ça veut dire qu'il ne faut pas vouloir l'utiliser pour des projets sérieux à maintenir sur le long terme aujourd'hui, mais plutôt le voir comme un véhicule en déplacement.
# Rust
Posté par gasche . En réponse à la dépêche De tout, de rien, des bookmarks, du bla bla #42. Évalué à 10.
Rust est en effet un langage très intéressant (à mon humble avis ce qui se fait de mieux en ce moment niveau collaboration entre l'industrie, la communauté du logiciel libre et la recherche). Les changements de la 0.4 sont variés et plus intéressants pour la plupart que des renommages de mots-clés. Quelques détails (essentiellement une traduction de mon message reddit à ce sujet):
comme évoqué dans la dépêche, les développeurs sont en train de s'éloigner de la présentation des langages objets typiques (les valeurs sont la combinaison d'un état privé et des opérations qu'elles gèrent) vers une présentation séparée, avec d'un côté des records pour les données, et un système de "traits", qui correspondent en fait assez exactement aux type classes de Haskell, pour transporter les implémentation. L'idée est qu'on définit des interfaces/traits (mettons
Printable) et que chaque type peut dire ensuite "je sais êtrePrintable, voilà comment m'afficher"; ensuite le compilateur passe ces implémentations avec les valeurs de façon implicite, en utilisant les types des valeurs. Il n'est pas encore clair de savoir comment les programmeurs vont s'organiser, mais pour l'instant ça ressemble à un mouvement vers des types abstraits de données plutôt que des objets (selon le sens de l'article On Understanding Data Abstraction, Revisited de William Cook en 2009)les développeurs et développeuses de Rust ont pas mal réfléchi aux question d'export de modules, de résolution des noms (à quoi fait référence tel nom ?), et bougent vers un système plus propre avec des séparations entre les différentes étapes de résolution
l'utilisation de types de méthodes où apparaît explicitement l'argument
self, comme en Python, permet de mettre des quantificateurs de type sur cet argument pour indiquer comment la méthode se comporte avec l'état interne de l'objet : si elle le considère comme immutable, le passe en référence, etc. C'est une évolution intéressante.les notions d'état mutable / non mutable / const, et de fonctions pure, continuent à évoluer en Rust. C'est un point de conception délicats des langages mainstream qui essaient de combiner effets de bords et bonnes propriétiés (D a eu le mêmes genre d'errances): on essaie de ne pas utiliser un système explicite trop compliqué comme peuvent le faire les chercheurs du domaine, mais d'avoir un truc pas totalement stupide non plus, et le compromis est difficile à trouver—à mon avis on n'a pas fini de voir des changements sur ce front là.
Rust est un langage qui essaie d'apporter des idées nouvelles à la programmation système (… contrairement à Go qui fait un best-of des anciennes idées déjà bien connues, ce qui est très utile en soi mais quand même moins excitant), les concepteurs n'ont pas peur d'expérimenter et de faire encore longtemps des changements fondamentaux. Ça veut dire qu'il ne faut pas vouloir l'utiliser pour des projets sérieux à maintenir sur le long terme aujourd'hui, mais plutôt le voir comme un véhicule en déplacement.