- Cranelift est un backend de génération de code sous licence Apache-2.0, développé dans le cadre du runtime Wasmtime pour WebAssembly
- En octobre 2023, le projet Rust a commencé à proposer Cranelift comme composant optionnel de la toolchain nightly
- Les utilisateurs peuvent désormais utiliser Cranelift comme backend de génération de code pour les builds de débogage de projets écrits en Rust
- Cranelift concurrence les compilateurs existants et génère du code plus rapidement grâce à une conception simplifiée qui ne privilégie que les optimisations importantes
Importance du temps de compilation
- Les utilisateurs de langages de programmation veulent des temps de compilation rapides
- Rust, comme d'autres langages utilisant LLVM, a suscité des plaintes concernant les temps de compilation
- Un compilateur qui génère du code suffisamment vite peut être avantageux par rapport à l'utilisation d'un interpréteur
- Un compilateur axé sur la vitesse de compilation peut avoir une vraie valeur
Optimisations de Cranelift
- Cranelift effectue des optimisations de plusieurs façons lors de la génération de code
- Le pipeline d'optimisation repose sur les E-graphs, une structure de données représentant efficacement des ensembles de représentations intermédiaires
- Dans les compilateurs traditionnels, l'ordre des optimisations a un impact majeur sur la qualité du code généré
- Cranelift utilise les E-graphs pour que l'ordre des optimisations n'influe pas sur le résultat
- Extraire la représentation finale d'un E-graph est un problème NP-complet, mais Cranelift utilise des heuristiques pour extraire rapidement une représentation suffisamment bonne
Cranelift pour Rust
- Le travail nécessaire pour utiliser Cranelift comme backend Rust a été considérable
- Le compilateur Rust utilise un IR de niveau intermédiaire pour représenter les programmes après vérification des types
- Pour utiliser Cranelift, il a fallu une bibliothèque capable de convertir cet IR intermédiaire en CLIF
- Cette bibliothèque a été principalement écrite par
bjorn3, membre de l'équipe du compilateur Rust
- Les utilisateurs peuvent tester le backend Cranelift avec rustup et cargo
Avis de GN⁺
- L'introduction de Cranelift peut être vue comme une réponse à la demande persistante, dans la communauté Rust, de réduire les temps de compilation. Cela peut contribuer à améliorer la productivité des développeurs.
- L'approche de Cranelift, qui utilise des E-graphs pour résoudre le problème de l'ordre des optimisations, propose un nouveau paradigme dans la conception des compilateurs. Cela peut ouvrir de nouvelles directions pour la recherche et le développement dans ce domaine.
- D'un point de vue critique, il reste à vérifier, à travers davantage de cas d'usage réels, à quel point Cranelift est stable et efficace par rapport à LLVM.
- Parmi les autres backends de compilateur offrant des fonctions similaires à Cranelift, on peut citer notamment libgccjit de GCC ; la comparaison avec ces alternatives permettrait de mieux cerner les forces et les faiblesses de Cranelift.
- Les développeurs qui adoptent Cranelift doivent prendre en compte la compatibilité avec l'infrastructure existante basée sur LLVM ainsi que le coût de transition, et évaluer attentivement ses performances et sa stabilité.
1 commentaires
Avis Hacker News
rustcet d’utiliser Rosetta 2, mais Rosetta 2 peut affecter les performances, donc il faut comparer avec le backend LLVM.