Présentation d'Android Rust

La plate-forme Android permet de développer des composants OS natifs en Rust, un langage de programmation système moderne qui offre des garanties de sécurité de la mémoire avec des performances équivalentes à celles de C/C++. Rust utilise une combinaison de vérifications au moment de la compilation qui appliquent la durée de vie et la propriété des objets, et de vérifications au moment de l'exécution qui garantissent des accès mémoire valides, éliminant ainsi le besoin d'un récupérateur de mémoire.

Rust offre une gamme de fonctionnalités de langage modernes qui permettent aux développeurs d'être plus productifs et plus confiants dans leur code :

  • Programmation simultanée sécurisée : la facilité avec laquelle les utilisateurs peuvent écrire du code efficace et thread-safe a donné naissance au slogan Fearless Concurrency de Rust.
  • Système de typage expressif : Rust aide à prévenir les bugs de programmation logique en autorisant des types très expressifs (tels que les wrappers Newtype et les variantes d'énumération avec contenu).
  • Vérifications plus strictes au moment de la compilation : plus de bugs sont détectés au moment de la compilation, ce qui permet aux développeurs d'être plus confiants quant au bon fonctionnement du code une fois compilé.
  • Framework de test intégré : Rust fournit un framework de test intégré dans lequel les tests unitaires peuvent être placés à côté de l'implémentation qu'ils testent, ce qui facilite l'inclusion des tests unitaires.
  • Application de la gestion des erreurs : les fonctions avec des échecs récupérables peuvent renvoyer un type de résultat, qui sera une variante de réussite ou une variante d'erreur. Le compilateur exige que les appelants vérifient et gèrent la variante d'erreur d'un énumérateur Result renvoyé par un appel de fonction. Cela réduit le risque de bugs résultant d'échecs non gérés.
  • Initialisation : Rust exige que chaque variable soit initialisée avec un membre légal de son type avant utilisation, ce qui empêche une initialisation involontaire avec une valeur non sécurisée.
  • Gestion plus sûre des nombres entiers : toutes les conversions de type entier sont des casts explicites. Les développeurs ne peuvent pas caster accidentellement lors d'un appel de fonction lorsqu'ils attribuent une valeur à une variable ou lorsqu'ils tentent d'effectuer des opérations arithmétiques avec d'autres types. La vérification du dépassement de capacité est activée par défaut dans Android pour Rust, ce qui nécessite que les opérations de dépassement de capacité soient explicites.

Pour en savoir plus, consultez la série d'articles de blog sur la compatibilité d'Android avec Rust :