Cranelift (anciennement connu sous le nom de Cretonne ) est un compilateur backend d'optimisation qui convertit une représentation intermédiaire indépendante de la cible en code machine exécutable . Il est écrit en Rust . Le projet a démarré en 2016 et est actuellement développé par Bytecode Alliance . Contrairement aux compilateurs backend tels que LLVM qui se concentrent davantage sur la compilation anticipée, Cranelift se concentre plutôt sur la compilation juste à temps , le temps de compilation court étant un objectif explicite du projet.
Depuis 2023, Cranelift prend en charge les architectures de jeu d'instructions telles que x86-64 , AArch64 , RISC-V et IBM z/Architecture .
Histoire
Avant la réécriture du framework backend en 2020, le projet n'utilisait qu'une seule représentation intermédiaire (IR) à toutes les étapes de compilation avant l'émission du code machine, à savoir CLIF (Cranelift IR Format). L'ancienne conception utilisait des légalisations d'instructions , qui impliquaient de transformer l'IR de haut niveau en continu jusqu'à ce que chaque instruction CLIF corresponde à une instruction de la machine cible, à partir de laquelle le code exécutable pouvait être émis.
En 2020, le backend a été réécrit pour utiliser un IR distinct et spécifique à la machine appelé VCode pour les étapes de compilation ultérieures. Après cette réécriture, un CLIF d'entrée de haut niveau serait optimisé par une couche intermédiaire avant d'être abaissé dans VCode , qui serait ensuite transformé par les passes restantes dans le backend. Peepmatic , un outil utilisé pour générer un optimiseur de judas à partir d'un langage spécifique au domaine (DSL), a également été ajouté, bien qu'il ait été supprimé par la suite.
En 2022, un nouvel allocateur de registre , adapté de l'allocateur de registre d' IonMonkey , a été ajouté. De plus, le framework backend a été retravaillé pour utiliser ISLE ( Instruction Selection /Lowering Expressions DSL), un autre DSL du projet qui a été créé pour faciliter le développement de l'étape de sélection des instructions dans les backends.
Le milieu et la fin ont vu l'ajout de passes d'optimisation qui utilisent des graphiques électroniques en 2022. Les passes d'optimisation sont activées par défaut à partir de 2023.
Applications
Actuellement, Cranelift est utilisé par plusieurs environnements d'exécution WebAssembly , tels que Wasmtime et Wasmer , avec des performances comparables aux environnements d'exécution basés sur LLVM.
Il existe également un générateur de code alternatif pour le compilateur Rust, alimenté par Cranelift.