Новый двоичный формат для интернета — WebAssembly

Google, Microsoft, Mozilla и инженеры the WebKit project объявили о создании объединенной команды для запуска WebAssembly — нового двоичного формата для компиляции приложений интернета.

Интернет растет на стандартах и, к лучшему или худшему, но JavaScript является его языком программирования. Однако, на протяжении многих лет, предпринималось все больше и больше попыток создать проекты, которые позволили бы разработчикам обойти некоторые ограничения в JavaScript путем построения компиляторов, способных преобразовать код на других языках в JavaScript. Некоторые из этих проектов нацелены на добавление новых возможностей к языку (как TypeScript от Microsoft) или ускорение JavaScript (как проект asm.js от Mozilla,). И теперь многие из этих проектов, начали объединяться в виде WebAssmbly.

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

Идея заключается в том, что WebAssembly предоставит разработчикам единый формат компиляции для интернета, который станет веб-стандартом и будет реализован во всех браузерах.

По умолчанию файлы JavaScript — это простые текстовые файлы, загружаемые с сервера, которые подвергаются синтаксическому анализу и компилируются JavaScript в браузере. Команда WebAssembly решила работать с двоичным форматом, так как двоичный код может быть сжат еще больше, чем стандартные текстовые файлы JavaScript. Кроме того, двоичный код декодируется движком намного быстрее (в нынешнем прототипе — в 23 раза), чем, например, анализ разбор кода asm.js.

Проект Mozilla asm.js давно пытается обеспечить максимальные скорости работы в Интернете. Проект Google Native Client для запуска собственного кода в браузере имеет те же цели, но получил не получил большого распространения. Похоже, что WebAssemly сможет объединить лучшие наработки этих проектов.

На первом этапе команда WebAssembly планирует предоставить функционал, схожий с asm.js (разработчики на WebAssembly смогут пользоваться инструментарием Emscripten так же, как и сегодня, компилируя код asm.js).

Кроме того, на этой стадии команда планирует подключить так называемую библиотеку polyfill (polyfill library), которая будет транслировать код WebAssembly в код JavaScript. Таким образом, код будет выполнятся в любых браузерах, даже тех, которые не поддерживают WebAssembly по умолчанию). Идея звучит немного странно, но это вынужденный шаг, необходимый в переходный период, пока все браузеры не станут поддерживать WebAssembly.

Со временем, команда выпустит дополнительные инструменты (компиляторы, отладчики и т.д.) и добавит поддержку других языков программирования (Rust, Go, C# и др.).

Как отмечается, идея состоит не в том, чтобы заменить JavaScript, а в предоставлении многим другим языкам программирования возможности компиляции сразу для работы в интернете. В действительности, наиболее вероятным сценарием является совместное применение WebAssembly и JavaScript, когда некоторые части приложения будут использовать модули WebAssembly (анимация, визуализация, сжатие и т.д.), в то время как пользовательский интерфейс, в основном, будет написан на JavaScript.

Не часто приходится видеть, когда основные создатели браузеров объединяются для работы над подобными проектами. Поэтому определенно стоит проследить как эта иннициатива будет развиваться в ближайшие месяцы и годы.

 


Изображение:  pheaber / Foter / CC BY-SA

Top