Консорциум W3C объявил о придании технологии WebAssembly статуса рекомендованного стандарта. WebAssembly предоставляет не зависящий от браузера универсальный низкоуровневый промежуточный код для выполнения приложений, скомпилированных из различных языков программирования. WebAssembly позиционируется как более перспективная и переносимая между браузерами технология создания высокопроизводительных web-приложений. WebAssembly может применяться для решения задач, требующих высокой производительности, например, кодирования видео, обработки звука, манипуляции с графикой и 3D, разработки игр, криптографических операций, математических вычислений и создания переносимых реализаций языков программирования.

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

W3C стандартизировал три спецификации, связанные с WebAssembly:

  • WebAssembly Core — описывает низкоуровневую виртуальную машину для выполнения промежуточного кода WebAssembly. Связанные с WebAssembly ресурсы поставляется в формате «.wasm», напоминающий файл «.class» в Java и содержащий статические данные и сегменты кода для работы с этими данными.
  • WebAssembly Web API — определяет программный интерфейс на основе механизма Promise для запроса и выполнения ресурсов «.wasm». Формат ресурсов WebAssembly оптимизирован для начала выполнения не дожидаясь полной загрузки файла, что позволяет повысить отзывчивость web-приложений.
  • WebAssembly JavaScript Interface — предоставляет API для интеграции с JavaScript. Позволяет получать значения и передавать параметры в функции WebAssembly. Выполнение WebAssembly соответствует модели безопасности JavaScript и всё взаимодействие с основной системой производится по аналогии с выполнением JavaScript-кода.

В будущем планируется подготовить спецификации для таких возможностей WebAssembly, как: