stringtranslate.com

Веб-сборка

WebAssembly ( Wasm ) определяет переносимый формат двоичного кода и соответствующий текстовый формат для исполняемых программ [2], а также программные интерфейсы для облегчения связи между такими программами и их хост-средой. [3] [4] [5] [6]

Основная цель WebAssembly — способствовать созданию высокопроизводительных приложений на веб-страницах , но он также разработан для использования в не-веб-средах. [7] Это открытый стандарт [8] [9], предназначенный для поддержки любого языка в любой операционной системе, [10] и на практике многие из самых популярных языков уже имеют по крайней мере некоторый уровень поддержки.

Анонсированный в 2015 году и впервые выпущенный в марте 2017 года , WebAssembly стал рекомендацией Консорциума Всемирной паутины 5 декабря 2019 года [11] [12] [13] и получил премию Programming Languages ​​Software Award от ACM SIGPLAN в 2021 году. [14] Консорциум Всемирной паутины (W3C) поддерживает стандарт при участии Mozilla , Microsoft , Google , Apple , Fastly , Intel и Red Hat . [15] [16] ( 2015 ) ( 2017-03 )

История

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

WebAssembly был впервые анонсирован в 2015 году [17], а первой демонстрацией стало выполнение Unity 's Angry Bots в Firefox , [18], Google Chrome , [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 опубликовала три общедоступных рабочих проекта для Core Specification, JavaScript Interface и Web API. [27] [28] [29] [30]

В июне 2019 года был выпущен Chrome 75 с потоками WebAssembly, включенными по умолчанию. [31]

С апреля 2022 года WebAssembly 2.0 находился в стадии черновика [32] [33], в который было добавлено множество инструкций, связанных с SIMD , и новый тип данных v128 с возможностью функций возвращать несколько значений, а также инициализировать/копировать массовую память.

Реализации

Хотя WebAssembly изначально был разработан для обеспечения скорости выполнения кода, близкой к скорости машинного кода в веб-браузере, он считался ценным и за его пределами, в более общих контекстах. [34] [35] Поскольку среды выполнения WebAssembly (RE) представляют собой низкоуровневые виртуальные стековые машины (похожие на JVM или Flash VM ), которые могут быть встроены в хост-приложения, некоторые реализации создают автономные среды выполнения, такие как Wasmtime  и Wasmer  . [9] [10] Среды выполнения WebAssembly встроены в серверы приложений для размещения «серверных» приложений WebAssembly и в другие приложения для поддержки архитектур расширений программного обеспечения на основе подключаемых модулей , например, «WebAssembly для прокси» (proxy-wasm), которая определяет ABI на основе WebAssembly для расширения прокси-серверов . [36] [37]

Веб-браузеры

В ноябре 2017 года Mozilla заявила о поддержке «во всех основных браузерах» [38] после того, как WebAssembly был включен по умолчанию в Edge 16. [39] Эта поддержка также включает мобильные веб-браузеры для iOS и Android. По состоянию на март 2024 года 99% отслеживаемых веб-браузеров поддерживают WebAssembly (версия 1.0), [40] больше, чем для его предшественника asm.js. [ 41] Для некоторых расширений из проекта стандарта 2.0 поддержка может быть ниже, но все равно более 90% веб-браузеров могут уже поддерживать, например, для расширения ссылочных типов. [42]

Компиляторы

Реализации WebAssembly обычно используют либо компиляцию до начала (AOT), либо компиляцию точно в срок (JIT), но также могут использовать интерпретатор . Хотя первые реализации появились в веб-браузерах , существуют также небраузерные реализации для общего назначения, включая Wasmer, [10] Wasmtime [43] или WAMR, [16] wasm3, WAVM и многие другие. [44]

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

Emscripten компилирует C и C++ в Wasm [26], используя Binaryen и LLVM в качестве бэкэнда. [47] Emscripten SDK может компилировать исходный код любого языка, поддерживаемого LLVM (например , C , C++ или Rust и т. д.), в двоичный файл, который запускается в той же «песочнице», что и код JavaScript. [примечание 1] Emscripten предоставляет привязки для нескольких часто используемых интерфейсов среды, таких как WebGL .

Начиная с версии 8, автономный Clang может компилировать C и C++ в Wasm. [52] Первоначальной целью была поддержка компиляции из C и C++ , [53] хотя также появляется поддержка других исходных языков, таких как Rust , языки .NET [54] [55] [46] и AssemblyScript [56] ( подобные TypeScript ).

После выпуска MVP WebAssembly добавил поддержку многопоточности и сборки мусора , [57] что позволило более эффективно компилировать языки программирования со сборкой мусора, такие как C# (поддерживается через Blazor ), F# (поддерживается через Bolero [58] с помощью Blazor) и Python . [59]

Некоторые другие языки имеют некоторую поддержку, включая Python , [60] Julia , [61] [62] [63] Ruby [64] и Ring . [65] [66]

Ряд систем могут компилировать Java и другие языки JVM в JavaScript и WebAssembly. К ним относятся CheerpJ, [67] JWebAssembly [68] и TeaVM. [69] Kotlin напрямую поддерживает WebAssembly. [70] [71]

Ограничения

Веб-браузеры не позволяют коду WebAssembly напрямую манипулировать Document Object Model . Для этого код Wasm должен подчиняться JavaScript . [примечание 2]

В опросе разработчиков, проведенном в октябре 2023 года, менее половины из 303 участников были удовлетворены состоянием WebAssembly. Подавляющее большинство указало на необходимость улучшения в четырех областях: WASI, поддержка отладки, интеграция с JavaScript и API браузера, а также инструменты сборки. [74]

Для интенсивного выделения памяти в WebAssembly существуют «серьезные ограничения, которые делают невозможным надежное развертывание многих приложений в мобильных браузерах [...] В настоящее время выделение более ~300 МБ памяти не является надежным ни в Chrome на Android без использования специфичных для Chrome обходных путей, ни в Safari на iOS». [75]

Все основные браузеры разрешают WebAssembly, если Content-Security-Policy не указана или если используется «unsafe-eval», но в противном случае ведут себя по-разному. [76] Chrome требует «unsafe-eval», [77] [78] хотя рабочий поток может быть обходным решением. [78]

Соображения безопасности

В июне 2018 года исследователь безопасности представил возможность использования WebAssembly для обхода браузерных мер по смягчению уязвимостей Spectre и Meltdown после добавления поддержки потоков с общей памятью. Из-за этой проблемы разработчики WebAssembly приостановили эту функцию. [79] [80] [81] Однако для того, чтобы исследовать эти будущие расширения языка, Google Chrome добавил экспериментальную поддержку предложения потоков WebAssembly в октябре 2018 года. [82]

WebAssembly подвергался критике за то, что позволял разработчикам вредоносного ПО , мошенникам и фишинговым атакам с большей легкостью скрывать улики; WebAssembly присутствует на компьютере пользователя только в скомпилированной форме, что «[затрудняет] обнаружение вредоносного ПО». [83] Скорость и легкая возможность сокрытия в WebAssembly привели к его использованию для скрытого майнинга криптовалют на устройстве посетителя веб-сайта. [83] [84] [79] Coinhive , ныне несуществующий сервис, облегчающий майнинг криптовалют в браузерах посетителей веб-сайта, утверждает, что их «майнер использует WebAssembly и работает примерно с 65% производительности собственного майнера». [79] Исследование, проведенное в июне 2019 года Техническим университетом Брауншвейга, проанализировало использование WebAssembly на 1 миллионе лучших веб-сайтов Alexa и обнаружило, что преобладающим использованием был вредоносный майнинг криптовалюты, и что вредоносное ПО составляло более половины исследованных веб-сайтов, использующих WebAssembly. [85] [86] Исследование, проведенное в апреле 2021 года Университетом Штутгарта, показало, что с тех пор майнинг криптовалюты был отодвинут на второй план, упав до менее 1% всех модулей WebAssembly, собранных из широкого спектра источников, включая также 1 миллион лучших веб-сайтов Alexa. [87]

Поскольку WebAssembly поддерживает только структурированный поток управления , он пригоден для методов проверки безопасности, включая символическое выполнение . [88]

ВАСИ

WebAssembly System Interface (WASI) — это простой интерфейс ( ABI и API ), разработанный Mozilla и предназначенный для переносимости на любую платформу. [89] Он предоставляет функции, подобные POSIX , такие как файловый ввод-вывод, ограниченный безопасностью на основе возможностей . [90] [91] Существуют дополнительные предлагаемые ABI/API. [92] [93]

На WASI повлияли CloudABI и Capsicum . [ по мнению кого? ]

Соломон Хайкс, соучредитель Docker , написал в 2019 году: «Если бы WASM+WASI существовал в 2008 году, нам не пришлось бы создавать Docker. Вот насколько он важен. WebAssembly на сервере — это будущее вычислений». [94]

Спецификация

Хост-среда

Общий стандарт содержит основные спецификации для JavaScript API и сведения о внедрении. [5]

Виртуальная машина

Код Wasm (двоичный код, т. е. байт-код) предназначен для запуска на портативной виртуальной стековой машине (ВМ). [95] ВМ разработана для более быстрого анализа и выполнения, чем JavaScript, и для компактного представления кода. [53] Любая внешняя функциональность (например, системные вызовы ), которая может ожидаться двоичным кодом Wasm, не предусмотрена стандартом. Он скорее предоставляет способ предоставления интерфейса через модули хост-средой, в которой работает ВМ. [96] [9]

Программа Wasm

Программа Wasm разработана как отдельный модуль, содержащий наборы различных значений, определенных Wasm, и определений типов программ. Они предоставляются в двоичном или текстовом формате (см. ниже), которые имеют общую структуру. [97] Такой модуль может предоставлять функцию запуска, которая выполняется при создании экземпляра двоичного файла wasm.

Набор инструкций

Основной стандарт для двоичного формата программы Wasm определяет архитектуру набора инструкций (ISA), состоящую из определенных двоичных кодировок типов операций, которые выполняются виртуальной машиной (без указания того, как именно они должны выполняться). [98] Список инструкций включает стандартные инструкции загрузки/сохранения памяти, числовые, параметрические, инструкции управления потоком и инструкции переменных, специфичные для Wasm. [99]

Количество опкодов, используемых в исходном стандарте (MVP), было немного меньше 200 из 256 возможных опкодов. Последующие версии WebAssembly увеличили количество опкодов немного больше 200. Предложение WebAssembly SIMD (для параллельной обработки) вводит альтернативный префикс опкода (0xfd) для 128-битного SIMD. Конкатенация префикса SIMD и опкода, который допустим после префикса SIMD, образует опкод SIMD. Опкоды SIMD приносят дополнительные 236 инструкций для возможности SIMD «минимально жизнеспособного продукта» (MVP) (всего около 436 инструкций). [100] [101] Эти инструкции, «завершенные коды операций» [102], включены по умолчанию в Google V8 (в Google Chrome), движке SpiderMonkey в Mozilla Firefox и движке JavaScriptCore в Safari от Apple [103] , а также есть некоторые дополнительные предложения по инструкциям для более позднего «post SIMD MVP», и есть также отдельное предложение «relaxed-simd» на рассмотрении. [104]

Эти коды операций SIMD также переносимы и транслируются в собственные наборы инструкций, такие как x64 и ARM. Напротив, ни JVM Java , ни CIL не поддерживают SIMD на уровне кодов операций , т. е. в стандарте; оба имеют некоторые параллельные API, которые обеспечивают ускорение SIMD. Существует расширение для Java, добавляющее встроенные функции для x64 SIMD, [105] , которое непереносимо, т. е. не может использоваться на ARM или смартфонах. Смартфоны могут поддерживать SIMD, вызывая ассемблерный код с SIMD, и C# имеет аналогичную поддержку.

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

В марте 2017 года группа сообщества WebAssembly достигла консенсуса по первоначальному (MVP) двоичному формату, JavaScript API и эталонному интерпретатору. [106] Она определяет двоичный формат WebAssembly ( .wasm), который не предназначен для использования людьми, а также понятный человеку текстовый формат WebAssembly ( .wat), который напоминает нечто среднее между S-выражениями и традиционными языками ассемблера.

В таблице ниже показан пример функции факториала , написанной на языке C , и соответствующий ей код WebAssembly после компиляции, представленный как в текстовом формате .wat (текстовое представление WebAssembly, понятное человеку), так и в двоичном формате .wasm (необработанный байт-код , представленный ниже в шестнадцатеричном виде ), который выполняется веб-браузером или средой выполнения, поддерживающей WebAssembly.

Все целочисленные константы кодируются с использованием кодировки LEB128 переменной длины, которая экономит место . [107]

Текстовый формат WebAssembly более канонически записан в свернутом формате с использованием S-выражений . Для инструкций и выражений этот формат является чисто синтаксическим сахаром и не имеет поведенческих различий с линейным форматом. [108] С помощью wasm2watкод выше декомпилируется в:

( module  ( type  $t0  ( func  ( param  i64 )  ( result  i64 )))  ( func  $f0  ( type  $t0 )  ( param  $p0  i64 )  ( result  i64 )  ( if  $I0  ( result  i64 )  ;; $I0 — неиспользуемое имя метки  ( i64.eqz  ( local.get  $p0 ))  ;; имя $p0 здесь такое же, как 0  ( then  ( i64.const  1 ))  ( else  ( i64.mul  ( local.get  $p0 )  ( call  $f0  ;; имя $f0 здесь такое же, как 0  ( i64.sub  ( local.get  $p0 )  ( i64.const  1 ))))))))

Модуль неявно генерируется компилятором. Функция ссылается на запись таблицы типов в двоичном файле, отсюда раздел типов и typeвыдаваемый декомпилятором. [109] Компилятор и декомпилятор могут быть доступны онлайн. [110]

Смотрите также

Примечания

  1. ^ Согласно официальной документации, Emscripten SDK может использоваться для создания .wasmфайлов, которые затем могут быть выполнены в веб-браузере. [48] [49] [50] Несмотря на то, что Emscripten может использовать различные языки при использовании Clang , могут возникнуть некоторые проблемы. [51]
  2. ^ Для разработки Rust /Wasm сторонние библиотеки могут предоставить некоторые необходимые операции ввода-вывода JavaScript. [72] [73]

Ссылки

  1. ^ "WebAssembly/design/Semantics.md". GitHub . Получено 23 февраля 2021 г. Код WebAssembly можно считать структурированной стековой машиной ; машиной, в которой большинство вычислений используют стек значений, но поток управления выражается в структурированных конструкциях, таких как блоки, if и циклы. На практике реализации не должны поддерживать фактический стек значений или фактические структуры данных для управления; им нужно только вести себя так, как если бы они это делали.
  2. ^ Mozilla. «Понимание текстового формата WebAssembly». MDN Web Docs . Получено 9 декабря 2019 г.
  3. ^ "Введение — WebAssembly 1.0". webassembly.github.io . Получено 18 июня 2019 г. WebAssembly — это открытый стандарт...
  4. ^ "Введение — WebAssembly 1.0". webassembly.github.io . Получено 18 июня 2019 г. WebAssembly — это ... формат кода
  5. ^ ab "Conventions — WebAssembly 1.0". webassembly.github.io . Получено 17 мая 2019 г. WebAssembly — это язык программирования, имеющий несколько конкретных представлений (двоичный формат и текстовый формат). Оба соответствуют общей структуре.
  6. ^ "Введение — WebAssembly 1.0". webassembly.github.io . Получено 18 июня 2019 г. ... эта спецификация дополнена дополнительными документами, определяющими интерфейсы для конкретных сред встраивания, таких как Web. Каждый из них будет определять интерфейс прикладного программирования (API) WebAssembly, подходящий для данной среды.
  7. ^ "Введение — WebAssembly 1.1". webassembly.github.io . Получено 19 февраля 2021 г. Его главная цель — обеспечить высокопроизводительные приложения в Интернете, но он не делает никаких предположений, специфичных для Интернета, и не предоставляет специфичных для Интернета функций, поэтому его можно использовать и в других средах.
  8. ^ Хаас, Андреас; Россберг, Андреас; Шуфф, Дерек Л.; Титцер, Бен Л.; Холман, Майкл; Гоман, Дэн; Вагнер, Люк; Закай, Алон; Бастьен, Дж. Ф. (14 июня 2017 г.). «Bringing the Web Up to Speed ​​with WebAssembly». SIGPLAN Notices . 52 (6): 185–200. doi : 10.1145/3140587.3062363 . ISSN  0362-1340. Хотя Интернет является основной мотивацией для WebAssembly, ничто в его конструкции не зависит от Интернета или среды JavaScript. Это открытый стандарт, специально разработанный для встраивания в несколько контекстов, и мы ожидаем, что в будущем появятся автономные реализации.
  9. ^ abc "За пределами Интернета: автономные двоичные файлы WebAssembly с использованием Emscripten · V8". v8.dev . Получено 28 июля 2020 г. .
  10. ^ abc "Wasmer - The Universal WebAssembly Runtime". wasmer.io . Получено 19 февраля 2021 г. . Скомпилируйте все в WebAssembly. Запустите его на любой ОС или встройте в другие языки.
  11. ^ Консорциум Всемирной паутины. "Спецификация ядра WebAssembly". Консорциум Всемирной паутины (W3) . Получено 9 декабря 2019 г.
  12. ^ Куриоль, Бруно. «WebAssembly 1.0 становится рекомендацией W3C и четвертым языком, изначально работающим в браузерах». infoq.com . Получено 9 декабря 2019 г.
  13. ^ "Спецификация WebAssembly — WebAssembly 1.1". webassembly.github.io . Получено 22 марта 2021 г. .
  14. ^ «Премия за лучшее программное обеспечение для языков программирования». www.sigplan.org .
  15. Брайт, Питер (18 июня 2015 г.). «Сеть получает свой байт-код: WebAssembly». Ars Technica . Condé Nast .
  16. ^ ab "New Bytecode Alliance привносит безопасность, повсеместность и совместимость Интернета в мир всепроникающих вычислений". Mozilla . 12 ноября 2019 г. . Получено 27 мая 2019 г. .
  17. ^ "Ошибка запуска". GitHub / WebAssembly / design . 11 июня 2015 г.
  18. ^ Вагнер, Люк (14 марта 2016 г.). «Веха WebAssembly: экспериментальная поддержка в нескольких браузерах». Mozilla Hacks .
  19. ^ Томпсон, Сет (15 марта 2016 г.). «Экспериментальная поддержка WebAssembly в V8». Блог V8 .
  20. ^ Чжу, Лимин (15 марта 2016 г.). «Предварительный просмотр экспериментов WebAssembly в Microsoft Edge». Блог разработчиков Microsoft Edge .
  21. ^ Лардинуа, Фредерик (17 июня 2015 г.). «Google, Microsoft, Mozilla и другие объединяются для запуска WebAssembly — нового двоичного формата для Интернета». TechCrunch . Получено 24 декабря 2017 г.
  22. ^ Аврам, Абель (31 мая 2017 г.). «Google собирается прекратить поддержку PNaCl». InfoQ . Получено 22 декабря 2017 г.
  23. ^ «WebAssembly: двоичный формат для Интернета». ②ality – JavaScript и многое другое . 18 июня 2015 г.
  24. ^ "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org . Август 2013 г. Получено 7 декабря 2019 г. Даже если отбросить единственный результат, где asm.js показал себя лучше, он выполняется примерно на 70% от скорости собственного кода C++.
  25. ^ Арджун, Джангда, Абхинав Пауэрс, Бобби Бергер, Эмери Гуха (25 января 2019 г.). Не так быстро: анализ производительности WebAssembly по сравнению с машинным кодом. OCLC  1106328738.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  26. ^ ab Krill, Paul (6 марта 2017 г.). «WebAssembly теперь готов к использованию в браузерах». InfoWorld . Получено 23 декабря 2017 г. .
  27. ^ "WebAssembly First Public Working Drafts". W3C. 15 февраля 2018 г. Получено 20 апреля 2018 г.
  28. ^ "Спецификация ядра WebAssembly". W3C. 15 февраля 2018 г. Получено 20 апреля 2018 г.
  29. ^ "WebAssembly JavaScript Interface". W3C. 15 февраля 2018 г. Получено 20 апреля 2018 г.
  30. ^ "WebAssembly Web API". W3C. 15 февраля 2018 г. Получено 20 апреля 2018 г.
  31. ^ "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com . Получено 19 февраля 2022 г. .
  32. ^ "Спецификация WebAssembly — WebAssembly 2.0 (черновик 01.09.2022)". webassembly.github.io . Получено 9 сентября 2022 г. .
  33. ^ "WebAssembly 2.0 First Public Working Drafts | W3C News". 19 апреля 2022 г. Получено 9 сентября 2022 г.
  34. ^ "Не-веб-внедрения". WebAssembly . Получено 15 мая 2019 г.
  35. ^ "Non-Web Embeddings". GitHub / WebAssembly . Получено 15 мая 2019 .
  36. ^ Freese, Danny (3 октября 2023 г.). «Proxy-Wasm: It's WebAssembly for Proxies». Блог. Kong . Получено 2024-05-06 .
  37. ^ "proxy-wasm/spec: WebAssembly для прокси (спецификация ABI)". GitHub . Получено 6 мая 2024 г. .
  38. ^ "Поддержка WebAssembly теперь доступна во всех основных браузерах". Блог Mozilla . Получено 21 ноября 2017 г.
  39. ^ "Представляем новые оптимизации JavaScript, WebAssembly, SharedArrayBuffer и Atomics в EdgeHTML 16". Блог разработчиков Microsoft Edge . 31 октября 2017 г. Получено 21 ноября 2017 г.
  40. ^ "WebAssembly | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". canIuse.com . Получено 1 марта 2024 г. .
  41. ^ "asm.js | Могу ли я использовать... Поддержка таблиц для HTML5, CSS3 и т. д.". caniuse.com . Получено 29 сентября 2024 г. .
  42. ^ "Типы ссылок WebAssembly | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 3 марта 2024 г. .
  43. ^ "Wasmtime — небольшая и эффективная среда выполнения для WebAssembly и WASI". wasmtime.dev . Получено 18 декабря 2020 г. .
  44. ^ "Дорожная карта" . Получено 7 декабря 2021 г.
  45. ^ Болл, Кевин (26 июня 2018 г.). «Как WebAssembly ускоряет будущее веб-разработки». Архивировано из оригинала 12 февраля 2019 г. Получено 22 октября 2018 г.
  46. ^ ab "Awesome WebAssembly Languages". GitHub . 26 июня 2018 г. Получено 15 февраля 2022 г.
  47. ^ Zakai, Alon [@kripken] (21 октября 2019 г.). «Emscripten переключился на базовую версию LLVM wasm по умолчанию! / Подробности: https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4» ( Твит ) . Получено 22 октября 2019 г. – через Twitter .
  48. ^ "Руководство разработчика - WebAssembly". webassembly.org . Получено 10 июня 2019 г. .
  49. ^ "Компиляция нового модуля C/C++ в WebAssembly". MDN Web Docs . Получено 10 июня 2019 г.
  50. ^ "Building to WebAssembly — Emscripten 1.38.33 documentation". emscripten.org . Получено 10 июня 2019 г. .
  51. ^ "Emscripting a C library to Wasm | Web". Google Developers . Получено 10 июня 2019 г.
  52. ^ "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org . Получено 22 октября 2019 г. .
  53. ^ ab "Высокоуровневые цели WebAssembly". GitHub / WebAssembly / design . 11 декабря 2015 г.
  54. ^ Крилл, Пол (29 ноября 2017 г.). «Прямая компиляция WebAssembly приходит в язык Rust». InfoWorld . Получено 24 декабря 2017 г. .
  55. ^ "Часто задаваемые вопросы (FAQ) о Blazor". blazor.net . Получено 18 июня 2018 г. .
  56. ^ AssemblyScript/assemblyscript, Проект AssemblyScript, 9 сентября 2020 г. , получено 9 сентября 2020 г.
  57. ^ "Сборка мусора WebAssembly (WasmGC) теперь включена по умолчанию в Chrome | Блог". Chrome для разработчиков . Получено 11 декабря 2023 г.
  58. ^ "Bolero: F# в WebAssembly". fsbolero.io . Получено 25 июля 2019 г. .
  59. ^ "Новый способ эффективного внедрения языков программирования со сборкой мусора в WebAssembly · V8". v8.dev . Получено 11 декабря 2023 г. .
  60. ^ "Pyodide: внедрение научного стека Python в браузер – Mozilla Hacks - блог веб-разработчиков". Mozilla Hacks – блог веб-разработчиков . Получено 9 сентября 2020 г.
  61. ^ "Джулия в браузере". nextjournal.com . Получено 9 апреля 2019 г. .
  62. ^ "Платформа WebAssembly от tshort · Запрос на извлечение № 2 · JuliaPackaging/Yggdrasil". GitHub . Получено 9 апреля 2019 г. .
  63. ^ Фишер, Кено (22 июля 2019 г.), GitHub - Keno/julia-wasm: Запуск julia на wasm. , получено 25 июля 2019 г.
  64. ^ "MRuby в вашем браузере". ruby.dj . Получено 25 июля 2019 .
  65. ^ Пол Крилл (24 августа 2020 г.). «Обновление языка Ring фокусируется на WebAssembly». InfoWorld .
  66. ^ "Ring in web browser" . Получено 17 августа 2024 г. .
  67. ^ "Компилятор Java to WebAssembly - CheerpJ" . Получено 27 апреля 2023 г.
  68. JWebAssembly, 27 апреля 2023 г. – через GitHub
  69. ^ "TeaVM — Обзор". www.teavm.org . Получено 27 апреля 2023 г. .
  70. ^ "Bringing Kotlin to the Web" . Получено 11 декабря 2023 г. .
  71. ^ Делёз, Себастьен (13 февраля 2023 г.). «Огромный потенциал Kotlin/Wasm». seb.deleuze.fr . Получено 11 декабря 2023 г. .
  72. ^ "stdweb - Rust". docs.rs . Получено 5 июня 2019 г. Цель этого крейта — предоставить привязки Rust к веб-API и обеспечить высокую степень взаимодействия между Rust и JavaScript.
  73. ^ "web_sys - Rust". docs.rs . Получено 5 июня 2019 г. Необработанные привязки API для веб-API. Это процедурно сгенерированный контейнер из браузера WebIDL, который обеспечивает привязку ко всем API, которые браузер предоставляет в сети.
  74. ^ "Состояние WebAssembly 2023". Scott Logic. 18 октября 2023 г. Получено 14 марта 2024 г.
  75. ^ "Wasm нуждается в лучшей истории управления памятью · Выпуск № 1397 · WebAssembly/design". GitHub . Получено 15 февраля 2021 г. .
  76. ^ "WebAssembly/content-security-policy". GitHub . Получено 17 февраля 2021 г. .
  77. ^ "948834 - chromium - Проект с открытым исходным кодом, помогающий двигать Интернет вперед. - Монорельс". bugs.chromium.org . Получено 17 февраля 2021 г. .
  78. ^ ab "Нет способа использовать WebAssembly в Chrome без 'unsafe-eval' · Проблема № 7 · WebAssembly/content-security-policy". GitHub . Получено 17 февраля 2021 г. .
  79. ^ abc Neumann, Robert; Toro, Abel (19 апреля 2018 г.). "Майнинг в браузере: Coinhive и WebAssembly". Forcepoint . Получено 8 июня 2019 г. .
  80. ^ Cimpanu, Catalin (24 июня 2018 г.). «Изменения в WebAssembly могут сделать бесполезными исправления Meltdown и Spectre Browser». Bleeping Computer . Получено 8 июня 2019 г.
  81. ^ Сандерс, Джеймс (25 июня 2018 г.). «Как непрозрачный код WebAssembly может увеличить риск атак Spectre в Интернете». Tech Republic . Получено 9 июня 2019 г.
  82. ^ R, Bhagyashree (30 октября 2018 г.). «Google Chrome 70 теперь поддерживает потоки WebAssembly для создания многопоточных веб-приложений». Packt Pub . Получено 9 июня 2019 г.
  83. ^ аб Лонкар, Айшвария; Чандраян, Сиддхеш (октябрь 2018 г.). «Темная сторона WebAssembly». Вирусный бюллетень . Проверено 8 июня 2019 г.
  84. ^ Сегура, Жером (29 ноября 2017 г.). «Постоянный драйв-майнинг криптовалюты в браузере рядом с вами». Malwarebytes . Получено 8 июня 2019 г.
  85. ^ "По последним оценкам исследования, 50% веб-сайтов, использующих WebAssembly, применяют его во вредоносных целях". InfoQ . Получено 3 ноября 2019 г. .
  86. ^ Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (июнь 2019 г.). «New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild». Обнаружение вторжений и вредоносных программ, а также оценка уязвимости (PDF) . Lecture Notes in Computer Science. Vol. 11543. Обнаружение вторжений и вредоносных программ, а также оценка уязвимости . стр. 23–42. doi :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
  87. ^ Аарон Хилбиг, Дэниел Леманн и Майкл Прадель (апрель 2021 г.). «Эмпирическое исследование реальных двоичных файлов WebAssembly: безопасность, языки, варианты использования». (Архивировано в апреле 2021 г.) https://software-lab.org/publications/www2021.pdf
  88. ^ Уотт, Конрад (8 января 2018 г.). «Механизация и проверка спецификации WebAssembly». Труды 7-й Международной конференции ACM SIGPLAN по сертифицированным программам и доказательствам. CPP 2018. Лос-Анджелес, Калифорния, США: ACM. стр. 53–65. doi :10.1145/3167082. ISBN 978-1-4503-5586-5. S2CID  9401691.
  89. ^ "WebAssembly System Interface Repo". GitHub / WebAssembly . 10 февраля 2020 г.
  90. ^ «Дополнительная информация о возможностях». GitHub . bytecodealliance. 4 марта 2022 г.
  91. ^ "Стандартизация WASI: системный интерфейс для запуска WebAssembly вне сети – Mozilla Hacks - блог веб-разработчиков". Mozilla Hacks – блог веб-разработчиков .
  92. ^ "reference-sysroot Repo". GitHub / WebAssembly . 12 января 2020 г.
  93. ^ "wasm-c-api Repo". GitHub / WebAssembly . 3 февраля 2020 г.
  94. Хайкс, Соломон (27 марта 2019 г.). «Соломон Хайкс о X». Twitter . Получено 29 сентября 2024 г. .
  95. ^ "Обоснование дизайна". GitHub / WebAssembly / design . 1 октября 2016 г.
  96. ^ "Переносимость - WebAssembly". webassembly.org . Получено 28 июля 2020 г. .
  97. ^ "Conventions — WebAssembly 1.0". webassembly.github.io . Получено 12 ноября 2019 г. .
  98. ^ "Введение — WebAssembly 1.0". webassembly.github.io . Получено 17 мая 2019 г. .
  99. ^ "Инструкции — WebAssembly 1.0". webassembly.github.io . Получено 12 ноября 2019 г. .
  100. ^ Lively, Thomas (19 февраля 2021 г.) [Запрос на извлечение открыт 05.02.2021]. "Final opcodes by tlively · Запрос на извлечение № 452 · WebAssembly/simd · GitHub". Bytecode Alliance . Получено 12 мая 2021 г. – через GitHub .
  101. ^ Делендик, Юрий (19 февраля 2021 г.) [Изменения SIMD внесены 19 февраля 2021 г.]. "Файл wasm-tools/expr.rs в b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance . Получено 12 мая 2021 г. – через GitHub .
  102. ^ "Обновить интерпретатор и текст с окончательными кодами операций от ngzhian · Запрос на извлечение № 486 · WebAssembly/simd". GitHub . Получено 14 мая 2021 г. .
  103. ^ "WebAssembly/simd". GitHub . Получено 14 мая 2021 г. .
  104. ^ WebAssembly/relaxed-simd, WebAssembly, 3 мая 2021 г. , получено 14 мая 2021 г.
  105. ^ "Как мы сделали JVM в 40 раз быстрее". astojanov.github.io . Получено 17 февраля 2021 г. .
  106. ^ "Дорожная карта". WebAssembly . Март 2017.
  107. ^ WebAssembly Community Group (январь 2020 г.). "WebAssembly Specification Release 1.0" . Получено 13 января 2020 г. .
  108. ^ "Сложенные инструкции". GitHub ./ WebAssembly / спецификация
  109. ^ "Модули (двоичные)". WebAssembly 1.0 .
  110. ^ "Демонстрации WebAssembly Binary Toolkit (wabt)". webassembly.github.io .

 В этой статье использован текст из свободного контента . Лицензия Apache License 2.0 (лицензионное заявление/разрешение). Текст взят из Text Format, jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/design.

Внешние ссылки