В Firefox, Chromium и Edge добавлена экспериментальная поддержка WebAssembly

2016-03-15

Объявлено о начале тестирования в ночных сборках Firefox, в Chromium/Chrome Canary и в Microsoft Edge технологии WebAssembly (WASM), предоставляющей не зависящий от браузера универсальный низкоуровневый промежуточный код для выполнения в браузере приложений, скомпилированных из различных языков программирования. Для демонстрации производительности WebAssembly, в сравнении с Asm.js, подготовлен специальный вариант игры Angry Bots на базе движка Unity.

По своим задачам WebAssembly во многом напоминает PNaCl (Portable Native Client) и Asm.js. Основное отличие от Asm.js состоит в том, что WebAssembly является бинарным форматом, не завязанным на исходных текстах JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код. В отличие от PNaCl, промежуточный код WASM не является машинным кодом и не изолирован в отдельной виртуальной машине, а выполняется с похожим на JavaScript уровнем изоляции. Среди основных задач WebAssembly выделяется обеспечение переносимости между браузерами, предсказуемость поведения и идентичности выполнения кода на разных платформах. Использование WebAssembly также позволит существенно сократить размер приложений, благодаря компактному промежуточному коду, и увеличить скорость декодирования.

До повсеместного внедрения WebAssembly остаётся стабилизировать бинарный формат, стандартизировать кодирование текстур, подготовить финальный инструментарий с компилятором и отладчиком, стабилизировать JavaScript API для доступа к объектам WASM. В будущем возможности WebAssembly планируется расширить поддержкой многопоточности, динамического связывания, сборки мусора и полноценной интеграции с DOM. В настоящее время для включения WebAssembly в Firefox Nightly в about:config необходимо установить переменную javascript.options.wasm, а в Chrome (начиная с Canary 51.0.2677.0) включить опцию "chrome://flags#enable-webassembly".

Для формирования WebAssembly можно использовать компилятор Binaryen, созданный на основе наработок Emscripten. В состав Binaryen входит интерактивная оболочка для выполнения модулей на WebAssembly, компилятор asm.js в WebAssembly, декомпилятор WebAssembly в asm.js, LLVM-бэкенд для компиляции произвольного кода в WebAssembly и wasm.js, порт Binaryen на JavaScript.