Веб-сборка
Парадигма | структурированный ; стековая машина [1] |
---|---|
Разработано | W3C |
Разработчик | |
Впервые появился | март 2017 г |
ТЫ | Независимый от платформы |
Лицензия | Лицензия Апач 2.0 |
Расширения имен файлов |
|
Веб-сайт | веб-сборка |
Под влиянием | |
WebAssembly ( Wasm ) определяет переносимый формат двоичного кода и соответствующий текстовый формат для исполняемых программ. [2] а также программные интерфейсы для облегчения взаимодействия между такими программами и их средой размещения. [3] [4] [5] [6]
Основная цель WebAssembly — обеспечить высокопроизводительные приложения на веб-страницах , «но он не делает каких-либо специфичных для Интернета предположений и не предоставляет специфичных для Интернета функций, поэтому его можно использовать и в других средах». [7] Это открытый стандарт [8] [9] и нацелен на поддержку любого языка в любой операционной системе, [10] и на практике все самые популярные языки уже имеют хоть какой-то уровень поддержки.
Анонсированный в 2015 году рекомендованным Консорциумом World Wide Web 5 декабря 2019 года. [11] [12] [13] и он получил награду за программное обеспечение для языков программирования от ACM SIGPLAN в 2021 году. [14] Консорциум World Wide Web (W3C) поддерживает стандарт при участии Mozilla , Microsoft , Google , Apple , Fastly , Intel и Red Hat . [15] [16]
и впервые выпущенный в марте 2017 года , WebAssembly сталИстория
[ редактировать ]WebAssembly назван в честь концепции языка ассемблера , термина, который появился в 1950-х годах. Название предполагает перенос ассемблерного программирования в Интернет , где оно будет выполняться на стороне клиента пользователя — на компьютере пользователя веб-сайта через веб-браузер . Для этого WebAssembly должен быть гораздо более независимым от оборудования, чем настоящий язык ассемблера.
Впервые о WebAssembly было объявлено в 2015 году. [17] и первой демонстрацией было выполнение Unity Bots Angry в Firefox . [18] Гугл Хром , [19] и Microsoft Edge . [20] Технологии-предшественники — asm.js от Mozilla и Google Native Client . [21] [22] и первоначальная реализация была основана на наборе функций asm.js. [23] Технология asm.js уже обеспечивает скорость выполнения кода, близкую к нативной. [24] [25] и может считаться жизнеспособной альтернативой для браузеров, которые не поддерживают WebAssembly или отключили его по соображениям безопасности.
В марте 2017 года было объявлено, что разработка минимально жизнеспособного продукта (MVP) завершена, и этап предварительного просмотра завершился. [26] В конце сентября 2017 года был выпущен Safari 11 с поддержкой. В феврале 2018 года рабочая группа WebAssembly опубликовала три общедоступных рабочих проекта базовой спецификации, интерфейса JavaScript и веб-API. [27] [28] [29] [30]
В июне 2019 года был выпущен Chrome 75 с включенными по умолчанию потоками WebAssembly. [31]
С апреля 2022 года [update] WebAssembly 2.0 находится в состоянии черновика, [32] [33] который добавляет множество инструкций, связанных с SIMD , и новый тип данных v128, способность функций возвращать несколько значений, а также инициализацию/копирование массовой памяти.
Реализации
[ редактировать ]Хотя WebAssembly изначально был разработан для обеспечения скорости выполнения кода, близкой к нативной, в веб-браузере, он считался ценным и за его пределами, в более общих контекстах. [34] [35] Поскольку среды выполнения WebAssembly (RE) представляют собой низкоуровневые виртуальные стековые машины (сродни JVM или Flash VM ), которые можно встраивать в хост-приложения, некоторые из них нашли способ создания автономных сред выполнения, таких как Wasmtime и Wasmer . [9] [10] Среды выполнения WebAssembly встраиваются в серверы приложений для размещения «серверных» приложений WebAssembly и в другие приложения для поддержки архитектур расширений программного обеспечения на основе подключаемых модулей , например «WebAssembly для прокси» (proxy-wasm), который определяет основанный на WebAssembly ABI для расширения прокси-серверов . [36] [37]
Веб-браузеры
[ редактировать ]В ноябре 2017 года Mozilla заявила о поддержке «во всех основных браузерах». [38] после того, как WebAssembly был включен по умолчанию в Edge 16. [39] Поддержка включает мобильные веб-браузеры для iOS и Android. По состоянию на март 2024 г. [update] 99% отслеживаемых веб-браузеров поддерживают WebAssembly (версия 1.0), [40] это больше, чем у его предшественника asm.js , который не поддерживается, например, веб-браузером Safari. Для некоторых расширений, начиная с проекта стандарта 2.0, поддержка может быть ниже, но все же более 90% веб-браузеров уже могут поддерживать их, например, расширение ссылочных типов. [41]
Составители
[ редактировать ]Реализации WebAssembly обычно используют либо предварительную (AOT), либо своевременную (JIT) компиляцию, но также могут использовать интерпретатор . Хотя первые реализации появились в веб-браузерах , существуют также небраузерные реализации для общего использования, включая Wasmer, [10] Васмтайм [42] или ВАМР, [16] wasm3, WAVM и многие другие. [43]
WebAssembly Поскольку исполняемые файлы предварительно скомпилированы, для их создания можно использовать различные языки программирования. [44] Это достигается либо путем прямой компиляции в Wasm, либо за счет реализации соответствующих виртуальных машин в Wasm. Сообщается, что около 40 языков программирования поддерживают Wasm в качестве цели компиляции. [45]
Emscripten компилирует C и C++ в Wasm [26] использование Binaryen и LLVM в качестве бэкэнда. [46] Emscripten SDK может скомпилировать исходный код любого языка, поддерживающего LLVM (например, C , C++ или Rust и др.), в двоичный файл, который запускается в той же изолированной программной среде, что и код JavaScript. [примечание 1] Emscripten предоставляет привязки для нескольких часто используемых интерфейсов среды, таких как WebGL .
Начиная с версии 8, отдельный Clang может компилировать C и C++ в Wasm. [51] Его первоначальной целью была поддержка компиляции из C и C++ . [52] хотя поддержка других исходных языков, таких как Rust , языки .NET [53] [54] [45] и ассемблерскрипт [55] ( TypeScript ) также появляется.
После выпуска MVP в WebAssembly добавлена поддержка многопоточности и сборки мусора. [56] [57] что позволило компилировать языки программирования со сборкой мусора, такие как C# (поддерживается через Blazor ), F# (поддерживается через Bolero). [58] с помощью Blazor), Python и даже JavaScript браузера , где скорость своевременной компиляции считается слишком низкой.
Ряд других языков имеют некоторую поддержку, включая Python , [59] Юля , [60] [61] [62] и Руби . [63]
Ряд систем могут компилировать Java и другие языки байт-кода в JavaScript и WebAssembly. К ним относятся CheerpJ, [64] JWebAssembly [65] и ТеаВМ. [66] другие языки JVM, такие как Groovy и Scala Все они принимают файлы .class с байт-кодом Java в качестве входных данных, что позволяет также использовать . Kotlin напрямую поддерживает WebAssembly. [67] [68]
Ограничения
[ редактировать ]Веб-браузеры не позволяют коду WebAssembly напрямую обращаться к объектной модели документа . Для этого код Wasm должен подчиняться JavaScript . [примечание 2]
В опросе разработчиков, проведенном в октябре 2023 года, менее половины из 303 участников были удовлетворены состоянием WebAssembly. Подавляющее большинство указало на необходимость улучшений в четырех областях: WASI, поддержка отладки, интеграция с JavaScript и API браузера, а также инструменты сборки. [71]
Что касается выделения памяти в WebAssembly, существуют «серьезные ограничения, из-за которых многие приложения невозможно надежно развернуть в мобильных браузерах [..] В настоящее время выделение более ~ 300 МБ памяти не является надежным в Chrome на Android без обращения к специфичным для Chrome обходные пути, ни в Safari на iOS». [72]
Все основные браузеры разрешают WebAssembly, если Content-Security-Policy не указан или если используется unsafe-eval, но в остальном они ведут себя по-разному. [73] Chrome требует «unsafe-eval», [74] [75] хотя рабочий поток может быть обходным путем. [75]
В 2022 году стартап-компания Zaplib в блоге подвела итоги своего закрытия. [76] Их целью было значительно повысить производительность существующих веб-приложений путем постепенного их переноса на Rust /Wasm. Однако перенос клиентского симулятора с JavaScript дал улучшение только на 5%. [76] Что касается Figma , они заявили: «при ближайшем рассмотрении кажется, что они использовали Wasm больше из-за исторических случайностей — желания встроить C++ для защиты своего собственного приложения — чем из-за критически важных потребностей в производительности. Файлы Figma обрабатываются в C++/Wasm. , и это, вероятно, огромное ускорение, но большая часть волшебства производительности Figma связана с их рендерером WebGL ». [76]
Соображения безопасности
[ редактировать ]В июне 2018 года исследователь безопасности представил возможность использования WebAssembly для обхода средств защиты браузера от уязвимостей безопасности Spectre и Meltdown поддержки потоков после добавления с общей памятью. Из-за этой проблемы разработчики WebAssembly приостановили реализацию этой функции. [77] [78] [79] Однако, чтобы изучить эти будущие языковые расширения, в октябре 2018 года Google Chrome добавил экспериментальную поддержку предложения потоков WebAssembly. [80]
WebAssembly подвергался критике за то, что он упрощает сокрытие доказательств для авторов вредоносных программ , мошенников и злоумышленников -фишингистов ; WebAssembly присутствует на компьютере пользователя только в скомпилированном виде, что «[усложняет] обнаружение вредоносного ПО». [81] Скорость и скрытность WebAssembly привели к его использованию для скрытого майнинга криптовалют на устройстве посетителя веб-сайта. [81] [82] [77] Coinhive , ныне несуществующий сервис, облегчающий добычу криптовалюты в браузерах посетителей веб-сайтов, утверждает, что их «майнер использует WebAssembly и работает примерно с 65% производительности собственного майнера». [77] Исследование, проведенное в июне 2019 года Техническим университетом Брауншвейга, проанализировало использование WebAssembly на 1 миллионе лучших веб-сайтов Alexa и обнаружило, что преобладающее использование было для вредоносного крипто-майнинга, и что на вредоносное ПО приходилось более половины изученных веб-сайтов, использующих WebAssembly. [83] [84] Исследование Университета Штутгарта, проведенное в апреле 2021 года , показало, что с тех пор майнинг криптовалют стал маргинализироваться, упав до уровня ниже 1% от всех модулей WebAssembly, собранных из широкого спектра источников, включая 1 миллион лучших веб-сайтов Alexa. [85]
Способность эффективно запутывать большие объемы кода также можно использовать для обхода блокировки рекламы и инструментов конфиденциальности, которые предотвращают веб-отслеживание, таких как Privacy Badger . [ нужна ссылка ]
Поскольку WebAssembly поддерживает только структурированный поток управления , он поддерживает методы проверки безопасности, включая символьное выполнение . [86] Текущие усилия в этом направлении включают в себя механизм символического выполнения Manticore. [87]
ВАСИ
[ редактировать ]Системный интерфейс WebAssembly (WASI) — это простой интерфейс ( ABI и API ), разработанный Mozilla и предназначенный для переносимости на любую платформу. [88] Он предоставляет POSIX -подобные функции, такие как файловый ввод-вывод, ограниченные безопасностью на основе возможностей . [89] [90] Есть также несколько других предлагаемых ABI/API. [91] [92]
WASI находится под влиянием CloudABI и Capsicum .
Соломон Хайкс, сооснователь Docker , написал в 2019 году: «Если бы WASM+WASI существовал в 2008 году, нам не пришлось бы создавать Docker. Вот насколько это важно. WebAssembly на сервере — это будущее вычислений». [93] Wasmer , версия 1.0, обеспечивает «контейнеризацию программного обеспечения, мы создаем универсальные двоичные файлы, которые работают где угодно без изменений, включая операционные системы, такие как Linux, macOS, Windows и веб-браузеры. Wasm по умолчанию автоматически помещает приложения в песочницу для безопасного выполнения». [93]
Спецификация
[ редактировать ]Хост-среда
[ редактировать ]Общий стандарт содержит основные спецификации API JavaScript и подробную информацию о внедрении. [5]
Виртуальная машина
[ редактировать ]Код Wasm (двоичный код, т. е. байт-код) предназначен для запуска на портативной машине виртуального стека (VM). [94] Виртуальная машина спроектирована так, чтобы анализировать и выполнять ее быстрее, чем JavaScript, и иметь компактное представление кода. [52] Любая внешняя функциональность (например, системные вызовы ), которую может ожидать двоичный код Wasm, не предусмотрена стандартом. Скорее, он обеспечивает способ обеспечения взаимодействия через модули в среде хоста, в которой работает реализация виртуальной машины. [95] [9]
Программа Васм
[ редактировать ]Программа Wasm представляет собой отдельный модуль, содержащий коллекции различных значений, определенных Wasm, и определений типов программ. Они выражаются либо в двоичном, либо в текстовом формате (см. ниже), оба имеют общую структуру. [96] Такой модуль может предоставлять функцию запуска, которая выполняется при создании экземпляра двоичного файла Wasm.
Набор инструкций
[ редактировать ]Основной стандарт двоичного формата программы Wasm определяет архитектуру набора команд (ISA), состоящую из определенных двоичных кодировок типов операций, которые выполняются виртуальной машиной (без указания того, как именно они должны выполняться). [97] Список инструкций включает стандартные инструкции загрузки/сохранения памяти, числовые, параметрические инструкции, инструкции управления типами потоков и инструкции переменных, специфичные для Wasm. [98]
Количество кодов операций, использованных в исходном стандарте (MVP), было чуть меньше 200 из 256 возможных кодов операций. В последующих версиях WebAssembly количество кодов операций превысило 200. Предложение WebAssembly SIMD (для параллельной обработки) вводит альтернативный префикс кода операции (0xfd) для 128-битного SIMD. Объединение префикса SIMD и кода операции, который действителен после префикса SIMD, образует код операции SIMD. Коды операций SIMD содержат дополнительные 236 инструкций для возможности SIMD «минимально жизнеспособного продукта» (MVP) (всего около 436 инструкций). [99] [100] Эти инструкции, «завершенные коды операций». [101] включены по умолчанию в Google V8 (в Google Chrome), движке SpiderMonkey в Mozilla Firefox и движке JavaScriptCore в Safari от Apple. [102] а также есть некоторые дополнительные предложения по инструкциям для последующего «пост SIMD MVP», а также есть отдельное предложение «расслабленного SIMD». [103]
Эти коды операций SIMD также являются переносимыми и преобразуются в собственные наборы инструкций, такие как x64 и ARM. Напротив, ни JVM , ни CIL в Java не поддерживают SIMD на уровне кода операции , то есть в стандарте; оба имеют несколько параллельных API, которые обеспечивают ускорение SIMD. Существует расширение для Java, добавляющее встроенные функции для SIMD x64, [104] это не портативно, то есть его нельзя использовать на ARM или смартфонах. Смартфоны могут поддерживать SIMD, вызывая ассемблерный код с помощью SIMD, и C# имеет аналогичную поддержку.
Представление кода
[ редактировать ]В марте 2017 года группа сообщества WebAssembly достигла консенсуса относительно исходного двоичного формата (MVP), API JavaScript и эталонного интерпретатора. [105] Он определяет двоичный формат WebAssembly ( .wasm
), который не предназначен для использования людьми, а также удобочитаемый текстовый формат WebAssembly ( .wat
), напоминающий нечто среднее между S-выражениями и традиционными языками ассемблера.
В таблице ниже показан пример функции факториала , написанной на C , и соответствующий ей код WebAssembly после компиляции, показанный как на текстовый формат .wat (удобочитаемое текстовое представление WebAssembly) и в Двоичный формат .wasm (необработанный байт-код , выраженный ниже в шестнадцатеричном формате ), который выполняется веб-браузером или средой выполнения, поддерживающей WebAssembly.
Исходный код Си | Веб-сборка .wat текстовый формат | Веб-сборка .wasm Двоичный формат |
---|---|---|
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n-1);
}
|
(func (param i64) (result i64)
local.get 0
i64.eqz
if (result i64)
i64.const 1
else
local.get 0
local.get 0
i64.const 1
i64.sub
call 0
i64.mul
end)
|
00 61 73 6D 01 00 00 00
01 06 01 60 01 7E 01 7E
03 02 01 00
0A 17 01
15 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B
|
Все целочисленные константы кодируются с использованием компактной кодировки LEB128 переменной длины . [106]
Текстовый формат WebAssembly более канонично записывается в сложенном формате с использованием S-выражений . Для инструкций и выражений этот формат является чисто синтаксическим сахаром и не имеет поведенческих отличий от линейного формата. [107] Через wasm2wat
, приведенный выше код декомпилируется до:
(module
(type $t0 (func (param i64) (result i64)))
(func $f0 (type $t0) (param $p0 i64) (result i64)
(if $I0 (result i64) ;; $I0 is an unused label name
(i64.eqz
(local.get $p0)) ;; the name $p0 is the same as 0 here
(then
(i64.const 1))
(else
(i64.mul
(local.get $p0)
(call $f0 ;; the name $f0 is the same as 0 here
(i64.sub
(local.get $p0)
(i64.const 1))))))))
Обратите внимание, что модуль неявно генерируется компилятором. На функцию фактически ссылается запись таблицы типов в двоичном файле, следовательно, раздел типа и type
выдаваемый декомпилятором. [108] Доступ к компилятору и декомпилятору можно получить онлайн. [109]
См. также
[ редактировать ]- Формат распределения нейтральной архитектуры (ANDF)
- ЮНКОЛ
- Байт-код Java
- Общеязыковая среда выполнения
- ЛЛВМ
- Сборник
- Переносимость программного обеспечения
Примечания
[ редактировать ]- ^ Согласно официальной документации, Emscripten SDK может использоваться для создания
.wasm
файлы, которые затем могут быть выполнены в веб-браузере. [47] [48] [49] Несмотря на то, что Emscripten может использовать разные языки при использовании Clang , могут возникнуть некоторые проблемы. [50] - ^ Для разработки Rust /Wasm сторонние библиотеки могут предоставить некоторые необходимые операции ввода-вывода JavaScript. [69] [70]
Ссылки
[ редактировать ]- ^ «WebAssembly/design/Semantics.md» . Гитхаб . Проверено 23 февраля 2021 г.
Код WebAssembly можно рассматривать как машину структурированного стека ; машина, в которой в большинстве вычислений используется стек значений, но поток управления выражается в структурированных конструкциях, таких как блоки, if и циклы. На практике реализации не требуют поддержки фактического стека значений или реальных структур данных для управления; им нужно только вести себя так, как если бы они это сделали.
- ^ Мозилла. «Понимание текстового формата WebAssembly» . Веб-документы MDN . Проверено 9 декабря 2019 г.
- ^ «Введение — WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 г.
WebAssembly — это открытый стандарт...
- ^ «Введение — WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 г.
WebAssembly — это… формат кода.
- ^ Jump up to: а б «Соглашения — WebAssembly 1.0» . webassembly.github.io . Проверено 17 мая 2019 г.
WebAssembly — это язык программирования, который имеет несколько конкретных представлений (двоичный формат и текстовый формат). Оба соответствуют общей структуре.
- ^ «Введение — WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 г.
... эта спецификация дополняется дополнительными документами, определяющими интерфейсы для конкретных сред внедрения, таких как Интернет. Каждый из них будет определять интерфейс прикладного программирования (API) WebAssembly, подходящий для данной среды.
- ^ «Введение — WebAssembly 1.1» . webassembly.github.io . Проверено 19 февраля 2021 г.
Его основная цель — обеспечить работу высокопроизводительных приложений в Интернете, но он не делает никаких специфичных для Интернета предположений и не предоставляет специфичных для Интернета функций, поэтому его можно использовать и в других средах.
- ^ Хаас, Андреас; Россберг, Андреас; Шуфф, Дерек Л.; Титцер, Бен Л.; Холман, Майкл; Гоман, Дэн; Вагнер, Люк; Закай, Алон; Бастьен, JF (14 июня 2017 г.). «Ускорение работы Интернета с помощью WebAssembly» . Уведомления SIGPLAN . 52 (6): 185–200. дои : 10.1145/3140587.3062363 . ISSN 0362-1340 .
Хотя Интернет является основной мотивацией для WebAssembly, ничто в его дизайне не зависит от Интернета или среды JavaScript. Это открытый стандарт, специально разработанный для встраивания в различные контексты, и мы ожидаем, что в будущем станут доступны автономные реализации.
- ^ Jump up to: а б с «Вне Интернета: автономные двоичные файлы WebAssembly с использованием Emscripten · V8» . v8.dev . Проверено 28 июля 2020 г.
- ^ Jump up to: а б с «Васмер — универсальная среда выполнения WebAssembly» . Васмер.io . Проверено 19 февраля 2021 г.
Скомпилируйте все в WebAssembly. Запустите его на любой ОС или встройте в другие языки.
- ^ Консорциум Всемирной паутины. «Основная спецификация WebAssembly» . Консорциум Всемирной паутины (W3) . Проверено 9 декабря 2019 г.
- ^ Куриоль, Бруно. «WebAssembly 1.0 становится рекомендацией W3C и четвертым языком, который будет работать в браузерах» . infoq.com . Проверено 9 декабря 2019 г.
- ^ «Спецификация WebAssembly — WebAssembly 1.1» . webassembly.github.io . Проверено 22 марта 2021 г.
- ^ «Награда за программное обеспечение в области языков программирования» . www.sigplan.org .
- ^ Брайт, Питер (18 июня 2015 г.). «Сеть получает свой байт-код: WebAssembly» . Арс Техника . Конде Наст .
- ^ Jump up to: а б «Новый альянс байт-кодов обеспечивает безопасность, повсеместность и функциональную совместимость Интернета в мире повсеместных вычислений» . Мозилла . 12 ноября 2019 года . Проверено 27 мая 2019 г.
- ^ «Ошибка запуска» . GitHub /WebAssembly/дизайн . 11 июня 2015 г.
- ^ Вагнер, Люк (14 марта 2016 г.). «Веха в WebAssembly: экспериментальная поддержка в нескольких браузерах» . Хаки Мозиллы .
- ^ Томпсон, Сет (15 марта 2016 г.). «Экспериментальная поддержка WebAssembly в V8» . Блог V8 .
- ^ Чжу, Лимин (15 марта 2016 г.). «Предварительный просмотр экспериментов WebAssembly в Microsoft Edge» . Блог разработчиков Microsoft Edge .
- ^ Лардинуа, Фредерик (17 июня 2015 г.). «Google, Microsoft, Mozilla и другие объединяются для запуска WebAssembly, нового двоичного формата для Интернета» . ТехКранч . Проверено 24 декабря 2017 г.
- ^ Аврам, Авель (31 мая 2017 г.). «Google прекратит поддержку PNaCl» . ИнфоQ . Проверено 22 декабря 2017 г.
- ^ «WebAssembly: двоичный формат для Интернета» . ② Качество – JavaScript и многое другое . 18 июня 2015 г.
- ^ «Смотря на солнце: Dalvik против ASM.js против Native» . blog.mozilla.org . Август 2013 года . Проверено 7 декабря 2019 г.
Даже если отбросить один показатель, в котором asm.js показал себя лучше, он выполняется примерно на 70 % быстрее собственного кода C++.
- ^ Арджун, Джангда, Абхинав Пауэрс, Бобби Бергер, Эмери Гуха (25 января 2019 г.). Не так быстро: анализ производительности WebAssembly по сравнению с нативным кодом . OCLC 1106328738 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Jump up to: а б Криль, Пол (6 марта 2017 г.). «Теперь WebAssembly готова к использованию браузерами» . Инфомир . Проверено 23 декабря 2017 г.
- ^ «Первые публичные рабочие проекты WebAssembly» . W3C. 15 февраля 2018 года . Проверено 20 апреля 2018 г.
- ^ «Основная спецификация WebAssembly» . W3C. 15 февраля 2018 года . Проверено 20 апреля 2018 г.
- ^ «Интерфейс JavaScript WebAssembly» . W3C. 15 февраля 2018 года . Проверено 20 апреля 2018 г.
- ^ «Веб-API WebAssembly» . W3C. 15 февраля 2018 года . Проверено 20 апреля 2018 г.
- ^ «Рабочие потоки WebAssembly — состояние платформы Chrome» . chromestatus.com . Проверено 19 февраля 2022 г.
- ^ «Спецификация WebAssembly — WebAssembly 2.0 (проект от 01 сентября 2022 г.)» . webassembly.github.io . Проверено 9 сентября 2022 г.
- ^ «Первые публичные рабочие проекты WebAssembly 2.0 | Новости W3C» . 19 апреля 2022 г. Проверено 9 сентября 2022 г.
- ^ «Внедрения, не относящиеся к Интернету» . Веб-сборка . Проверено 15 мая 2019 г.
- ^ «Внедрения, не относящиеся к Интернету» . Гитхаб /ВебАссембли . Проверено 15 мая 2019 г.
- ^ Фриз, Дэнни (3 октября 2023 г.). «Proxy-Wasm: это WebAssembly для прокси» . Блог. Конг . Проверено 6 мая 2024 г.
- ^ «proxy-wasm/spec: WebAssembly для прокси (спецификация ABI)» . Гитхаб . Проверено 6 мая 2024 г.
- ^ «Поддержка WebAssembly теперь доступна во всех основных браузерах» . Блог Mozilla . Проверено 21 ноября 2017 г.
- ^ «Представляем новые оптимизации JavaScript, WebAssembly, SharedArrayBuffer и Atomics в EdgeHTML 16» . Блог разработчиков Microsoft Edge . 31 октября 2017 года . Проверено 21 ноября 2017 г.
- ^ «WebAssembly | Могу ли я использовать... Таблицы поддержки HTML5, CSS3 и т. д.» . canIuse.com . Проверено 1 марта 2024 г.
- ^ «Ссылочные типы WebAssembly | Могу ли я использовать... Таблицы поддержки HTML5, CSS3 и т. д.» . caniuse.com . Проверено 3 марта 2024 г.
- ^ «Wasmtime — небольшая и эффективная среда выполнения для WebAssembly и WASI» . wasmtime.dev . Проверено 18 декабря 2020 г.
- ^ «Дорожная карта» . Проверено 7 декабря 2021 г.
- ^ Болл, Кевин (26 июня 2018 г.). «Как WebAssembly ускоряет будущее веб-разработки» . Архивировано из оригинала 12 февраля 2019 года . Проверено 22 октября 2018 г.
- ^ Jump up to: а б «Потрясающие языки WebAssembly» . Гитхаб . 26 июня 2018 года . Проверено 15 февраля 2022 г.
- ^ Закай, Алон [@kripken] (21 октября 2019 г.). «Emscripten по умолчанию переключился на исходный бэкэнд LLVM Wasm! / Подробности: https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4…» ( Твит ) . Проверено 22 октября 2019 г. - через Twitter .
- ^ «Руководство разработчика — WebAssembly» . webassembly.org . Проверено 10 июня 2019 г.
- ^ «Компиляция нового модуля C/C++ в WebAssembly» . Веб-документы MDN . Проверено 10 июня 2019 г.
- ^ «Сборка в WebAssembly — документация Emscripten 1.38.33» . emscripten.org . Проверено 10 июня 2019 г.
- ^ «Встраивание библиотеки C в Wasm | Web» . Разработчики Google . Проверено 10 июня 2019 г.
- ^ «Примечания к выпуску LLVM 8.0.0 — документация LLVM 8» . Releases.llvm.org . Проверено 22 октября 2019 г.
- ^ Jump up to: а б «Цели высокого уровня WebAssembly» . GitHub /WebAssembly/дизайн . 11 декабря 2015 г.
- ^ Криль, Пол (29 ноября 2017 г.). «Прямая компиляция WebAssembly теперь доступна на языке Rust» . Инфомир . Проверено 24 декабря 2017 г.
- ^ «Часто задаваемые вопросы (FAQ) о Blazor» . Блазор.нет . Проверено 18 июня 2018 г.
- ^ AssemblyScript/assemblyscript , Проект AssemblyScript, 9 сентября 2020 г. , получено 9 сентября 2020 г.
- ^ «Новый способ эффективного внедрения языков программирования со сборкой мусора в WebAssembly · V8» . v8.dev . Проверено 11 декабря 2023 г.
- ^ «Сборка мусора WebAssembly (WasmGC) теперь включена по умолчанию в Chrome | Блог» . Chrome для разработчиков . Проверено 11 декабря 2023 г.
- ^ «Болеро: F# в WebAssembly» . fsbolero.io . Проверено 25 июля 2019 г.
- ^ «Pyodide: перенос научного стека Python в браузер – Mozilla Hacks – блог веб-разработчиков» . Mozilla Hacks — блог веб-разработчиков . Проверено 9 сентября 2020 г.
- ^ «Юля в браузере» . nextjournal.com . Проверено 9 апреля 2019 г.
- ^ «Платформа WebAssembly от tshort · Запрос на извлечение № 2 · JuliaPackaging/Yggdrasil» . Гитхаб . Проверено 9 апреля 2019 г.
- ^ Фишер, Кено (22 июля 2019 г.), GitHub — Кено/julia-wasm: запуск Julia на Wasm. , получено 25 июля 2019 г.
- ^ «MRuby в вашем браузере» . рубин.диджей . Проверено 25 июля 2019 г.
- ^ «Компилятор Java в WebAssembly — CheerpJ» . Проверено 27 апреля 2023 г.
- ^ JWebAssembly , 27 апреля 2023 г. – через GitHub
- ^ «TeaVM — Обзор» . www.teavm.org . Проверено 27 апреля 2023 г.
- ^ «Перенос Kotlin в Интернет» . Проверено 11 декабря 2023 г.
- ^ Делез, Себастьян (13 февраля 2023 г.). «Огромный потенциал Kotlin/Wasm» . seb.deleuze.fr . Проверено 11 декабря 2023 г.
- ^ «stdweb — Руст» . docs.rs. Проверено 5 июня 2019 г.
Цель этого набора — предоставить привязки Rust к веб-API и обеспечить высокую степень совместимости между Rust и JavaScript.
- ^ «web_sys — Руст» . docs.rs. Проверено 5 июня 2019 г.
Необработанные привязки API для веб-API. Это процедурно созданный контейнер из WebIDL браузера, который обеспечивает привязку ко всем API-интерфейсам, предоставляемым браузером в Интернете.
- ^ «Состояние WebAssembly 2023» . Скотт Логик. 18 октября 2023 г. Проверено 14 марта 2024 г.
- ^ «Wasm нуждается в улучшенной истории управления памятью · Проблема № 1397 · WebAssembly/design» . Гитхаб . Проверено 15 февраля 2021 г.
- ^ «WebAssembly/content-security-policy» . Гитхаб . Проверено 17 февраля 2021 г.
- ^ «948834 — хром — проект с открытым исходным кодом, способствующий развитию Интернета. — Монорельс» . bugs.chromium.org . Проверено 17 февраля 2021 г.
- ^ Jump up to: а б «Невозможно использовать WebAssembly в Chrome без unsafe-eval · Проблема № 7 · WebAssembly/content-security-policy» . Гитхаб . Проверено 17 февраля 2021 г.
- ^ Jump up to: а б с «Заплиб посмертно» . zaplib.com . Апрель 2022 года . Проверено 14 марта 2024 г.
- ^ Jump up to: а б с Нойманн, Роберт; Торо, Абель (19 апреля 2018 г.). «Майнинг в браузере: Coinhive и WebAssembly» . Форспойнт . Проверено 8 июня 2019 г.
- ^ Чимпану, Каталин (24 июня 2018 г.). «Изменения в WebAssembly могут сделать патчи браузера Meltdown и Spectre бесполезными» . Пипящий компьютер . Проверено 8 июня 2019 г.
- ^ Сандерс, Джеймс (25 июня 2018 г.). «Как непрозрачный код WebAssembly может увеличить риск онлайн-атак Spectre» . Технологическая республика . Проверено 9 июня 2019 г.
- ^ Р., Бхагьяшри (30 октября 2018 г.). «Google Chrome 70 теперь поддерживает потоки WebAssembly для создания многопоточных веб-приложений» . Пакт Паб . Проверено 9 июня 2019 г.
- ^ Jump up to: а б Лонкар, Айшвария; Чандраян, Сиддхеш (октябрь 2018 г.). «Тёмная сторона WebAssembly» . Вирусный бюллетень . Проверено 8 июня 2019 г.
- ^ Сегура, Жером (29 ноября 2017 г.). «Постоянный майнинг криптовалюты в ближайшем к вам браузере» . Вредоносные байты . Проверено 8 июня 2019 г.
- ^ «Недавнее исследование показало, что 50% веб-сайтов, использующих WebAssembly, применяют его в злонамеренных целях» . ИнфоQ . Проверено 3 ноября 2019 г.
- ^ Муш, Мариус; Ресснеггер, Кристиан; Джонс, Мартин; Рик, Конрад (июнь 2019 г.). «Новичок в Интернете: исследование распространенности WebAssembly в дикой природе». Обнаружение вторжений и вредоносных программ и оценка уязвимостей (PDF) . Конспекты лекций по информатике. Том. 11543. Обнаружение вторжений и вредоносных программ, оценка уязвимостей . стр. 23–42. дои : 10.1007/978-3-030-22038-9_2 . ISBN 978-3-030-22037-2 . S2CID 184482682 . Архивировано из оригинала (PDF) 26 июля 2022 года . Проверено 15 февраля 2022 г. Слайды (PDF) Архивировано 3 ноября 2019 г. в Wayback Machine.
- ^ Аарон Хилбиг, Дэниел Леманн и Майкл Прадель (апрель 2021 г.). «Эмпирическое исследование реальных двоичных файлов WebAssembly: безопасность, языки, варианты использования». (Архивировано в апреле 2021 г.) https://software-lab.org/publications/www2021.pdf.
- ^ Ватт, Конрад (8 января 2018 г.). «Механизация и проверка спецификации WebAssembly» . Материалы 7-й Международной конференции ACM SIGPLAN по сертифицированным программам и доказательствам . CPP 2018. Лос-Анджелес, Калифорния, США: ACM. стр. 53–65. дои : 10.1145/3167082 . ISBN 978-1-4503-5586-5 . S2CID 9401691 .
- ^ «Символическое выполнение WebAssembly в Мантикоре» . 31 января 2020 г. Проверено 10 февраля 2020 г.
- ^ «Репозиторий системного интерфейса WebAssembly» . Гитхаб /ВебАссембли . 10 февраля 2020 г.
- ^ «Дополнительная информация о возможностях» . Гитхаб . байткодальянс. 4 марта 2022 г.
- ^ «Стандартизация WASI: системный интерфейс для запуска WebAssembly вне Интернета — Mozilla Hacks — блог веб-разработчиков» . Mozilla Hacks — блог веб-разработчиков .
- ^ «Reference-sysroot Repo» . Гитхаб /ВебАссембли . 12 января 2020 г.
- ^ "wasm-c-api Repo" . Гитхаб /ВебАссембли . 3 февраля 2020 г.
- ^ Jump up to: а б «Среда выполнения WebAssembly «Wasmer» общедоступна» . ИнфоQ . Проверено 19 февраля 2021 г.
- ^ «Обоснование дизайна» . GitHub /WebAssembly/дизайн . 1 октября 2016 г.
- ^ «Переносимость — WebAssembly» . webassembly.org . Проверено 28 июля 2020 г.
- ^ «Соглашения — WebAssembly 1.0» . webassembly.github.io . Проверено 12 ноября 2019 г. .
- ^ «Введение — WebAssembly 1.0» . webassembly.github.io . Проверено 17 мая 2019 г.
- ^ «Инструкция — WebAssembly 1.0» . webassembly.github.io . Проверено 12 ноября 2019 г. .
- ^ Лайвли, Томас (19 февраля 2021 г.) [запрос на извлечение открыт 5 февраля 2021 г.]. «Окончательные коды операций от tlivily · Pull Request #452 · WebAssembly/simd · GitHub» . Байккод Альянс . Проверено 12 мая 2021 г. - через GitHub .
- ^ Делендик, Юрий (19 февраля 2021 г.) [Изменения SIMD внесены 19 февраля 2021 г.]. «Файл wasm-tools/expr.rs по адресу b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub» . Байккод Альянс . Проверено 12 мая 2021 г. - через GitHub .
- ^ «Обновить интерпретатор и текст с завершенными кодами операций от ngzhian · Запрос на извлечение № 486 · WebAssembly/simd» . Гитхаб . Проверено 14 мая 2021 г.
- ^ «ВебСборка/симд» . Гитхаб . Проверено 14 мая 2021 г.
- ^ WebAssembly/relaxed-simd , WebAssembly, 3 мая 2021 г. , получено 14 мая 2021 г.
- ^ «Как мы сделали JVM в 40 раз быстрее» . astojanov.github.io . Проверено 17 февраля 2021 г.
- ^ «Дорожная карта» . Веб-сборка . Март 2017.
- ^ Группа сообщества WebAssembly (январь 2020 г.). «Спецификация WebAssembly, версия 1.0» . Проверено 13 января 2020 г. .
- ^ «Сложенная инструкция» . Гитхаб . /WebAssembly/спец.
- ^ «Модули (Двоичные)» . ВебСборка 1.0 .
- ^ «Демо-версии WebAssembly Binary Toolkit (wabt)» . webassembly.github.io .
В эту статью включен текст из бесплатного контента . Лицензия Apache License 2.0 ( положение о лицензии/разрешение ). Текст взят из Text Format , jfbastien; Россберг-хром; крипкен; титцер; с3ттомпсон; код солнечной рыбы; Люквагнер; флагсор; энрикобацис; c3d; бинджи; Андреош, GitHub. Веб-сборка/дизайн.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Группа сообщества W3C
- Проектирование веб-сборки
- .wasm — двоичный файл WebAssembly.
- «WebAssembly» , веб-документы MDN — с информацией о совместимости браузера и спецификациях (WebAssembly JavaScript API)