Après avoir lu nos articles précédents sur les avantages de Rust et Rust dans les embedded systems, vous avez décidé de vous lancer dans ce langage de programmation. Il n'y a qu'une seule chose qui vous retient : la pensée de cette énorme montagne de travail que vous aurez à accomplir si vous voulez migrer tout votre code vers Rust...

Heureusement, nous avons une bonne nouvelle pour vous ! L'un des plus grands avantages de Rust est que vous n'avez pas à migrer immédiatement tout votre ancien code vers ce langage. Rust peut être parfaitement combiné avec C, par exemple : vous pouvez commencer par le code le plus important/le plus sujet aux erreurs et travailler dessus jusqu'à ce que tout votre code ait été migré. Pas mal, non ?

de c à rust.

Supposons maintenant : tout votre code est écrit en C actuellement et vous souhaitez migrer vers un environnement Rust. Mais comment démarrer ?

Tout d'abord : ne réécrivez pas tous vos millions de lignes de code. C'est une tâche titanesque pour laquelle personne n'a le temps. Commencez par un logiciel critique. Vous pouvez le convertir en Rust et l'intégrer facilement à votre logiciel C. 

Bien sûr, il y a un hic... Le code C est intrinsèquement « dangereux » : vous ne pourrez donc pas simplement faire un mappage 1 à 1 de votre code C vers le code Rust sans devoir faire des ajustements en lien avec la sécurité de la mémoire. Et la sécurité est souvent la principale raison pour laquelle les développeurs souhaitent migrer vers Rust.

le projet c2rust.

Si vous commencez à traduire ou à convertir des lignes de code de C vers Rust, heureusement, il existe des outils pratiques qui peuvent vous aider. Par exemple, considérons c2rust. C2rust est un projet de Galois et Immunant : cet outil traduit les modules C en code sémantiquement similaire dans Rust. Cela peut servir de première étape dans le processus d'obtention de code Rust sécurisé.

Pour traduire des fichiers C en fichiers Rust avec c2rust, vous devrez exécuter l'outil c2rust avec la sous-commande transpile et le fichier compile_commands.json. Vous pouvez générer ce fichier avec cmake en utilisant la commande suivante :

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1

De là, vous obtenez un fichier compile_commands.json. Vous traduisez le code C en Rust avec la commande : 

c2rust transpile path/to/compile_commands.json

Les fichiers Rust que vous obtenez finalement sont légèrement différents des modules Rust ordinaires. Ils exportent et importent des fonctions via l'API C. Et finalement, ces modules peuvent être fusionnés dans une bibliothèque ou un binaire Rust statique. Ce qui est pratique ici, c'est que la fonctionnalité est préservée et que les cas test continuent de réussir. La traduction du code Rust généré en code Rust sûr et idiomatique reste une étape manuelle.

bindgen.

En plus de remplacer le code C par du code Rust, vous pouvez également interfacer les deux langages entre eux. L'outil de liaison pratique bindgen permet aux développeurs de générer rapidement et efficacement du code passe-partout pour utiliser les fonctions Rust dans un environnement C (et vice versa).

Par exemple, Bindgen facilite l'utilisation d'un driver binary blob d'un silicon vendor avec une interface C et l'interaction avec celui-ci à partir du code Rust.

close-up of hands typing on a keyboard
close-up of hands typing on a keyboard

maintenance.

La plupart des développeurs utilisent l'outil Cargo pour maintenir leur environnement Rust. Cargo est le package manager de Rust et télécharge, compile et distribue les packages Rust.

Car l'écosystème de Rust n'est pas encore aussi étendu que celui des autres langages, le langage n'a pas encore autant de bibliothèques (ou caisses). Les membres de la communauté Rust ajoutent quotidiennement de nouvelles crates à crates.io. Cargo et crates.io garantissent ensemble que les développeurs peuvent intégrer ces crates dans leur projet sans trop de problèmes.

En outre, il existe d'autres outils utiles tels que Rust Clippy, qui peuvent détecter des erreurs courantes dans votre code Rust et éventuellement vous aider à obtenir un meilleur code Rust.

Avez-vous besoin d'aide pour votre migration vers Rust ? N’hésitez pas à notre expert en Rust, Devon, et nous examinerons ce que nous pouvons faire pour vous.

à propos de l'auteur
Portrait of Kris van der Stappen
Portrait of Kris van der Stappen

devon kerkhove

senior account manager

Travailler chaque jour sur la technologie (invisible) de demain, avec nos clients, c'est notre raison d'être. Mordu des embedded systems, désireux d'innover.