В JavaScript-движок V8 добавлена поддержка WebAssembly

Разработчики JavaScript-движка V8 сообщили о реализации экспериментальной поддержки WebAssembly (WASM), не зависящего от браузера универсального низкоуровневого промежуточного кода для выполнения в браузере приложений, скомпилированных из различных языков программирования. Компоненты для выполнения байткода WASM, JavaScript API для доступа к функциональности WebAssembly и сопутствующие элементы инфраструктуры, такие как компилятор из C/C++ в WebAssembly, приняты в кодовую базу V8 и проекта Chromium.

Реализация WASM, интегрированная в V8, основана на генерации движком WASM промежуточного кода, единого с оптимизирующим JavaScript-компилятором TurboFan, что позволило добиться высокой скорости компиляции и высокого качества кода за счёт задействования типовых и проверенных подсистем JIT и runtime. Интеграция также дала возможность обеспечить взаимодействие между WASM и JavaScript без дополнительных прослоек.

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