La bibliothèque Cranelift se charge à la réalisation de WebAssembly
Cranelift lit WebAssembly en entrée et rédigé du code machine natif en sortie.
C’est Mozilla et Fastly Labs qui ont conduit le développement de la bibliothèque open source Cranelift. Celle-ci explique 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 naturel en sortie. La bibliothèque peut aussi 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é immédiatement comme Just-in-Time (JIT).
Des API encore instables
La bibliothèque est toujours en cours de croissance. 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 incorporation externe de WebAssembly dans le cadre d’une implémentation WebAssembly complète.
Selon les développeurs de Cranelift, la bibliothèque est similaire 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 reproduction 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.
AdTech Ad
Prochainement intégré à Firefox
Des travaux sont en cours pour incorporer 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 consommateurs. 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 mûr 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.