Представлены первые рабочие проекты WebAssembly


Состояние дел WebAssembly MVP в браузерах

https://webassembly.github.io/demo/ говорит: «реализована Полное выполнение семантика.» звучит как MVP сделано, но что именно не хватает или я делаю что — то неправильно?

Chrome Canary загружает файл WASM но grow_memory, кажется, невыполненными:

И Firefox Nightly сбой при загрузке:

Кроме того, размер страницы, кажется, 0x10000 вместо 0x1000. Но я не могу найти его в конструкции или спецификации.

Март 2020 Обновление:

Члены WebAssembly CG представляющие четыре браузеры, Chrome, пограничный, Firefox и WebKit, достигли консенсуса о том , что дизайн начальной ( MVP ) WebAssembly API и двоичный формат является полным в той степени , что никаких дальнейших проектных работ не возможно без опыта внедрения и значительное Применение. Это знаменует конец браузера Preview и сигналы , что браузеры могут начать грузить WebAssembly на по-умолчанию. С этого момента, будущие функции будут разработаны для обеспечения обратной совместимости.

Этот консенсус включает в себя API JavaScript и бинарный формат сопровождающегося эталонным переводчиком . Вы можете проверить WebAssembly сегодня с помощью набора инструментов Emscripten, следуя руководство разработчика и читать больше на MDN .

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

В настоящее время webassembly.org сайта документы следующие дальнейшие шаги , чтобы следовать сразу после MVP:

WebAssembly общественная группа и авторы планируют:

  • перегон дизайна и интерпретатор спецификация РЕПО в единые унифицированные спецификации в спецификации репо
  • предложить новый устав для WebAssembly рабочей группы W3C
  • окончить бэкенд WebAssembly LLVM из экспериментальной в стабильной (и обновление Emscripten)
  • Прототип дополнительная интеграция WebAssembly в инструменты разработчика браузера
  • Начало работы на особенности пост-MVP

Ноябрь 2020 обновление:

Там в настоящее время браузер предварительного просмотра, вымогательство обратной связи для разработчиков. От webassembly.org :

Сообщества Группы WebAssembly имеет начальный ( MVP ) двоичный формат предвыпускную и JavaScript API , которые реализуются в нескольких браузерах. CG теперь вымогательство обратной связи от более широкого сообщества в рамках браузера Preview периода. Предварительная цель CG является для браузера Preview завершится в 1 квартале 2020 года, несмотря на значительные результаты в ходе Browser Preview потенциально может продлить срок. Когда браузер Preview делает вывод, то CG будет производить проект спецификации WebAssembly и производители браузеров могут начать поставлять корректные реализации на по-умолчанию.

Разработчики должны знать, что между Browser Preview и публичным запуском WebAssembly, будет по крайней мере, одно изменения ломка, которые требуют от разработчиков, чтобы обновить свой набор инструментов и двоичные файлы. Эти изменения будут объявлены заранее и перечислены ниже.

См Начало работы , чтобы начать экспериментировать и связь для того, как и куда направить обратную связь.

Оригинальный ответ:

Мы синхронизируются на особенности соотношения между браузерами для демоса и намерены обновить все браузеры + демки в ногу с этого момента, в сторону MVP.

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

Это отсутствуют некоторые функции , такие как API к Wasm объекту, памяти JavaScript и совместному использованию указателей через Wasm экземпляры. Мы также не остановились на двоичном формате, самое большое изменение сейчас происходит пост-заказ , но есть много небольших изменений , поступающих.

Браузер интеграция также не хватает: мы хотим, чтобы отправить с видом-источником и, вероятно, какой-то поддержкой отладкой. Там также некоторые перфорация тюнинг, и много тестирования безопасности.

Для того, чтобы отслеживать эти вопросы , которые я рекомендую обратить внимание на дизайн и спецификации трекеров выпуска.

На вашей конкретной проблемы, мы еще не закончили grow_memory в Chrome. Работа началась , хотя.

Положение дел в WebAssembly MVP в браузерах

https://webassembly.github.io/demo/ говорит: «Полностью реализована семантика выполнения». звучит как MVP, но что именно отсутствует или я делаю что-то неправильно?

Chrome Canary загружает файл WASM, но grow_memory, похоже, не реализован:

И Firefox Nightly терпит неудачу при загрузке:

Также размер страницы кажется 0x10000 вместо 0x1000. Но я не могу найти его в дизайне или спецификации.

1 ответ

4 Решение JF Bastien [2020-04-17 18:55:00]

Обновление в марте 2020 года:

Элементы CG WebAssembly, представляющие четыре браузера, Chrome, Edge, Firefox, и WebKit пришли к единому мнению о том, что дизайн начального (MVP) API WebAssembly и бинарный формат завершены в той мере, проектные работы возможны без опыта внедрения и значительных Применение. Это знаменует окончание просмотра браузера и сигнализирует о том, что браузеры может начать отправку WebAssembly по умолчанию. С этого момента, будущие функции будут разработаны для обеспечения обратной совместимости.

Этот консенсус включает JavaScript API и двоичный форматв сопровождении справочного интерпретатора. Вы можете проверить WebAssembly сегодня используя инструментальную цепочку Emscripten, следуя инструкциям разработчикови читайте больше на MDN.

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

Текущий webassembly.org документирует следующие следующие шаги, которые следует следовать сразу после MVP:

Группа сообщества и вкладчики WebAssembly планируют:

  • перенаправить designи spec interpreter repos в единую унифицированную спецификацию в specСделки РЕПО
  • предложить новый устав рабочей группы W3C WebAssembly
  • закончите WebAssembly LLVM backend от экспериментального до стабильного (и обновите Emscripten)
  • прототип дополнительной интеграции WebAssembly в инструменты разработчика браузера.
  • Начните работу над функциями после MVP

Обновление за ноябрь 2020 года:

В настоящее время существует предварительный просмотр браузера, который запрашивает отзывы разработчиков. Из webassembly.org:

Группа сообщества WebAssembly имеет начальную (MVP) кандидат на выпуск бинарного формата и JavaScript API, которые реализованы в нескольких браузерах. Теперь CG запрашивает обратную связь от более широкого сообщества в рамках периода предварительного просмотра браузера. Ориентировочная цель CG заключается в том, что Предварительный просмотр браузера завершится в первом квартале 2020 года, хотя существенные результаты во время просмотра браузера могут потенциально продлить продолжительность. Когда завершается предварительный просмотр браузера, CG создаст проект спецификации WebAssembly, и поставщики браузеров могут начать отправлять соответствующие реализации по умолчанию.

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

Мастер Йода рекомендует:  Преимущества индексации страниц с mod_rewrite

См. Начало работы, чтобы начать экспериментировать и Feedback как и где можно направлять обратную связь.

Оригинальный ответ:

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

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

Он пропускает некоторые функции, такие как API, в объект Wasm JavaScript, память и обмен указателями в экземплярах Wasm . Мы также не урегулированы в двоичном формате, самое большое изменение на данный момент происходит после заказа, но есть много меньших изменений.

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

Чтобы отслеживать эти проблемы, я рекомендую посмотреть design и spec.

По вашей конкретной проблеме мы не закончили grow_memory в Chrome. Работа началась.

WebAssembly — WebAssembly

WebAssembly

парадигма Императив , структурированное , выражение-ориентированное
Разработано W3C
разработчик
Во-первых появился Март 2020 ; 2 года назад ( 2020-03 )
Typing дисциплины статический
Лицензия Apache 2.0
расширения файлов
Веб-сайт webassembly .org
Под влиянием

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

Целью Wasm является включение двигателя JavaScript в виде веб — браузера для выполнения страницы сценариев почти так же быстро , как родной машинный код . Но это не полная замена для JavaScript ; скорее, Wasm предназначен только для выполнения критически важных частей скриптов страниц. Wasm код работает в той же песочнице , как обычный код сценария, но только обычные скрипты имеют прямой доступ к дереву DOM .

содержание

история

WebAssembly первым был объявлен в 2015 году, а первая демонстрация выполнения Unity «s Злой Боты в Firefox , Google Chrome и Microsoft Краю . Технологии предшественников были asm.js от Mozilla и Native Client Google и первоначальной реализации был основан на наборе характеристик asm.js.

В марте 2020 года, дизайн минимальный жизнеспособный продукт был объявлен должен быть завершен и фаза предварительного просмотра закончилась. В конце сентября 2020 года, Safari 11 был выпущен при поддержке. В феврале 2020 года Рабочая группа WebAssembly опубликовала три открытых рабочие проекты для спецификации ключевой, JavaScript интерфейса и Web API.

Служба поддержки

В ноябре 2020 года, Mozilla заявила о поддержке «во всех основных браузерах», после того, как WebAssembly была включена по умолчанию в Крае 16. Поддержка включает в себя мобильные веб — браузеры для прошивки и Android. По состоянию на март 2020 года, 81,41% от установленных браузеров поддерживают WebAssembly. Но для старых браузеров, Wasm может быть скомпилирован в asm.js по JavaScript в polyfill .

Поскольку WebAssembly исполняемые файлы предварительно скомпилированных, можно использовать различные языки программирования , чтобы сделать их. Это достигается либо путем прямого компиляции в Wasm, или за счет реализации соответствующих виртуальных машин в Wasm. Там были около 40 языков программирования , сообщенных для поддержки Wasm в качестве цели компиляции.

Emscripten может составить до Wasm использованием LLVM в интерфейсе.

Его первоначальная цель состоит в том, чтобы поддерживать компиляцию из C и C ++ , хотя поддержка других исходных языков , таких как Руст и .NET языки также появляются. После минимального жизнеспособного продукта (MVP) выпуска, есть планы по поддержке многопоточности и вывоз мусора , который сделал бы WebAssembly цель компиляции для сборки мусора языков программирования , таких как Java , C # (поддерживается через Blazor ) и Go .

Представление

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

В марте 2020 года Сообщество Группы WebAssembly достигли консенсуса по начальной (MVP) двоичном формате, JavaScript API и эталонным переводчика. Он определяет двоичный формат WebAssembly, который не предназначен для использования людьми, а также удобочитаемый линейный сборочный байткодом формат , который напоминает традиционные языки сборки.

В таблице ниже приведены три различных вида одного и того же входа исходного кода с левой стороны , так как он преобразуется в Wasm промежуточное представление , а затем в бинарный Wasm:

Формат текста WebAssembly можно также записать в сложенном виде с использованием S-выражений . Этот формат является чисто синтаксическим сахаром и не имеет никаких различий в поведении с линейным форматом. Пример показан ниже:

Литература

  • Хаас, Андреас; Rossberg, Андреас; Schuff, Дерек L .; Titzer, Бен L .; Гохман, Дэн; Вагнер, Люк; Zakai, Алон; Бастьен, JF; Холман, Майкл (июнь 2020). «Приведение в Интернете до скорости с WebAssembly» . Труды 38 — й ACM SIGPLAN конференции по программированию язык дизайна и реализации . Ассоциация вычислительной техники: 185-200.
  • Вт, Conrad (2020). «Механизировать и проверка спецификации WebAssembly» (PDF) . ACM SIGPLAN Международной конференция по сертифицированным программам и доказательствам . ACM. 7 . DOI : 10,1145 / 3167082 .

Рекомендации

Эта статья содержит текст из свободного содержания работы. Лицензия под Apache License 2.0 Лицензия заявление : Text Format , jfbastien; Rossberg-хром; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly / дизайн. Чтобы узнать , как добавить открытую лицензию текст статьи Википедии, пожалуйста , см это как к странице . Для получения информации о повторном использовании текста из Википедии , пожалуйста , см с условиями использования .

Представлены первые рабочие проекты WebAssembly

WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications.

Efficient and fast

The Wasm stack machine is designed to be encoded in a size- and load-time-efficient binary format. WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms.

WebAssembly describes a memory-safe, sandboxed execution environment that may even be implemented inside existing JavaScript virtual machines. When embedded in the web, WebAssembly will enforce the same-origin and permissions security policies of the browser.

Open and debuggable

WebAssembly is designed to be pretty-printed in a textual format for debugging, testing, experimenting, optimizing, learning, teaching, and writing programs by hand. The textual format will be used when viewing the source of Wasm modules on the web.

Part of the open web platform

WebAssembly is designed to maintain the versionless, feature-tested, and backwards-compatible nature of the web. WebAssembly modules will be able to call into and out of the JavaScript context and access browser functionality through the same Web APIs accessible from JavaScript. WebAssembly also supports non-web embeddings.

Введение в интерфейсы WebAssembly

WebAssembly — портируемый бинарный формат. Это значит, что один и тот же файл может быть запущен везде. Но каждая платформа, на которой мы захотим запускать этот самый «один и тот же файл», должна уметь выполнять Wasm-код — и делать это максимально быстро и максимально безопасно.

Wasmer — это среда исполнения WebAssembly, написанная на Rust. И среда эта — встраиваемая. Она может быть включена в состав программ на Rust, а ещё её можно подключить из других языков: PHP (php-ext-wasm), Python (PyPI:wasmer), Ruby (Gem:wasmer) и других.

Wasmer полностью сфокусирован на запуске модулей WebAssembly на стороне сервера. Мы начинали с запуска сгенерированных с помощью Emscripten модулей, но постепенно добавляли поддержку других ABI (application binary interface, двоичный интерфейс приложений) — WASI, Wascap и так далее.

Вы можете запускать разные программы с каждым ABI, например, Nginx (Emscripten) и Cowsay (WASI).

Со временем мы поняли, что среда исполнения выполняла много проверок перед запуском экземпляра приложения, чтобы убедиться, что модуль совместим с определенным ABI (Emscripen или WASI). Это означает проверку соответствия импортов и экспортов модуля ожиданиям среды. Например, речь идёт о проверке сигнатур функций или совпадении глобальных типов.

Оказывается, эти проверки важны не только потому, что позволяют убедиться в совместимости модуля со средой исполнения. Они также полезны тем, что позволяют убедиться в совместимости модуля с конкретным API.

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

С помощью интерфейсов WebAssembly и WAPM (WebAssembly Package Manager) вы можете легко использовать всю экосистему WAPM для создания, верификации и распространения плагинов.

Поэтому мы решили поработать над способами проверки и предложить их как стандарт определения наборов импортов и экспортов, которые должны быть в модуле.

Покажите мне интерфейсы Wasm

Интерфейсы WebAssembly созданы под влияением ЛИСП-подобного текстового формата Wasm. Мы намеренно настаивали, чтобы формат не зависел от будущих предложений, так как хотели, чтобы интерфейсы были близки к внутренним форматам Wasm (только четыре типа: i32, i64, f32, f64).

Ниже представлены интерфейсы WebAssembly для WASI:

Это значит, что модуль, в котором реализуется интерфейс WASI, должен быть совместимым с представленными сигнатурами.

Как использовать интерфейсы Wasm

Некоторые проекты уже используют представленный синтаксис для определения модулей WebAssembly. Пионером интеграции интерфейсов Wasm стал WAPM.

Если вы используете wapm cli, модули будут автоматически проверяться с помощью имеющегося интерфейса перед публикацией в реестре. Так мы убеждаемся в совместимости новых модулей с ABI, которые они призваны реализовывать.

В настоящее время в WAPM доступны такие интерфейсы:

  • WASI. Это модульный системный интерфейс Wasm (WASI — WebAssembly System Interface). Он сфокусирован на безопасности и портативности.
  • Wascap. Это набор стандартов и соглашений, которые заполняют пробел в облачной среде модулей Wasm.

Ручная проверка интерфейса модуля

Когда вы используете WAPM и поле interfaces в кофигурациях, мы проверяем модуль на совместимость с интерфейсом. Также мы создали бинарный файл wasm-interface , который доступен на WAPM:

Автоматическая проверка интерфейсов для модуля с помощью WAPM

Публиковать модули для WASI или Wascap очень просто. Убедитесь, что используете последнюю версию wasmer и wapm с помощью команды wasmer self-update .

Отредактируйте файл wapm.toml и добавьте секцию [module.interfaces] :

Как только вы добавите новый интерфейс в модуль и опубликуете его на WAPM, он появится в UI. Смотрите тег WASI рядом с названием.

Как создать новый интерфейс с помощью WAPM

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

Адаптированный перевод статьи Introducing WebAssembly Interfaces by Syrus Akbary. Мнение автора оригинальной публикации может не совпадать с мнением администрации «Хекслета».

Кто-нибудь пишет на WebAssembly?

Читал как-то статью на хабре «WebAssembly: начало новой эры» https://habrahabr.ru/post/261205/

Прошёл год. Кто-нибудь пишет на нём?

  • Вопрос задан более трёх лет назад
  • 2750 просмотров

Мы только начинаем пробовать все эти новые штуки.

В основном прицел идёт на кроссплатформенность приложений, смотрим в сторону таких фреймворков как:

  • crosswalk-project (пробовал пока что только на уровне hello world, но как раз тут и хочу применять WebAssembly, WebCL, WebGL, и надо бы ещё портировать сюда всякие такие штуки вроде TensorFlow Light и т.п.)
  • cordova (написал уже пару тормознутых приложений с использовать этой технологии)
  • electronjs (пока что пробовал только на уровне создания hello world)

Занимаюсь веб разработкой уже более 13 лет.

WebAssembly

На этой странице

WebAssembly – это новый открытый формат байт-кода, исполняемого современными браузерами. Он позволяет переносить код, написанный на таких языках как C, C++, Rust, в низкоуровневые ассемблерные инструкции и использовать его в сети. Формат имеет компактные размеры, высокую производительность, близкую к нативной, и может одновременно работать с JavaScript.

В двух словах

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

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

И что еще лучше, так это то, что WebAssembly разрабатывается как веб-стандарт W3C WebAssembly Working Group и Community Group при активном участии основных производителей браузеров.

WebAssembly – новый стандарт который изменит Web

WebAssembly (сокр. wasm) – это эффективный низкоуровневый язык программирования. Главное его предназначение заключается в повышении производительности JavaScript.

WebAssembly построен на подмножестве JavaScript – asm.js. Он также хранится в текстовом формате. Может возникнуть вопрос: как код может быть эффективнее если он также проходит интерпретатор, а затем компилируется? Для этого используется пролог директива, благодаря которой компилятор сразу переводит код на язык ассемблера, пропуская этап интерпретации.

Код wasm представлен как помеченное, ориентированное дерево, в котором внутренние вершины сопоставлены с операторами языка, а листья с соответствующими операндами. И это дерево хранится в двоичном формате. Благодаря этому мы получаем небольшой размер модуля, быстрое декодирование, и меньшее использование памяти. Если удастся приблизиться к скорости выполнения машинного кода, то произойдет настоящая революция в развитии веб-приложений.

После появления этого стандарта появилась возможность компилировать языки верхнего уровня в код wasm или asm.js. На данный момент доступно для языков C и C++.

Для примера скомпилируем код С:

Для этого воспользуемся компилятором Emscripten, способный преобразовывать бит код LLVM (Low Level Virtual Machine) в представление на языке JavaScript и Binaryen который имеет инструментарий для компиляции wasm. Чтобы скомпилировать, выполним следующую команду:

emcc file.cpp -o file.js -s ‘BINARYEN=”путь для двоичного файла”’

Примерно так выглядит уже транслированный код C в wasm:

При переводе в бинарный формат производится несколько этапов сжатия:

  • Сырой формат – стандартный бинарный формат;
  • Специальное сжатие бинарного формата;
  • Общая компрессия

Еще одним плюсом wasm является непосредственный доступ к машинному коду. Так как зачастую в машинном языке новый функционал представляется в виде SDK, к которому нет доступа с клиентской части веб-приложений. И для того, чтобы иметь возможность использовать этот SDK нужно время, когда браузеры будут поддерживать новые возможности и предоставят соответствующий API. Но, даже при этих условиях JavaScript будет работать слишком медленно.

Использование API машинного кода средствами WebAssembly становится гораздо проще и появляется возможность обращаться к нему на более низком уровне. Это дает возможности, которые были недостижимы ранее. API предоставляет всего лишь доступ к сырым данным, которые обрабатывал SDK, теперь можно оперировать при помощи wasm. Это открывает широкий простор для операций с данными, благодаря подгружаемым библиотекам из Интернет, не заботясь о продолжительной стандартизации SDK. В будущем у WebAssembly ожидаются такие нововведения как:

  • Полная поддержка многопоточности;
  • Интеграция с DOM;
  • Оптимизация хвостовой рекурсии;
  • Мультипроцессорная поддержка;
  • Интеграция со сборщиком мусора;

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

  • Продвинутые редакторы музыки/изображений/видео;
  • Системы автоматизированного проектирования;
  • Высокопроизводительные игры;
  • Средства разработки;

WebAssembly эта та технология к которой бы рано или поздно дошла эволюция. Технология, которая безусловно изменит web, открыв возможности для построения более технологичных web-приложений.

Опубликовано в “МЦИИ Omega Science от 23.07.2020”

Анонсирован WebAssembly, обеспечивающий запуск скомпилированного кода в браузерах

Бренден Айк (Brendan Eich), создатель языка JavaScript, представил проект WebAssembly, совместно развиваемый ведущими производителями браузеров под эгидой организации W3C. В рамках проекта планируется подготовить унифицированный низкоуровневый промежуточный код для выполнения в браузере приложений, скомпилированных из различных языков программирования, фокусируясь на начальном этапе в основном на языках С и С++, но не ограничиваясь ими.

По своим задачам WebAssembly во многом напоминает PNaCl (Portable Native Client) и Asm.js. Основное отличие от Asm.js состоит в том, что WebAssembly является бинарным форматом, не завязанным на исходных текстах JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код. При этом, в отличие от PNaCl промежуточный код не является машинным кодом и не изолирован в отдельной виртуальной машине, а выполняется с похожим на JavaScript уровнем изоляции и реализован на уровне штатных движков JavaScript (по сути предлагается технология компиляции JavaScript-приложений, с возможностью доступа к объектам JavaScript, DOM и Web API).

Для генерации кода WebAssembly планируется подготовить специальный бэкенд к clang/LLVM, который сможет быть использован в том числе для генерации кода уже существующими проектами, такими как Emscripten и PNaCl. Т.е. вместо генерации JavaScript и собственного байткода, Emscripten и PNaCl смогут генерировать универсальный код WebAssembly. В настоящее время для экспериментов предлагаются рабочие прототипы кодировщика и декодировщика. Для изучения кода WebAssembly и отладки предусмотрена возможность преобразования промежуточного бинарного кода в наглядное текстовое представление.

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

По мере развития проекта, его планируется расширить поддержкой таких возможностей, как динамическое связывание, полное управление памятью (mmap, shared memory), низкоуровневый доступ к структурам сборщика мусора, JIT-компиляция, многопроцессный режим выполнения, SIMD API, асинхронные сигналы, расширенные целочисленные операции и т.п.

WebAssembly позиционируется как совместный проект, развиваемый всеми ведущими производителями браузеров. В основную команду, которая будет развивать WebAssembly, вошли разработчики PNaCl и движка V8 из Google, представители Microsoft и Mozilla, а также разработчики Emscripten и WebKit. Внедрение WebAssembly даст возможность воплотить в жизнь создание новых продуктов, работающих в браузере, в том числе высокопроизводительных игр, систем редактирования видео/звука/изображений, P2P-систем, САПР, средств разработки и коммуникации, в том числе упоминается возможность запуска локального web-сервера в браузере и эффективная упаковка web-фреймворков.

Проект WebAssembly увеличивает скорость браузеров в 20 раз

Консорциум W3C представил проект WebAssembly. Это новый, перспективный стандарт, который должен вдохнуть новую жизнь в веб разработку.

Представил проект Бренден Айк (Brendan Eich), который является создателем JavaScript. WebAssembly отличается возможностью использования самыми различными браузерами на различных платформах.

Тем не менее, рядовому пользователю это ни о чем не говорит. Стоит сказать, что WebAssembly, даже на своей ранней стадии разработки, в демонстрации показал увеличение в 20 раз скорость декодирования промежуточного кода, а это в свою очередь означает значительное ускорение работы браузера. Кроме того, представление кода меньше на 45% по сравнению с Asm.js.

В разработке WebAssembly присоединились люди, работающие над PNaC, V8, Emscripten и WebKit. А это, на секундочку, Apple, Google, Microsoft и Mozilla. Не самое частое явление, когда компании единогласно приходят к одному стандарту, причем в такой короткий сорок.

Что это означает для рядовых пользователей? Увеличение скорости работы браузеров, а также увеличение их возможностей, если внедрить WebAssembly, они смогут самостоятельно воспроизводить довольно крупные САПР, графические и офисные пакеты, а также графику соизмеримую с нынешним поколением консолей. Это в теории, когда же начнется внедрение WebAssembly в браузеры – пока не ясно.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий
С входной источник Линейная сборка байткод
( промежуточное представление )
Двоичное кодирование Wasm
(шестнадцатеричные байты)