Три основных браузера добавили поддержку низкоуровневого бинарного формата WebAssembly

Original author: Martin Anderson
  • Translation
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.
Support the author
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 31

    +3
    Как думаете, вот оно, начало светлого будущего?
      +8
      Похоже на то. Очень надеюсь, что не очередной xhtml.
        +3
        Новый этап майнинга криптовалют на стороне посетителей.
          +2
          NoWebAssembly
          0
          Не могу больше молчать. Постараюсь не спойлерить слишком много.

          Да, начало. Но впереди еще очень длинный путь. И проделать его мы можем только сообща. И меня очень радует, что один из шажков был выполнен пусть не сообща, но хотя бы одновременно несколькими крупными компаниями.
          +3
          Ссылка на демо: http://webassembly.github.io/demo
          Для работы включить javascript.options.wasm или chrome://flags#enable-webassembly.
            +2
            Есть ли примеры взаимодействия с DOM?
              0
              С DOM нужно работать из js, wasm = binary asm, там объектов нет.
                +2
                Сама работа с DOM так и остается на плечах JS, появилась возможность тяжелую и не очень логику приложения перенести на предсказуемую и быструю платформу не заморачиваясь с "Убийцами оптимизации JS" не учитывая "особенности V8" и других js-движков. Нативному С/С++ коду не требуются эти оптимизации, парсинги, учитывание распространенных паттернов и другие тормозные вещи, всё уже готово и загружено в бинарном формате, только выполнить осталось
                  +1
                  Разве? https://github.com/WebAssembly/design/blob/master/GC.md

                  reference DOM and other Web API objects directly from WebAssembly code;

                  call Web APIs (passing primitives or DOM/GC/Web API objects) directly from WebAssembly without calling through JavaScript; and
                    +1
                    Это пока future plans которые возможно будут реализовывать после MVP.
                0
                А как вообще на этом писать?) Или надо писать на C++, и компилировать в WASM? Если так, то дебажить будет невесело. Хотя наверное потом сделают возможность дебажить выполняемый код в браузере прямо из какого-нибудь Qt.
                  0
                  На сколько слышал, он по большей части предназначен для промежуточного представления скриптов, а не для написания. Общую суть понял так: сделали виртуальную машину для web. Оптимизация очевидна: убиваем парсинг и уменьшаем габариты страниц.
                    +3
                    Это не замена JS, это возможность подключать библиотеки написанные на C/С++ в браузере, которые будут выполнятся как нативные (что-то вроде того, что сейчас в nodejs). Отлаживать, соответственно, не обязательно в браузере, но всё равно уже сообщают, что и в браузере будет поддержка View Source и отладка
                      0
                      Так же как пишите байт-код для jvm или .net
                      +5
                      Заново Java-апплеты изобрели, или ActiveX?
                        0
                        Заново изобрели Flash. Туда то он и сядет :-)
                          0
                          Аудитория флеша шире, чем у любого известного браузера. Пока Webassembly не наберет аудиторию, уязвимости в нем активно искать никто не будет. Формат будет считаться безопасным.

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

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

                            Это уже нативная технология для браузера, не плагин.
                              0
                              Жаль, что нужно объяснять, что смысл примера совсем в другом. От нативности технология каким-то волшебным образом становится принципиально более безопасной?
                                +1
                                Становится. Пропадает слой взаимодействия в котором чаще всего и находят дыры, за примерами далеко ходить не нужно.
                                  0
                                  Ощущение, что вы не до конца понимаете смысл разделения на слои.
                          0
                          Скорее разрешили в js вставлять куски, скомпилированные с других языков. Уязвимостей после отладки вряд ли будет больше чем у самого js
                            0
                            Если они скомпилированы, то, получается, под каждую архитектуру нужно компилировать отдельно?
                              +1
                              Компилировать можно не только в нативные инструкции мкропроцессора, можно, например, в байт-код JVM или в IL CLR
                                +1
                                Ну да, точно, об этом я как-то не подумал. ну тогда все хорошо :)
                          +8
                          научно-фантастического шутера Angry Bots

                          Так высокопарно демку, идущую в комплекте к Unity, еще, пожалуй, никто не называл
                          • UFO just landed and posted this here
                              0
                              ещё один npapi?
                                0
                                Это скорее замена PNaCl, wasm это платформонезависимый байткод, выполняемый с привилегиями js, npapi — бинарные модули браузера без каких либо ограничений для кода(читай решето), но ограничены в подключении по соображениям безопасности и здравого смысла.
                                  0
                                  Но этот байткод пройдёт JITC, насколько я понимаю. Тоже не сильно внушает доверие (как и любая ерунда, что может в JITC).

                              Only users with full accounts can post comments. Log in, please.