pierwsza wersja , bardzo szybkiego interpretera pośredniego kodu WebAssembly, przeznaczonego głównie do uruchamiania aplikacji WebAssembly na mikrokontrolerach i platformach, które nie mają implementacji JIT dla WebAssembly, mają zbyt mało pamięci do działania JIT lub nie dopuszczają tworzenia stron pamięci wykonawczej potrzebnych do realizacji JIT. Kod projektu jest napisany w języku C i na licencji MIT.
Wasm3 jest zgodny z specyfikacją WebAssembly 1.0 i może być używany do uruchamiania wielu aplikacji WASI, zapewniając wydajność tylko 4-5 razy niższą niż silniki JIT (, ) i 11.5 razy niższą w porównaniu do wykonania kodu natywnego. W porównaniu do innych interpreterów WebAssembly (, , ), wasm3 okazał się 15.8 razy szybszy.
Aby działać, wasm3 wymaga 64KB pamięci na kod i 10KB RAM-u, co pozwala na wykorzystanie projektu do uruchamiania aplikacji skompilowanych w WebAssembly na , takich jak Arduino MKR*, Arduino Due, Particle Photon, ESP8266, ESP32, Air602 (W600), nRF52, nRF51 Blue Pill (STM32F103C8T6), MXChip AZ3166 (EMW3166),
Maix (K210), HiFive1 (E310), Fomu (ICE40UP5K) i ATmega1284, a także na płytach i komputerach opartych na architekturach x86, x64, ARM, MIPS, RISC-V i Xtensa. Wsparcie oferują systemy operacyjne takie jak Linux (w tym routery oparte na OpenWRT), Windows, macOS, Android i iOS. Możliwa jest również kompilacja wasm3 do pośredniego kodu WebAssembly w celu uruchomienia interpretera w przeglądarce lub do lokalnego uruchamiania (self-hosting).
Wysoka wydajność osiągana jest dzięki zastosowaniu w interpreterze techniki (M3), w której w celu zmniejszenia narzutu na dekodowanie bajtkodów wykonywana jest wstępna translacja bajtkodów na bardziej efektywne operacje, generujące pseudomaszynowy kod, natomiast model wykonawczy stosowej maszyny wirtualnej jest przekształcany w bardziej efektywny model rejestrowy. Operacje w M3 są funkcjami C, których argumentami są rejestry wirtualnej maszyny, które mogą być odwzorowane na rejestry CPU. Często występujące sekwencje operacji optymalizowane są do złożonych operacji.
Dodatkowo można zaznaczyć rozpowszechnienia
WebAssembly w sieci. Analizując 948 tysięcy najpopularniejszych stron w rankingu Alexa, badacze odkryli, że WebAssembly jest używane na 1639 stronach (0,17%), co oznacza 1 na każdą 600 stron. Na stronach zidentyfikowano 1950 modułów WebAssembly, z których 150 jest unikalnych. Przy rozważaniu zastosowania WebAssembly, wyniki były niepokojące — w ponad 50% przypadków WebAssembly było stosowane w celach złośliwych, na przykład do kopania kryptowalut (55,7%) i ukrywania kodu złośliwych skryptów (0,2%). Z legalnych zastosowań WebAssembly odnotowano wykonywanie bibliotek (38,8%), tworzenie gier (3,5%) i wykonanie własnego kodu, napisanego w innym języku niż JavaScript (0,9%). W 14,9% przypadków WebAssembly było stosowane do analizy otoczenia w celu identyfikacji użytkownika (fingerprinting).

Źródło: opennet.ru
