première version , un interpréteur de code intermédiaire WebAssembly très rapide, principalement destiné à exécuter des applications WebAssembly sur des microcontrôleurs et des plateformes où une implémentation JIT pour WebAssembly est absente, où la mémoire est insuffisante pour faire fonctionner le JIT, ou où la création de pages mémoire exécutables nécessaires à la mise en œuvre du JIT n'est pas autorisée. Le code du projet est écrit en langage C et sous licence MIT.
Wasm3 est compatible avec la spécification WebAssembly 1.0 et peut être utilisé pour exécuter de nombreuses applications WASI, offrant des performances seulement 4 à 5 fois inférieures à celles des moteurs JIT (, ) et 11,5 fois inférieures à celles de l'exécution de code natif. Comparé à d'autres interpréteurs WebAssembly (, , ), wasm3 s'est avéré 15,8 fois plus rapide.
Pour faire fonctionner wasm3, 64 Ko de mémoire sont nécessaires pour le code et 10 Ko de RAM, ce qui permet d'exécuter des applications compilées en WebAssembly sur des , tels que Arduino MKR*, Arduino Due, Particle Photon, ESP8266, ESP32, Air602 (W600), nRF52, nRF51 Blue Pill (STM32F103C8T6), MXChip AZ3166 (EMW3166),
Maix (K210), HiFive1 (E310), Fomu (ICE40UP5K) et ATmega1284, ainsi que sur des cartes et ordinateurs basés sur les architectures x86, x64, ARM, MIPS, RISC-V et Xtensa. Les systèmes d'exploitation pris en charge incluent Linux (y compris les routeurs basés sur OpenWRT), Windows, macOS, Android et iOS. Une compilation de wasm3 en code intermédiaire WebAssembly est également possible pour exécuter l'interpréteur dans un navigateur ou pour un lancement embarqué (self-hosting).
De hautes performances sont atteintes grâce à l'utilisation dans l'interpréteur de la technique (M3), qui réduit les frais généraux de décodage du bytecode en effectuant une traduction anticipée du bytecode en opérations plus efficaces, générant du code-machine pseudo, tandis que le modèle d'exécution de la machine virtuelle à pile est transformé en une approche plus efficace basée sur des registres. Les opérations dans M3 sont des fonctions C, dont les arguments sont des registres de la machine virtuelle, pouvant être mappés sur les registres CPU. Les séquences d'opérations fréquentes pour l'optimisation sont transformées en opérations agrégées.
Il convient également de noter de distribution
WebAssembly sur le Web. En analysant 948 000 des sites les plus populaires selon le classement Alexa, les chercheurs ont découvert que WebAssembly est utilisé sur 1639 sites (0,17 %), c'est-à-dire sur 1 sur 600 sites. Un total de 1950 modules WebAssembly ont été détectés sur ces sites, dont 150 sont uniques. En examinant les domaines d'application de WebAssembly, des conclusions peu encourageantes ont été tirées : dans plus de 50 % des cas, WebAssembly a été utilisé à des fins malveillantes, par exemple pour le minage de cryptomonnaies (55,7 %) et pour dissimuler le code de scripts malveillants (0,2 %). Parmi les applications légitimes de WebAssembly, on note l'exécution de bibliothèques (38,8 %), la création de jeux (3,5 %) et l'exécution de code propre, non écrit en JavaScript (0,9 %). Dans 14,9 % des cas, WebAssembly a été utilisé pour analyser l'environnement afin d'identifier l'utilisateur (fingerprinting).

Source : opennet.ru
