Ноябрь 3, 2016 7:56 дп

Знакомство с предварительной версией WebAssembly

После реализации поддержки asm.js, как рассказывает Лимин Чжу (Limin Zhu), руководитель программы Chakra, шла работа над повышением производительности веб-приложений при помощи WebAssembly совместно с другими поставщиками браузеров, включая Mozilla, Google и Apple, а также с остальными участниками сообщества WebAssembly Community Group. WebAssembly — это новый компактный компилируемый бинарный веб-формат, который легко портируется, быстро загружается и работает со скоростью, близкой к скорости выполнения машинного кода.

Пока участники сообщества согласовывают окончательный вариант выпуска с минимальной функциональностью (MVP), стандарт WebAssembly находится в стадии предварительной версии для браузера и мы приглашаем всех оставлять свои отзывы о проекте. Мы продолжаем работу над общедоступной предварительной версией для Microsoft Edge и сегодня готовы продемонстрировать WebAssembly в наших внутренних сборках.

Предварительная версия для браузера

Предварительная версия WebAssembly для браузера — это, по сути, релиз-кандидат MVP, который включает последние версии следующих компонентов:

  • Бинарный формат, созданный в результате обобщения прошлых форматов абстрактного синтаксического дерева (AST) в более эффективный формат стековой машины. Более компактный бинарный формат обычно способствует ускорению загрузки.
  • Эквивалентный удобочитаемый текстовый формат для чтения, отладки и написания кода WebAssembly вручную (при необходимости).
  • Встроенные API JavaScript для интеграции модулей WebAssembly в веб-платформу.
  • Современные средства для создания модулей WebAssembly, такие как инструментарий Emscripten/Binaryen для преобразования исходного кода на C++ в asm.js и затем в WebAssembly и WABT для преобразования между текстовым и бинарным форматами.

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

webassembly-factorial-function

Код функции factorial на WebAssembly взят из теста спецификации WebAssembly.

Мы с нетерпением ждем отзывов о WebAssembly от участников сообщества. Авторам приложений следует быть готовыми к изменениям в выпуске MVP и необходимости перекомпиляции кода, но любые отзывы о разработке приложений на этапе предварительной версии помогут нам создать более совершенный стандарт.

Реализация для Microsoft Edge

Мы активно работали над обеспечением поддержки WebAssembly для Microsoft Edge в репозитории открытого исходного кода ChakraCore. Microsoft Edge и ChakraCore близки к выпуску предварительной версии для браузера, который, как мы предполагаем, состоится после полной реализации API JavaScript.

Текущие возможности ChakraCore можно увидеть в демо-версии игры AngryBots (с обновленным бинарным кодом WebAssembly), работающей во внутренней сборке Microsoft Edge. Демо-версия загружается быстрее, чем прошлые версии, скомпилированные в asm.js или более старые форматы WebAssembly, благодаря более компактному бинарному формату и новой возможности отложенного синтаксического анализа функций WebAssembly в ChakraCore.

В течение ближайших месяцев наша команда будет работать над предварительной версией для браузера Microsoft Edge. Мы планируем продолжать работу над стандартизацией WebAssembly вместе с другими поставщиками браузеров и участниками сообщества. Ждем ваших отзывов о WebAssembly в Twitter (@MSEdgeDev и @ChakraCore) и на сайте репозитория ChakraCore.