il primo rilascio , un interprete molto veloce per il codice intermedio WebAssembly, progettato principalmente per eseguire applicazioni WebAssembly su microcontrollori e piattaforme che non hanno una implementazione JIT di WebAssembly, hanno memoria insufficiente per il funzionamento del JIT o non consentono la creazione di pagine di memoria eseguibili necessarie per implementare il JIT. Il codice del progetto è scritto in C e sotto licenza MIT.
Wasm3 garantisce la compatibilità con la specifica WebAssembly 1.0 e può essere utilizzato per eseguire molte applicazioni WASI, offrendo prestazioni solo 4-5 volte inferiori ai motori JIT (, ) e 11.5 volte inferiori all'esecuzione di codice nativo. Rispetto ad altri interpreti WebAssembly (, , ), wasm3 si è rivelato più veloce di 15.8 volte.
Per funzionare, wasm3 richiede 64Kb di memoria per il codice e 10Kb di RAM, il che consente di applicare il progetto per l'esecuzione di applicazioni compilate in WebAssembly su , come Arduino MKR*, Arduino Due, Particle Photon, ESP8266, ESP32, Air602 (W600), nRF52, nRF51 Blue Pill (STM32F103C8T6), MXChip AZ3166 (EMW3166),
Maix (K210), HiFive1 (E310), Fomu (ICE40UP5K) e ATmega1284, oltre che su schede e computer basati su architetture x86, x64, ARM, MIPS, RISC-V e Xtensa. Le seguenti versioni di sistemi operativi sono supportate: Linux (compresi i router basati su OpenWRT), Windows, macOS, Android e iOS. È anche possibile compilare wasm3 in codice intermedio WebAssembly per eseguire l'interprete in un browser o per un'auto-esecuzione (self-hosting).
Le alte prestazioni sono ottenute grazie all'uso della tecnica nell'interprete (M3), dove la traduzione anticipata del bytecode in operazioni più efficienti che generano codice pseudo-macchina è eseguita per ridurre l'overhead della decodifica. Il modello di esecuzione della macchina virtuale a stack viene convertito in un approccio basato su registri più efficiente. Le operazioni in M3 sono funzioni C, i cui argomenti sono i registri della macchina virtuale, riflettibili ai registri della CPU. Sequenze frequenti di operazioni vengono ottimizzate in operazioni aggregate.
Inoltre, si può notare distribuzione
WebAssembly nel Web. Analizzando 948 mila dei siti più popolari secondo il ranking Alexa, i ricercatori hanno scoperto che WebAssembly è utilizzato su 1639 siti (0.17%), ovvero 1 su ogni 600 siti. In totale, nei siti è stata rilevata il caricamento di 1950 moduli WebAssembly, dei quali 150 unici. Analizzando l'area di applicazione di WebAssembly, sono state fatte conclusioni poco confortanti: in oltre il 50% dei casi, WebAssembly è stato utilizzato per scopi malevoli, ad esempio per il mining di criptovalute (55.7%) e per nascondere il codice di script dannosi (0.2%). Tra gli usi legittimi, sono state registrate l'esecuzione di librerie (38.8%), la creazione di giochi (3.5%) e l'esecuzione di codice personalizzato non scritto in JavaScript (0.9%). Nel 14.9% dei casi, WebAssembly è stato utilizzato per l'analisi dell'ambiente per identificare l'utente (fingerprinting).

Fonte: opennet.ru
