La sauce secrète : un nouveau générateur de code Rust

L’une des clés pour fournir des logiciels Windows de qualité production avec Rust est un nouvel outil de génération de code pour le compilateur de Rust, rustc. rustc est conçu pour utiliser différents back-ends de génération de code, au-delà du LLVM par défaut. Il existe déjà des variantes qui fonctionnent avec GCC et avec Cranelift. Si vous n’avez pas rencontré Cranelift, c’est le générateur de code de Bytecode Alliance, utilisé dans le cadre du framework wasmtime. L’ajout d’un nouveau générateur de code consiste à créer un outil qui se connecte aux API du compilateur Rust, prend sa sortie de bytecode, génère du code natif et le transmet au pipeline de construction de votre choix.

C’est le rôle de l’outil rustc_codegen_utc de Microsoft. Il est conçu pour fonctionner avec la pile MSVC existante, donnant à Rust l’accès à une partie mature, bien testée et éprouvée de la plate-forme de développement Windows sans avoir besoin de modifier votre code (la compatibilité est intégrée). Cela le relie directement au back-end du compilateur Visual C++, un ensemble d’outils rassemblés par le système de build de Microsoft pour travailler avec des projets complexes mélangeant code et bibliothèques.

Microsoft appelle cela le back-end UTC, pour Universal Tuple Compiler. Cependant, vous ne verrez ce nom nulle part ; le code réel est une DLL, C2.DLL. Le code est généré et livré sous forme de fichiers .OBJ où il peut ensuite être transmis à l’éditeur de liens MSVC et livré sous forme d’exécutable binaire. Cela permet aux outils Rust de profiter des décennies de travail que Microsoft a consacré à la fois à ses compilateurs et à ses outils de construction. Microsoft n’a pas besoin de dupliquer ce travail, garantissant ainsi que les fonctionnalités de sécurité et de résilience existantes sont transférées dans la chaîne du compilateur Rust. Et le code résultant est compatible avec le code C et C++ qui a été transmis via le même back-end.

A lire également