Engineering of the fastest WebAssembly interpreters
Wasmi 2.0 est publié après huit mois de travail et offre des gains d'exécution importants, en moyenne ~2,2× plus rapide que Wasmi 1.0 sur la suite wasmi-benchmarks sur un Apple M2 Pro. La version introduit quatre modes d'ordonnancement d'instructions (direct-threaded, indirect-threaded, switch-loop et call-loop), des registres accumulateurs (ireg, freg32, freg64) et des options de configuration pour équilibrer performance et empreinte binaire. Une refonte de la représentation d'instance en mémoire contiguë, un CodeMap append-only lock-free et l'encodage de pointeurs de fonctions dans le bytecode réduisent les coûts d'accès aux objets et accélèrent les appels, alignant Wasmi 2.0 sur les performances de Wasm3 et Stitch tout en partageant le bytecode entre instances. Wasmi 2.0 fixe la largeur des cellules à 64 bits pour éviter les régressions liées à SIMD, ajoute des optimisations d'IR comme la fusion d'opcodes et des copies efficaces, corrige une déoptimisation Rust affectant la génération d'assemblage et propose des fonctionnalités utilisateur comme la validation réduite, le fuel metering stable et une CLI améliorée. Le projet a été soutenu par la Stellar Development Foundation, les benchmarks montrent que Wasmi 2.0 appartient aux interprètes Wasm portables les plus rapides, et l'auteur évoque les objectifs pour Wasmi 3.0 (function-references, exception-handling, gc) ainsi que plusieurs manières d'essayer Wasmi via la crate, la CLI ou l'API C.