Анонсирован WebAssembly, обеспечивающий запуск скомпилированного кода в браузерах

Бренден Айк (Brendan Eich), создатель языка JavaScript, представил проект WebAssembly, совместно развиваемый ведущими производителями браузеров под эгидой организации W3C. В рамках проекта планируется подготовить унифицированный низкоуровневый промежуточный код для выполнения в браузере приложений, скомпилированных из различных языков программирования, фокусируясь на начальном этапе в основном на языках С и С++, но не ограничиваясь ими.

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

Для генерации кода WebAssembly планируется подготовить специальный бэкенд к clang/LLVM, который сможет быть использован в том числе для генерации кода уже существующими проектами, такими как Emscripten и PNaCl. Т.е. вместо генерации JavaScript и собственного байткода, Emscripten и PNaCl смогут генерировать универсальный код WebAssembly. В настоящее время для экспериментов предлагаются рабочие прототипы кодировщика и декодировщика. Для изучения кода WebAssembly и отладки предусмотрена возможность преобразования промежуточного бинарного кода в наглядное текстовое представление.

Среди основных задач WebAssembly выделяется обеспечение переносимости между браузерами, предсказуемость поведения и идентичности выполнения кода на разных платформах. Использование WebAssembly также позволит существенно сократить размер приложений, благодаря компактному промежуточному коду, и увеличить скорость декодирования. В частности, текущий прототип WebAssembly демонстрирует в 20 раз более высокую скорость декодирования промежуточного кода по сравнению с JavaScript и генерирует на 45% более компактное представление кода по сравнению с минимизированным кодом Asm.js, сжатым при помощи gzip.

По мере развития проекта, его планируется расширить поддержкой таких возможностей, как динамическое связывание,
полное управление памятью (mmap, shared memory), низкоуровневый доступ к структурам сборщика мусора, JIT-компиляция, многопроцессный режим выполнения, SIMD API, асинхронные сигналы, расширенные целочисленные операции и т.п.

WebAssembly позиционируется как совместный проект, развиваемый всеми ведущими производителями браузеров. В основную команду, которая будет развивать WebAssembly, вошли разработчики PNaCl и движка V8 из Google, представители Microsoft и Mozilla, а также разработчики Emscripten и WebKit. Внедрение WebAssembly даст возможность воплотить в жизнь создание новых продуктов, работающих в браузере, в том числе высокопроизводительных игр, систем редактирования видео/звука/изображений, P2P-систем, САПР, средств разработки и коммуникации, в том числе упоминается возможность запуска локального web-сервера в браузере и эффективная упаковка web-фреймворков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.