C’est Mozilla et Fastly Labs qui ont dirigé le développement de la bibliothèque open source Cranelift. Celle-ci traduit les fonctions du format de code portable WebAssembly pour le Web en fonctions de code machine natives pour améliorer l’exécution. Cranelift peut également être utilisé pour exécuter du code WebAssembly hors du web. Cranelift est construit sous l’égide de Crane Station, The Crane Compiler Organization.

Cranelift lit WebAssembly en entrée et écrit le code machine natif en sortie. La bibliothèque peut également ingérer son propre Crane IR (représentation intermédiaire), si bien qu’elle offre un ensemble de fonctionnalités plus large. Avec Cranelift, les fonctions sont converties en SSA (static single assignment ou forme statique à affectation unique) et les optimisations sont effectuées avant d'être converties en code machine, lequel peut être packagé en fichiers objets natifs (fichiers.o) ou affecté en mémoire et exécuté directement comme Just-in-Time (JIT).

Des API encore instables

La bibliothèque est toujours en cours de développement. Ses API ne sont pas encore stables et la prise en charge de la plate-forme en cours de construction. Mais elle dispose de suffisamment de fonctions pour exécuter des programmes, par exemple exécuter des fonctions WebAssembly MVP (Minimum viable product ou Produit minimum viable), si elle est utilisée avec une intégration externe de WebAssembly dans le cadre d'une implémentation WebAssembly complète.

Selon les développeurs de Cranelift, la bibliothèque est semblable au projet de compilateur LLVM dans le sens où les deux ont des formes textuelles et en mémoire de leur représentation intermédiaire et peuvent faire des compilations croisées par défaut sans reconstruire le générateur de code. Parmi les différences, la représentation intermédiaire de Cranelift se situe à un niveau d'abstraction légèrement inférieur, pour permettre son utilisation tout au long du processus de génération de code. Le Cranelift IR est moins convivial pour les optimisations de niveau moyen, mais il n'en réalise actuellement aucune. De plus, LLVM a un petit jeu d'instructions bien défini et un grand nombre d'intrinsèques tandis que Cranelift a un jeu d'instructions plus grand et aucun intrinsèque.

Bientôt intégré à Firefox 

Des travaux sont en cours pour intégrer Cranelift dans le navigateur Firefox de Mozilla. La bibliothèque peut aussi être utilisée pour générer du code natif pour le compilateur Rust. Ses développeurs considèrent que Cranelift est plutôt une bibliothèque pour les produits importants plutôt que comme produit à part entière pour les utilisateurs. Les développeurs préparent également une VM sans navigateur, légère et intégrable, pour WebAssembly appelée Wasmtime qui utilise Cranelift pour la compilation et exécute WebAssembly en dehors du Web. Wasmtime peut être utilisé comme un utilitaire en ligne de commande ou comme une bibliothèque intégrée dans une application plus importante.

Le produit le plus mature basé sur Cranelift se trouve dans le Terrarium de Fastly, un éditeur et une plate-forme de déploiement multi-langage basés sur un navigateur, lancé fin novembre 2018 qui utilise Cranelift dans son compilateur et son serveur. Cranelift est téléchargeable sur GitHub