Rust vs Ada
(reddit.com)Voici un commentaire comparant Rust et Ada, trouvé sur r/ada sur Reddit.
-
Les deux langages bénéficient du fait de ne pas être du C : les pièges syntaxiques de C (foot guns), les comportements indéfinis, etc.
-
Les deux langages prennent en charge la memory safety. Les limites des tableaux sont vérifiées à l’exécution, avec des règles permettant de vérifier la validité des pointeurs, entre autres. Dans Ada, les vérifications sont un peu plus simples, et il existe
Unchecked_Accesspour tout contourner. Le borrow checker de Rust est plus sophistiqué, mais il est aussi difficile à contourner lorsque cela devient nécessaire. -
Rust a adopté l’allocation dynamique. C’est aussi possible en Ada, mais de manière maladroite et peu pratique. Il est clair que le langage Ada n’a pas été conçu pour cela. Ada vient d’une époque où l’allocation sur le tas était considérée comme problématique pour la sûreté, où l’on s’inquiétait de la fragmentation mémoire et où il fallait pouvoir prouver l’absence d’épuisement de la mémoire. Rust encourage au contraire l’usage libre du tas, et si une allocation dynamique est nécessaire, Rust est clairement plus sûr. En Ada, la désallocation n’est pas sûre, car elle peut laisser des dangling pointers.
-
Rust a l’avantage en matière de sûreté des threads. Le borrow checker empêche les race conditions dès le départ.
-
Ada a l’avantage en matière de sûreté des valeurs. Les constrained subtypes sont un bon outil pour écrire du code correct et servent de base à d’autres fonctionnalités d’Ada, comme les vérifications sur les tableaux.
-
Ada a l’avantage dans le domaine de la preuve formelle grâce à SPARK. Rien d’équivalent n’a été trouvé côté Rust. Si un haut niveau de sûreté est indispensable, SPARK est l’outil le plus adapté.
2 commentaires
Comme j’écris depuis mon téléphone, il y a quelques fautes de frappe, snif.
memory sadety -> memory safety.
burrow checker -> borrow checker
thread safery -> sécurité des threads
:D