- PVSM.RU - https://www.pvsm.ru -

Вышел Firefox 52 c поддержкой WebAssembly

Вышел Firefox 52 c поддержкой WebAssembly - 1
3D-рендеринг демки Zen Garden в браузере Firefox 52 c поддержкой WebAssembly

Mozilla выпустила Firefox 52 [1], последнюю версию браузера с поддержкой операционной системы Windows XP. Сделан ряд важных изменений [2]: упрощено подключение к хотспотам, где нужно сначала залогиниться в браузере, появились предупреждения об опасности, если страница запрашивает пароль по небезопасносму соединению (не HTTPS), исчезла поддержка плагинов NPAPI (кроме Flash, а в билде ESR останется полная поддержка), закрыто 28 уязвимостей [3].

Но ничто это не сравнится с главным и фундаментальным нововведением — поддержкой низкоуровневого языка программирования WebAssembly [4] (wasm) типа ассемблера, который называют [5] одной из самых значительных инноваций веб-платформы за последнее десятилетие. Это то, чего не хватало JavaScript.

WebAssembly

Разработчики объясняют, почему возникла необходимость в создании WebAssembly [6]. Дело в том, что JavaScript был изначально задуман как легковесный язык для простеньких скриптов. Никто не предполагал, во что он разрастётся и как его начнут применять. Его придумали для новичков в программировании — для несложных вещей типа написать форму на веб-странице.

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

Mozilla первой созрела до разработки своеобразной виртуальной машины в браузере, где можно запускать низкоуровневый код — и несколько лет назад в качестве демонстрации выпустила asm.js [7] (Google экспериментировала с Native Client API [8]). Подъязык asm.js проявил себя настолько хорошо, что стало ясно: нужно объединять усилия со всеми крупнейшими компаниями-разработчиками для совместного проекта, который двинет веб вперёд.

Низкоуровневый язык WebAssembly может работать в связке с JavaScript и позволит веб-приложениям выполняться с гораздо большей производительностью — почти как нативные приложения в операционной системе.

Теперь в браузере можно запускать с высокой производительностью 3D-игры, системы автоматизированного проектирования (САПР), видеоредакторы, графические редакторы, научные визуализации, ресурсоёмкие вычисления, кодировать видео — что угодно.

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

В отличие от других подходов типа Flash, которые требуют установки плагина в браузере, чтобы выполнять приложения на скорости, сравнимой с нативными приложениями, WebAssembly полностью вписывается с стандартную веб-платформу. Это открытый и совместимый стандарт, интегрированный в браузеры. Значит, разработчики могут интегрировать библиотеки WebAssembly для CPU-интенсивных вычислений (компрессия, определение лиц, физика) прямо в существующие веб-приложения, где используется JavaScript.

WebAssembly — открытый стандарт, разработанный Mozilla, Google, Microsoft и Apple. Как можно заметить, эта группа представляет разработчиков четырёх наиболее распространённых браузеров, так что можно рассчитывать на становление wasm как всеобщего стандарта. Google обещает реализовать поддержку WebAssembly в следующей версии Chrome (57), Microsoft уже работает над реализацией в Edge.

Низкоуровневый язык станет своеобразным дополнением к JavaScript и в конце концов должен работать везде, где работает JS: во всех браузерах и во всех средах выполнения вроде Node.js.

Кто выиграет от использования WebAssembly? Речь идёт не только о написании новых приложений на wasm. Через компиляторы вроде Emscripten [9] целые игры и уже готовые нативные приложения можно портировать для веба. Портируемый код C/C++ с помощью этого компилятора будет исполняться в браузере почти на той же скорости, что и нативное приложение. Кроме C/C++, для языка программирования Rust тоже реализована предварительная поддержка WebAssembly.

Для примера, можно поиграть в демку Zen Garden [10] (требуется браузер Firefox 52, в данный момент поддерживается только десктопная версия).

Функции JavaScript будут вызывать функции WebAssembly и наоборот. То есть можно в рамках одной программы можно писать на высокоуровневом языке JavaScript и временами переходить на C/C++/Rust по мере необходимости.

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

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

«В каком-то смысле WebAssembly меняет то, что значит веб-разработчиком, — пишет [11] Дэвид Брайант (David Bryant), руководитель разработки платформ в Mozilla, — как меняет и фундаментальные свойства веба».

В самом деле, сейчас программы на C/C++ стало возможным портировать для выполнения в браузере, а в ближайшем будущем то же самое можно будет сделать для языков, на которых пишут мобильные приложения — Java, Swift, C#. Все они станут совместимыми со стандартной веб-платформой. Получается, что в каком-то смысле все программисты в итоге станут веб-разработчиками.

Автор: alizar

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/248565

Ссылки в тексте:

[1] Firefox 52: https://www.mozilla.org/en-US/firefox/52.0/releasenotes/

[2] ряд важных изменений: https://blog.mozilla.org/blog/2017/03/07/lots-new-in-firefox-game-changing-webassembly-support/

[3] 28 уязвимостей: https://www.mozilla.org/en-US/security/advisories/mfsa2017-05/

[4] поддержкой низкоуровневого языка программирования WebAssembly: https://hacks.mozilla.org/2017/03/firefox-52-introducing-web-assembly-css-grid-and-the-grid-inspector/

[5] называют: https://medium.com/mozilla-tech/why-webassembly-is-a-game-changer-for-the-web-and-a-source-of-pride-for-mozilla-and-firefox-dda80e4c43cb#.ryskk9ix7

[6] WebAssembly: http://webassembly.org/

[7] asm.js: http://asmjs.org/

[8] Native Client API: https://developer.chrome.com/native-client

[9] Emscripten: https://github.com/kripken/emscripten

[10] демку Zen Garden: https://mzl.la/webassemblydemo

[11] пишет: https://medium.com/mozilla-tech/why-webassembly-is-a-game-changer-for-the-web-and-a-source-of-pride-for-mozilla-and-firefox-dda80e4c43cb

[12] Источник: https://geektimes.ru/post/286718/