Enregistrement de décision d’architecture : langage de programmation Rust
Numéro de décision : AR-001
Titre de la décision : adoption du langage de programmation Rust
Date : 1er décembre 2021
État : Accepté
Énoncé du problème
À mesure que nous continuons à développer des applications logicielles, nous avons constaté qu’il est de plus en plus difficile d’atténuer les vulnérabilités de sécurité potentielles et de prévenir les erreurs d’exécution. Avec les langages de programmation existants, tels que C et C++, nous continuons à rencontrer des problèmes comme les dépassements de tampon, les fuites de mémoire et les comportements indéfinis qui provoquent des plantages d’applications. Nous avons besoin d’un langage de programmation qui offre des garanties de sécurité mémoire et qui soit assez efficace pour prendre en charge des applications critiques en matière de performance.
Considérations
Plusieurs langages de programmation sont conçus pour répondre aux problèmes existants. Parmi eux, le langage de programmation Rust a suscité une attention considérable de la part de la communauté des développeurs en raison de ses caractéristiques de conception uniques. Les considérations comprennent :
Sécurité mémoire et sûreté
Performance et efficacité
Soutien de la communauté et adoption
Courbe d’apprentissage
Outils et écosystème
Compatibilité avec les systèmes logiciels existants.
Contraintes
Adopter un nouveau langage de programmation exige de reformer les développeurs, ce qui prend du temps et des ressources. L’intégration du langage au flux de travail de développement existant peut être un défi. Nous devons assurer la compatibilité avec les systèmes existants et éviter les changements incompatibles pour maintenir la continuité.
Mise en œuvre
Notre équipe de développement suivra une formation pour apprendre et se familiariser avec le langage de programmation Rust.
Nous créerons un nouveau projet en Rust à titre d’essai pour évaluer sa compatibilité et son adéquation à nos besoins de développement.
Nous migrerons progressivement vers Rust les systèmes existants écrits en C et en C++.
Nous collaborerons avec la communauté Rust pour explorer les outils et bibliothèques disponibles qui peuvent améliorer notre flux de travail de développement.
Nous surveillerons la performance de Rust et la comparerons régulièrement à celle des langages de programmation existants.
Nous adopterons une approche à long terme qui équilibre les coûts de formation et d’intégration avec les avantages potentiels de l’utilisation de Rust.
Justification
Nous avons adopté Rust en raison de ses caractéristiques uniques conçues pour offrir des garanties de sécurité mémoire et de sûreté tout en préservant la performance et l’efficacité. Le système de types robuste de Rust, son vérificateur d’emprunts (borrow checker) et ses concepts de sécurité mémoire le rendent très adapté au développement d’applications critiques en matière de performance et de sûreté. De plus, Rust possède une communauté importante de développeurs, ce qui nous donne accès à un large éventail d’outils, de bibliothèques et d’écosystème qui soutiennent notre flux de travail de développement. Bien que Rust s’accompagne d’une courbe d’apprentissage, nous pensons que les avantages de son adoption l’emportent sur les coûts et constituent une excellente occasion de poursuivre la croissance et l’innovation.
Conséquences
L’adoption de Rust exigera un investissement important en temps et en ressources pour former les développeurs et intégrer le langage dans le flux de travail de développement existant.
L’adoption de Rust peut causer un certain degré de problèmes de compatibilité avec les systèmes existants, nécessitant de la refactorisation et des modifications.
L’adoption de Rust peut augmenter le nombre de développeurs capables de contribuer à notre projet en attirant des développeurs Rust qui veulent travailler sur des projets passionnants.
L’adoption pourrait entraîner une amélioration de la performance, de l’efficacité et de la sûreté par rapport aux langages existants.
Enfin, l’adoption de Rust présente l’avantage potentiel de réduire les vulnérabilités de sécurité dans nos applications.