Google, Microsoft и Mozilla на этой неделе синхронно выпустили экспериментальные билды браузеров с поддержкой WebAssembly (wasm) — эффективного низкоуровневого языка программирования, выполняющегося в браузере с производительностью гораздо выше, чем у самых современных и скоростных компиляторов JavaScript.

Разработчик из Mozilla Люк Вагнер рассказал на Mozilla Hacks о преимуществах WebAssembly, а также сообщил о портировании на WebAssembly научно-фантастического шутера Angry Bots. Демка запускается в браузерах с поддержкой WebAssembly — это последние версии Chrome Canary, Firefox Nightly и Microsoft Edge. Скоро к ним присоединится Safari на WebKit.

Демо AngryBots на WebAssembly в браузере Microsoft Edge:



WebAssembly представляет собой новый формат нативных веб-приложений. Он поддерживает всю функциональность подмножества JavaScript asm.js, который и сам по себе должен был устранить негативное влияние фреймворков и интерпретаторов на производительность, чтобы инструкции приложения выполнялись на максимально низком уровне.

WebAssembly спроектирован не для замены JavaScript, а для дополнения его, одновременно предоставив более общим программам прямой доступ к наборам инструкций процессора — без накладных расходов на сборку мусора, среди всего прочего.

Люк Вагнер подчёркивает, что приложения Wasm имеют доступ к Web APIs и тесно интегрированы с JavaScript, в том числе допускают вызовы между WebAssembly и JavaScript. В отличие от классических моделей, это позволяет WebAssembly более просто интегрироваться в приложения и библиотеки JavaScript, как это делал asm.js.

Рабочая группа W3C Web Assembly Group сформирована в прошлом году, при ведущем участии Google, Microsoft, Apple и Mozilla, к которым присоединились ещё 540 частных лиц и организаций.

Совместная разработка ведётся в рамках проекта WebAssembly GitHub Organisation на гитхабе.

В своём собственном объявлении о поддержке WebAssembly в браузере Microsoft Edge менеджер проекта Chakra Лимин Чжу отметил, что код WebAssembly обрабатывается по той же схеме, что и код asm.js, при этом демо-версия AngryBots запускается значительно быстрее, потому что бинарники WebAssembly имеют меньший размер по сравнению с asm.js и парсятся быстрее, чем чистый JavaScript в случае с asm.js.



Разработчики движка V8 JavaScript Engine тоже объявили о сотрудничестве с W3C Web Assembly Group:

«Два грядущих изменения особенно сильно помогут веб-разработчикам. Стандартное текстовое представление WebAssembly позволит просматривать исходный код бинарника WebAssembly как любой другой скрипт или ресурс. Вдобавок, текущий замещающий объект (placeholder) Wasm будет переделан, чтобы обеспечить более полный идиоматический набор методов и свойств для иллюстрации и анализа модулей WebAssembly из JavaScript.

Комментарии (27)


  1. Rathil
    16.03.2016 18:14
    +3

    Как думаете, вот оно, начало светлого будущего?


    1. Ohar
      16.03.2016 18:22
      +8

      Похоже на то. Очень надеюсь, что не очередной xhtml.


    1. gnomeby
      16.03.2016 20:07
      +3

      Новый этап майнинга криптовалют на стороне посетителей.


      1. a553
        16.03.2016 20:13
        +2

        NoWebAssembly


    1. Lavir_the_Whiolet
      17.03.2016 00:55

      Не могу больше молчать. Постараюсь не спойлерить слишком много.

      Да, начало. Но впереди еще очень длинный путь. И проделать его мы можем только сообща. И меня очень радует, что один из шажков был выполнен пусть не сообща, но хотя бы одновременно несколькими крупными компаниями.


  1. a553
    16.03.2016 18:35
    +3

    Ссылка на демо: http://webassembly.github.io/demo
    Для работы включить javascript.options.wasm или chrome://flags#enable-webassembly.


  1. beduin01
    16.03.2016 22:15
    +2

    Есть ли примеры взаимодействия с DOM?


    1. Large
      17.03.2016 00:27

      С DOM нужно работать из js, wasm = binary asm, там объектов нет.


    1. Shannon
      17.03.2016 06:47
      +2

      Сама работа с DOM так и остается на плечах JS, появилась возможность тяжелую и не очень логику приложения перенести на предсказуемую и быструю платформу не заморачиваясь с "Убийцами оптимизации JS" не учитывая "особенности V8" и других js-движков. Нативному С/С++ коду не требуются эти оптимизации, парсинги, учитывание распространенных паттернов и другие тормозные вещи, всё уже готово и загружено в бинарном формате, только выполнить осталось


  1. Starche
    17.03.2016 00:00

    А как вообще на этом писать?) Или надо писать на C++, и компилировать в WASM? Если так, то дебажить будет невесело. Хотя наверное потом сделают возможность дебажить выполняемый код в браузере прямо из какого-нибудь Qt.


    1. neit_kas
      17.03.2016 00:43

      На сколько слышал, он по большей части предназначен для промежуточного представления скриптов, а не для написания. Общую суть понял так: сделали виртуальную машину для web. Оптимизация очевидна: убиваем парсинг и уменьшаем габариты страниц.


    1. Shannon
      17.03.2016 06:45
      +3

      Это не замена JS, это возможность подключать библиотеки написанные на C/С++ в браузере, которые будут выполнятся как нативные (что-то вроде того, что сейчас в nodejs). Отлаживать, соответственно, не обязательно в браузере, но всё равно уже сообщают, что и в браузере будет поддержка View Source и отладка


    1. VolCh
      18.03.2016 11:33

      Так же как пишите байт-код для jvm или .net


  1. Mr_Floppy
    17.03.2016 06:16
    +5

    Заново Java-апплеты изобрели, или ActiveX?


    1. KHH
      17.03.2016 12:07

      Заново изобрели Flash. Туда то он и сядет :-)


      1. AlexBin
        17.03.2016 12:30

        Аудитория флеша шире, чем у любого известного браузера. Пока Webassembly не наберет аудиторию, уязвимости в нем активно искать никто не будет. Формат будет считаться безопасным.

        А когда (если) наберет аудиторию, посыпятся и дыры, а на хабре начнут периодически мелькать статейки «Webassembly умер! Будущее за HTML6»


        1. KHH
          17.03.2016 17:21
          +1

          Будущее за HTML6

          угу, который будет целиком на Webassembly.

          Это уже нативная технология для браузера, не плагин.


          1. AlexBin
            18.03.2016 09:06

            Жаль, что нужно объяснять, что смысл примера совсем в другом. От нативности технология каким-то волшебным образом становится принципиально более безопасной?


    1. VolCh
      18.03.2016 11:40

      Скорее разрешили в js вставлять куски, скомпилированные с других языков. Уязвимостей после отладки вряд ли будет больше чем у самого js


      1. SunX
        21.03.2016 15:22

        Если они скомпилированы, то, получается, под каждую архитектуру нужно компилировать отдельно?


  1. perfectdaemon
    17.03.2016 08:03
    +8

    научно-фантастического шутера Angry Bots

    Так высокопарно демку, идущую в комплекте к Unity, еще, пожалуй, никто не называл


  1. guai
    17.03.2016 12:41

    имхо пора начать не запиливать новые фичи в этом деле, а выпиливать старые. Ну и пересматривать концепции


  1. 6opoDuJIo
    17.03.2016 20:19

    ещё один npapi?


    1. oWeRQ
      22.03.2016 11:23

      Это скорее замена PNaCl, wasm это платформонезависимый байткод, выполняемый с привилегиями js, npapi — бинарные модули браузера без каких либо ограничений для кода(читай решето), но ограничены в подключении по соображениям безопасности и здравого смысла.