Первый выпуск wasm3, быстрого интерпретатора WebAssembly

Доступен первый выпуск wasm3, очень быстрого интерпретатора промежуточного кода WebAssembly, главным образом рассчитанного на применение для запуска WebAssembly-приложений на микроконтроллерах и платформах, для которых отсутствует реализация JIT для WebAssembly, недостаточно памяти для работы JIT или недопускается создание исполняемых страниц памяти, необходимых для реализации JIT. Код проекта написан на языке Си и распространяется под лицензией MIT.

Wasm3 проходит тесты на совместимость со спецификацией WebAssembly 1.0 и может применяться для запуска многих WASI-приложений, обеспечивая производительность лишь в 4-5 раз ниже JIT-движков (liftoff, cranelift) и в 11.5 раз ниже выполнения нативного кода. При сравнении с другими интерпретаторами WebAssembly (wac, life, wasm-micro-runtime), wasm3 оказался быстрее в 15.8 раз.

Для работы wasm3 необходимо 64Kb памяти для кода и 10Kb ОЗУ, что позволяет применять проект для выполнения скомпилированных в WebAssembly приложений на микроконтроллерах, таких как Arduino MKR*, Arduino Due, Particle Photon, ESP8266, ESP32, Air602 (W600), nRF52, nRF51 Blue Pill (STM32F103C8T6), MXChip AZ3166 (EMW3166), Maix (K210), HiFive1 (E310), Fomu (ICE40UP5K) и ATmega1284, а также на платах и компьютерах на базе архитектур x86, x64, ARM, MIPS, RISC-V и Xtensa. Из операционных систем поддерживаются Linux (в том числе маршрутизаторы на основе OpenWRT), Windows, macOS, Android и iOS. Также возможна компиляция wasm3 в промежуточных код WebAssembly для выполнения интерпретатора в браузере или для вложенного запуска (self-hosting).

Высокая производительность достигается благодаря применению в интерпретаторе техники Massey Meta Machine (M3), в которой для сокращения накладных расходов на декодирование байткода выполняется упреждающая стадия трансляции байткода в более эффективные операции, генерирующие псевдо-машинный код, а модель выполнения в стековой виртуальной машине преобразуется в более прямой и эффективный регистровый подход. Часто встречающиеся последовательности операций для оптимизации преобразуются в сводные операции. Операции в M3 представляют собой Си-функции, аргументами которых являются регистры виртуальной машины, которые могут быть отражены на регистры CPU.

Дополнительно можно отметить результаты исследования распространения WebAssembly в Web. Проанализировав 948 тысяч самых популярных сайтов по рейтингу Alexa, исследователи выяснили, что WebAssembly используется на 1639 сайтах (0.17%), т.e. на 1 из каждых 600 сайтов. Всего на сайтах выявлена загрузка 1950 модулей WebAssembly, из которых 150 уникальные. При рассмотрении области применения WebAssembly были сделаны неутешительные выводы — в более 50% случаев WebAssembly применялся во вредоносных целях, например для майнинга криптовалюты (55.7%) и скрытия кода вредоносных скриптов (0.2%). Из легитимных применений WebAssembly отмечено выполнение библиотек (38.8%), создание игр (3.5%) и выполнение собственного кода, написанного не на JavaScript (0.9%). В 14.9% случаев WebAssembly применялся для анализа окружения для идентификации пользователя (fingerprinting).

Источник: http://www.opennet.ru/opennews/art.shtml?num=52177