Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

WebAssembly (т.е. базовая спецификация WebAssembly (тогда версия 1.0, 1.1 находится в черновике [9] ) и интерфейс JavaScript WebAssembly [10] ) стал рекомендацией Консорциума World Wide Web 5 декабря 2019 года [11] наряду с HTML , CSS и JavaScript . [12]

WebAssembly может поддерживать (по крайней мере теоретически) любой язык (например, скомпилированный или интерпретируемый) в любой операционной системе (с помощью соответствующих инструментов) [13], и на практике все наиболее популярные языки уже имеют хотя бы некоторый уровень поддержки.

Emscripten SDK может составить любой LLVM Поддержанные языки (такие как C , C ++ или Руст , среди прочих) исходного кода в двоичный файл , который работает в той же песочнице , как код JavaScript. [примечание 1] Emscripten предоставляет привязки для нескольких часто используемых интерфейсов среды, таких как WebGL . Нет прямого доступа к объектной модели документа (DOM); однако для этого можно создать прокси-функции, например, через stdweb, [18] web_sys, [19] и js_sys [20] при использовании языка Rust .

WebAssembly реализации обычно используют либо вперед-оф-времени (АОТ) или просто в срок (JIT) компиляции, но могут также использовать интерпретатор . В то время как наиболее известные в настоящее время реализации могут быть в веб-браузерах , существуют также реализации без браузера для общего использования, включая WebAssembly Micro Runtime [21] , проект Bytecode Alliance (с подпроектом iwasm code VM, поддерживающим "интерпретатор", прежде чем временная компиляция (AoT) и своевременная компиляция (JIT) » [22] ), Wasmtime, [23] и Wasmer. [13]

World Wide Web Consortium (W3C) поддерживает стандарт с взносами Mozilla , Microsoft , Google , Apple , , Fastly , Intel и Red Hat . [24] [21]

История [ править ]

WebAssembly первый был объявлен в 2015 году, [25] , а первая демонстрация выполнения Unity «s Злой Боты в Firefox , [26] Google Chrome , [27] и Microsoft пограничными . [28] Технологиями-предшественниками были asm.js от Mozilla и Google Native Client , [29] [30], а первоначальная реализация была основана на наборе функций asm.js. [31] Технология asm.js уже обеспечивает скорость выполнения кода, близкую к нативному [32] и может считаться жизнеспособной альтернативой для браузеров, которые не поддерживают WebAssembly или отключены по соображениям безопасности.

В марте 2017 года было объявлено, что разработка минимально жизнеспособного продукта (MVP) завершена, и завершился этап предварительного просмотра. [33] В конце сентября 2017 года Safari 11 был выпущен с поддержкой. В феврале 2018 года рабочая группа WebAssembly опубликовала три общедоступных рабочих проекта базовой спецификации, интерфейса JavaScript и веб-API. [34] [35] [36] [37]

Реализации [ править ]

Хотя WebAssembly изначально был разработан для обеспечения скорости выполнения кода, близкого к машинному, в веб-браузере, он считался ценным вне такового, в более общих контекстах. [38] [39] Поскольку среды выполнения WebAssembly (RE) представляют собой низкоуровневые виртуальные стековые машины (похожие на JVM или Flash VM ), которые могут быть встроены в хост-приложения, некоторые из них нашли способ создания автономных сред выполнения, таких как Wasmtime и Wasmer. . [8] [13]

Веб-браузеры[ редактировать ]

В ноябре 2017 года Mozilla объявила о поддержке «во всех основных браузерах» [40] после того, как WebAssembly был включен по умолчанию в Edge 16. [41] Поддержка включает мобильные веб-браузеры для iOS и Android. По состоянию на март 2021 года 93% установленных браузеров (93% браузеров для настольных компьютеров и 94% браузеров для мобильных устройств) поддерживают WebAssembly. [42] Но для старых браузеров Wasm можно скомпилировать в asm.js с помощью полифилла JavaScript . [43]

Компиляторы [ править ]

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

Emscripten компилирует C и C ++ в Wasm [33], используя Binaryen и LLVM в качестве бэкэнда. [46]

Начиная с версии 8, автономный Clang может компилировать C и C ++ в Wasm. [47]

Его первоначальная цель состоит в том, чтобы поддержать компиляции из C и C ++ , [48] , хотя поддержка других исходных языков , такие как Руст , .NET языки [49] [50] [45] и AssemblyScript [51] ( машинописи -подобные) также становится . После выпуска MVP планируется поддержка многопоточности и сборки мусора [52] [53], что сделает WebAssembly целью компиляции для языков программирования со сборкой мусора, таких как C # (поддерживается через Blazor ),F # (поддерживается через Bolero [54] с помощью Blazor), Python и даже JavaScript, где скорость своевременной компиляции браузера считается слишком низкой. Некоторые другие языки имеют некоторую поддержку, включая Python , [55] Java , [56] Julia , [57] [58] [59] Zig , [60] и Ruby , [61], а также Go . [62]

Ограничения [ править ]

  1. Как правило, WebAssembly не позволяет напрямую взаимодействовать с DOM . Все взаимодействие должно проходить через взаимодействие JavaScript.
  2. Многопоточность (хотя есть планы решить эту проблему).
  3. Сборка мусора (хотя есть планы решить эту проблему.)
  4. Соображения безопасности (обсуждаются ниже)

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

Все реализации (веб-браузеры) разрешают WebAssembly, если Content-Security-Policy не указан, или если используется "unsafe-eval", но в остальном основные веб-браузеры ведут себя по-другому. [64] На практике WebAssembly не может быть использован в Chrome без "unsafe-eval", [65] [66] пока доступен обходной путь рабочего потока. [67]

Соображения безопасности [ править ]

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

WebAssembly критиковали за упрощение сокрытия улик для авторов вредоносных программ , мошенников и фишинговых атак ; WebAssembly присутствует на компьютере пользователя только в скомпилированном виде, что «затрудняет обнаружение вредоносных программ». [72] Скорость и маскировка WebAssembly привели к его использованию для скрытого крипто-майнинга на устройстве посетителя веб-сайта. [72] [73] [68] Coinhive , ныне несуществующий сервис, облегчающий добычу криптовалюты в браузерах посетителей веб-сайтов, утверждает, что их «майнер использует WebAssembly и работает примерно на 65% производительности нативного майнера». [68] Исследование, проведенное в июне 2019 г.Technische Universität Braunschweig проанализировал использование WebAssembly на 1 миллионе лучших веб-сайтов Alexa и обнаружил, что в основном используется вредоносный крипто-майнинг, и на это вредоносное ПО приходится более половины изученных веб-сайтов, использующих WebAssembly. [74] [75] Исследование, проведенное в апреле 2021 года в Университете Штутгарта, показало, что с тех пор майнинг криптовалюты стал маргинальным, упав до менее 1% всех модулей WebAssembly, собранных из широкого спектра источников, включая 1 миллион лучших веб-сайтов Alex. [76]

Возможность эффективно скрывать большие объемы кода также может использоваться для отключения инструментов блокировки рекламы и обеспечения конфиденциальности, которые предотвращают веб-отслеживание, например Privacy Badger .

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

БЫЛ ЛИ Я[ редактировать ]

Системный интерфейс WebAssembly (WASI) - это простой интерфейс ( ABI и API ), разработанный Mozilla и предназначенный для переноса на любую платформу. [78] Он предоставляет POSIX- подобные функции, такие как файловый ввод-вывод, ограниченный безопасностью на основе возможностей . [79] [80] Есть также несколько других предлагаемых ABI / API. [81] [82]

WASI находится под влиянием CloudABI и Capsicum .

Соломон Хайкс, соучредитель Docker , написал в 2019 году: «Если бы WASM + WASI существовали в 2008 году, нам не нужно было бы создавать Docker. Вот насколько это важно. WebAssembly на сервере - это будущее вычислений». [83] Wasmer в версии 1.0 обеспечивает «контейнеризацию программного обеспечения, мы создаем универсальные двоичные файлы, которые работают где угодно без изменений, включая операционные системы, такие как Linux, macOS, Windows и веб-браузеры. Wasm автоматически помещает приложения в песочницу по умолчанию для безопасного выполнения». [83]

Технические характеристики[ редактировать ]

Среда хоста [ править ]

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

Виртуальная машина [ править ]

Wasm-код (двоичный код, т. Е. Байт-код) предназначен для запуска на портативной виртуальной стековой машине (ВМ). [84] Виртуальная машина разработана так, чтобы ее анализировать и выполнять быстрее, чем JavaScript, и иметь компактное представление кода. [48] Внешняя функциональность (например, системные вызовы ), которую может ожидать двоичный код Wasm, не предусмотрена стандартом. Скорее, он предоставляет способ доставки интерфейса через модули из среды хоста, в которой работает реализация виртуальной машины. [85] [8]

Программа Wasm [ править ]

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

Набор инструкций [ править ]

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

Используемые коды операций (в стандарте, означающие MVP) немного меньше 200 из 256 возможных, в то время как один из них - это код операции с префиксом SIMD для предложения WebAssembly SIMD (для параллельного ускорения), который добавляет 236 инструкций. [89] Эти коды операций SIMD также переносимы и транслируются, например, в x64 и ARM. Напротив, ни JVM Java (ни CIL ) не поддерживают SIMD на их уровне кода операции (хотя оба обеспечивают практическое параллельное ускорение SIMD), то есть в стандарте, но есть расширение, добавляющее встроенные функции для x64 SIMD, [90]это не было бы портативным, то есть нельзя было бы использовать на ARM или смартфонах. Смартфоны могут поддерживать SIMD, вызывая ассемблерный код с SIMD, и C # имеет аналогичную поддержку.

Представление кода [ править ]

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

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

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

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

(модуль (введите $ t0 (func (param i64) (result i64))) (func $ f0 (type $ t0) (param $ p0 i64) (результат i64) (если $ I0 (результат i64); $ I0 - неиспользуемое имя метки (i64.eqz (local.get $ p0)); имя $ p0 совпадает с 0 здесь (тогда (i64.const 1)) (еще (i64.mul (local.get $ p0) (вызовите $ f0; имя $ f0 здесь то же, что и 0 (i64.sub (local.get $ p0) (i64.const 1))))))))

Обратите внимание, что модуль неявно генерируется компилятором. На функцию фактически ссылается запись таблицы типов в двоичном файле, следовательно, раздел типов и typeгенерируемый декомпилятором. [94] Компилятор и декомпилятор доступны в Интернете. [95]

Литература [ править ]

  • Хаас, Андреас; Россберг, Андреас; Шафф, Дерек Л .; Titzer, Ben L .; Гохман, Дэн; Вагнер, Люк; Закай, Алон; Bastien, JF; Холман, Майкл (июнь 2017 г.). «Повышение скорости Интернета с помощью WebAssembly» . Труды 38-й конференции ACM SIGPLAN по проектированию и реализации языков программирования . Ассоциация вычислительной техники: 185–200. DOI : 10.1145 / 3062341.3062363 . ISBN 9781450349888.
  • Ватт, Конрад (2018). «Механизация и проверка спецификации WebAssembly» (PDF) . ACM SIGPLAN Международная конференция по сертифицированным программам и доказательствам . ACM. 7 : 53–65. DOI : 10.1145 / 3167082 . ISBN 9781450355865. S2CID  9401691 .

Заметки [ править ]

  1. ^ Согласно официальной документации, Emscripten SDK может использоваться для создания.wasmфайлов, которые затем могут быть запущены в веб-браузере. [14] [15] [16] Несмотря на то, что Emscripten может использовать различные языки при использовании Clang , могут возникнуть некоторые проблемы. [17]

Ссылки [ править ]

  1. ^ "WebAssembly / дизайн / Semantics.md" . GitHub . Проверено 23 февраля 2021 года . Код WebAssembly можно рассматривать как машину со структурированным стеком ; машина, на которой в большинстве вычислений используется стек значений, но поток управления выражается в структурированных конструкциях, таких как блоки, ifs и циклы. На практике реализации не должны поддерживать ни фактический стек значений, ни фактические структуры данных для управления; им нужно только вести себя так, как если бы они это делали.
  2. ^ «Введение - WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 . WebAssembly - это открытый стандарт ...
  3. ^ «Введение - WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 . WebAssembly - это ... формат кода
  4. ^ a b «Соглашения - WebAssembly 1.0» . webassembly.github.io . Дата обращения 17 мая 2019 . WebAssembly - это язык программирования, который имеет несколько конкретных представлений (его двоичный формат и текстовый формат). Оба соответствуют общей структуре.
  5. ^ «Введение - WebAssembly 1.0» . webassembly.github.io . Проверено 18 июня 2019 . ... эта спецификация дополняется дополнительными документами, определяющими интерфейсы для конкретных сред внедрения, таких как Интернет. Каждый из них будет определять программный интерфейс приложения (API) WebAssembly, подходящий для данной среды.
  6. ^ «Введение - WebAssembly 1.1» . webassembly.github.io . Проверено 19 февраля 2021 года . Его основная цель состоит в том, чтобы обеспечить работу высокопроизводительных приложений в Интернете, но он не делает никаких предположений, специфичных для сети, и не предоставляет специфических для сети функций, поэтому его можно использовать и в других средах.
  7. ^ Хаас, Андреас; Россберг, Андреас; Шафф, Дерек Л .; Titzer, Ben L .; Холман, Майкл; Гохман, Дэн; Вагнер, Люк; Закай, Алон; Бастьен, Дж. Ф. (14 июня 2017 г.). «Повышение скорости Интернета с помощью WebAssembly» . Уведомления SIGPLAN . 52 (6): 185–200. DOI : 10.1145 / 3140587.3062363 . ISSN 0362-1340 . Хотя Интернет является основной мотивацией для WebAssembly, ничто в его дизайне не зависит от Интернета или среды JavaScript. Это открытый стандарт, специально разработанный для встраивания в различные контексты, и мы ожидаем, что в будущем станут доступны автономные реализации. 
  8. ^ a b c «Вне Интернета: автономные двоичные файлы WebAssembly с использованием Emscripten · V8» . v8.dev . Проверено 28 июля 2020 .
  9. ^ "Спецификация WebAssembly - WebAssembly 1.1" . webassembly.github.io . Проверено 22 марта 2021 года .
  10. ^ "Интерфейс JavaScript WebAssembly" . www.w3.org . Проверено 24 июня 2020 .
  11. ^ Консорциум World Wide Web. «Базовая спецификация WebAssembly» . Консорциум World Wide Web (W3) . Проверено 9 декабря 2019 .
  12. ^ Куриоль, Бруно. «WebAssembly 1.0 становится рекомендацией W3C и четвертым языком для встроенной поддержки в браузерах» . infoq.com . Проверено 9 декабря 2019 .
  13. ^ a b c "Wasmer - универсальная среда выполнения WebAssembly" . wasmer.io . Проверено 19 февраля 2021 года . Скомпилируйте все в WebAssembly. Запустите его на любой ОС или вставьте на другие языки.
  14. ^ «Руководство разработчика - WebAssembly» . webassembly.org . Проверено 10 июня 2019 .
  15. ^ «Компиляция нового модуля C / C ++ для WebAssembly» . Веб-документы MDN . Проверено 10 июня 2019 .
  16. ^ «Сборка в WebAssembly - документация Emscripten 1.38.33» . emscripten.org . Проверено 10 июня 2019 .
  17. ^ "Написание библиотеки C для Wasm | Web" . Разработчики Google . Проверено 10 июня 2019 .
  18. ^ "stdweb - Ржавчина" . docs.rs . Дата обращения 5 июня 2019 . Цель этого ящика - обеспечить привязку Rust к веб-API и обеспечить высокую степень взаимодействия между Rust и JavaScript.
  19. ^ "web_sys - Ржавчина" . docs.rs . Дата обращения 5 июня 2019 . Необработанные привязки API для веб-API. Это процедурно сгенерированный ящик из браузера WebIDL, который обеспечивает привязку ко всем API, предоставляемым браузером в Интернете.
  20. ^ "js_sys - Ржавчина" . docs.rs . Дата обращения 5 июня 2019 . Привязки к стандартным встроенным объектам JavaScript, включая их методы и свойства.
  21. ^ a b «Новый альянс байт-кода приносит безопасность, повсеместность и функциональную совместимость Интернета в мир повсеместных вычислений» . Mozilla . 12 ноября 2019 . Проверено 27 мая 2019 .
  22. ^ bytecodealliance / wasm-micro-runtime , Bytecode Alliance, 19 февраля 2021 г. , получено 19 февраля 2021 г.
  23. ^ «Wasmtime - небольшая и эффективная среда выполнения для WebAssembly и WASI» . wasmtime.dev . Проверено 18 декабря 2020 года .
  24. Брайт, Питер (18 июня 2015 г.). «Интернет получает свой байт-код: WebAssembly» . Ars Technica . Condé Nast .
  25. ^ "Ошибка запуска" . GitHub / WebAssembly / дизайн . 11 июня 2015.
  26. Вагнер, Люк (14 марта 2016 г.). «Веха WebAssembly: экспериментальная поддержка в нескольких браузерах» . Mozilla Hacks .
  27. Томпсон, Сет (15 марта 2016 г.). «Экспериментальная поддержка WebAssembly в V8» . Блог V8 .
  28. Чжу, Лимин (15 марта 2016 г.). «Предварительный просмотр экспериментов WebAssembly в Microsoft Edge» . Блог разработчиков Microsoft Edge .
  29. ^ Lardinois, Фредерик (17 июня 2015). «Google, Microsoft, Mozilla и другие объединились, чтобы запустить WebAssembly, новый двоичный формат для Интернета» . TechCrunch . Проверено 24 декабря 2017 года .
  30. Аврам, Авель (31 мая 2017 г.). «Google прекращает поддержку PNaCl» . InfoQ . Проверено 22 декабря 2017 года .
  31. ^ «WebAssembly: двоичный формат для Интернета» . Ality - JavaScript и многое другое . 18 июня 2015.
  32. ^ «Смотря на Солнце: Dalvik против ASM.js против Native» . blog.mozilla.org . Проверено 7 декабря 2019 . Даже если отбросить ту оценку, в которой asm.js оказался лучше, он выполняется примерно на 70% от скорости собственного кода C ++.
  33. ^ a b Криль, Пол (6 марта 2017 г.). «Теперь WebAssembly готов к использованию в браузерах» . InfoWorld . Проверено 23 декабря 2017 года .
  34. ^ "Первые общедоступные рабочие проекты WebAssembly" . W3C. 15 февраля 2018 . Проверено 20 апреля 2018 года .
  35. ^ «Базовая спецификация WebAssembly» . W3C. 15 февраля 2018 . Проверено 20 апреля 2018 года .
  36. ^ "Интерфейс JavaScript WebAssembly" . W3C. 15 февраля 2018 . Проверено 20 апреля 2018 года .
  37. ^ "WebAssembly Web API" . W3C. 15 февраля 2018 . Проверено 20 апреля 2018 года .
  38. ^ "Не-веб-вложения" . WebAssembly . Дата обращения 15 мая 2019 .
  39. ^ "Не-веб-вложения" . GitHub / WebAssembly . Дата обращения 15 мая 2019 .
  40. ^ «Поддержка WebAssembly теперь доступна во всех основных браузерах» . Блог Mozilla . Проверено 21 ноября 2017 года .
  41. ^ «Представляем новую оптимизацию JavaScript, WebAssembly, SharedArrayBuffer и Atomics в EdgeHTML 16» . Блог разработчиков Microsoft Edge . 31 октября 2017 . Проверено 21 ноября 2017 года .
  42. ^ "WebAssembly" . Могу я использовать . Проверено 22 марта 2020 .
  43. Брайт, Питер (18 июня 2015 г.). «Интернет получает свой байт-код: WebAssembly» . Ars Technica . Проверено 23 декабря 2017 года .
  44. Болл, Кевин (26 июня 2018 г.). «Как WebAssembly ускоряет будущее веб-разработки» . Архивировано из оригинального 12 февраля 2019 года . Проверено 22 октября 2018 года .
  45. ^ a b «Превосходные языки WebAssembly» . 26 июня 2018. Архивировано из оригинала 12 февраля 2019 года . Проверено 12 февраля 2019 .
  46. ^ Закай, Алон [@kripken] (21 октября 2019 г.). «Emscripten по умолчанию переключился на бэкэнд wasm верхнего уровня LLVM! / Подробности: https: //groups.google.com/forum/#! Topic / emscripten-Discussion / NpxVAOirSl4…» (твит) . Проверено 22 октября 2019 г. - через Twitter .
  47. ^ «Примечания к выпуску LLVM 8.0.0 - документация по LLVM 8» . releases.llvm.org . Проверено 22 октября 2019 года .
  48. ^ a b «Цели высокого уровня WebAssembly» . GitHub / WebAssembly / дизайн . 11 декабря 2015.
  49. ^ Криль, Пол (29 ноября 2017). «Прямая компиляция WebAssembly приходит на язык Rust» . InfoWorld . Проверено 24 декабря 2017 года .
  50. ^ «Часто задаваемые вопросы (FAQ) о Blazor» . blazor.net . Проверено 18 июня 2018 .
  51. ^ AssemblyScript / assemblyscript , проект AssemblyScript, 9 сентября 2020 г. , получено 9 сентября 2020 г.
  52. ^ Криль, Пол (26 октября 2017). «Что будет дальше с WebAssembly: сборщик мусора, потоки, отладка» . TechWorld . Проверено 24 декабря 2017 года .
  53. ^ «🛤 Сборка мусора · Проблема №16 · WebAssembly / предложения» . GitHub . Проверено 25 июля 2019 .
  54. ^ «Болеро: F # в WebAssembly» . fsbolero.io . Проверено 25 июля 2019 .
  55. ^ «Pyodide: перенос научного стека Python в браузер - Mozilla Hacks - блог веб-разработчиков» . Mozilla Hacks - блог веб-разработчиков . Дата обращения 9 сентября 2020 .
  56. ^ «Mozilla пытается сделать Java так, как она должна быть - со спецификацией WASI для всех устройств, компьютеров и операционных систем» . www.theregister.com . Дата обращения 6 октября 2020 .
  57. ^ «Юлия в браузере» . nextjournal.com . Проверено 9 апреля 2019 .
  58. ^ "Платформа WebAssembly от tshort · Запрос на извлечение №2 · JuliaPackaging / Yggdrasil" . GitHub . Проверено 9 апреля 2019 .
  59. Fischer, Keno (22 июля 2019 г.), GitHub - Keno / julia-wasm: Запуск julia на wasm. , получено 25 июля 2019
  60. ^ «Документация - Язык программирования Zig» . ziglang.org .
  61. ^ "MRuby в вашем браузере" . ruby.dj . Проверено 25 июля 2019 .
  62. ^ "golang / go" . GitHub . Проверено 19 февраля 2021 года .
  63. ^ «Wasm нуждается в лучшей истории управления памятью. · Проблема № 1397 · WebAssembly / design» . GitHub . Проверено 15 февраля 2021 года .
  64. ^ "WebAssembly / контент-безопасность-политика" . GitHub . Проверено 17 февраля 2021 года .
  65. ^ «948834 - chromium - проект с открытым исходным кодом, помогающий продвигать Интернет вперед. - Монорельс» . bugs.chromium.org . Проверено 17 февраля 2021 года .
  66. ^ «Невозможно использовать WebAssembly в Chrome без 'unsafe-eval' · Проблема №7 · WebAssembly / content-security-policy» . GitHub . Проверено 17 февраля 2021 года .
  67. ^ «Невозможно использовать WebAssembly в Chrome без 'unsafe-eval' · Проблема №7 · WebAssembly / content-security-policy» . GitHub . Проверено 17 февраля 2021 года .
  68. ^ a b c Нойман, Роберт; Торо, Абель (19 апреля 2018 г.). «Майнинг в браузере: Coinhive и WebAssembly» . Точка силы . Проверено 8 июня 2019 .
  69. ^ Cimpanu, Каталин (24 июня 2018). «Изменения в WebAssembly могут сделать патчи браузера Meltdown и Spectre бесполезными» . Пищевой компьютер . Проверено 8 июня 2019 .
  70. Сандерс, Джеймс (25 июня 2018 г.). «Как непрозрачный код WebAssembly может увеличить риск атак Spectre в Интернете» . Tech Republic . Проверено 9 июня 2019 .
  71. ^ R, Bhagyashree (30 октября 2018). «Google Chrome 70 теперь поддерживает потоки WebAssembly для создания многопоточных веб-приложений» . Packt Pub . Проверено 9 июня 2019 .
  72. ^ а б Лонкар, Айшвария; Чандраян, Сиддхеш (октябрь 2018 г.). «Темная сторона WebAssembly» . Вирусный бюллетень . Проверено 8 июня 2019 .
  73. Сегура, Жером (29 ноября 2017 г.). «Постоянный попутный майнинг криптовалюты в ближайшем к вам браузере» . Malwarebytes . Проверено 8 июня 2019 .
  74. ^ «По оценкам недавнего исследования, 50% веб-сайтов, использующих WebAssembly, применяют его для злонамеренных целей» . InfoQ . Дата обращения 3 ноября 2019 .
  75. ^ Муш, Мариус; Вресснеггер, Кристиан; Джонс, Мартин; Рик, Конрад (июнь 2019 г.). «Новичок в сети: исследование распространенности WebAssembly в дикой природе (заархивировано 21 октября 2019 г.)». Обнаружение вторжений и вредоносных программ, а также оценка уязвимостей (PDF) . Конспект лекций по информатике. 11543 . Обнаружение вторжений и вредоносного ПО, а также оценка уязвимости . С. 23–42. DOI : 10.1007 / 978-3-030-22038-9_2 . ISBN  978-3-030-22037-2. Проверено 4 ноября 2019 года . Слайды (PDF)
  76. Аарон Хилбиг, Даниэль Леманн и Майкл Прадель (апрель 2021 г.). «Эмпирическое исследование реальных двоичных файлов WebAssembly: безопасность, языки, сценарии использования». (Архивировано в апреле 2021 г.) https://software-lab.org/publications/www2021.pdf
  77. ^ «Символическое выполнение WebAssembly в Мантикоре» . 31 января 2020 . Дата обращения 10 февраля 2020 .
  78. ^ "Репозиторий системного интерфейса WebAssembly" . GitHub / WebAssembly . 10 февраля 2020.
  79. ^ «Дополнительная информация о возможностях» . GitHub . bytecodealliance.
  80. ^ «Стандартизация WASI: системный интерфейс для запуска WebAssembly вне сети - Mozilla Hacks - блог веб-разработчиков» . Mozilla Hacks - блог веб-разработчиков .
  81. ^ "reference-sysroot Repo" . GitHub / WebAssembly . 12 января 2020.
  82. ^ "wasm-c-api Repo" . GitHub / WebAssembly . 3 февраля 2020.
  83. ^ a b "Среда выполнения WebAssembly" Wasmer "общедоступна" . InfoQ . Проверено 19 февраля 2021 года .
  84. ^ «Обоснование дизайна» . GitHub / WebAssembly / дизайн . 1 октября 2016 г.
  85. ^ «Переносимость - WebAssembly» . webassembly.org . Проверено 28 июля 2020 .
  86. ^ «Соглашения - WebAssembly 1.0» . webassembly.github.io . Проверено 12 ноября 2019 .
  87. ^ «Введение - WebAssembly 1.0» . webassembly.github.io . Дата обращения 17 мая 2019 .
  88. ^ «Инструкции - WebAssembly 1.0» . webassembly.github.io . Проверено 12 ноября 2019 .
  89. ^ "Окончательные коды операций tlively · Запрос на извлечение # 452 · WebAssembly / simd" . GitHub . Проверено 17 февраля 2021 года .
  90. ^ «Как мы сделали JVM в 40 раз быстрее» . astojanov.github.io . Проверено 17 февраля 2021 года .
  91. ^ «Дорожная карта» . WebAssembly . Март 2017 г.
  92. ^ Группа сообщества WebAssembly (январь 2020 г.). «Версия 1.0 спецификации WebAssembly» . Проверено 13 января 2020 года .
  93. ^ "Сложенные инструкции" . GitHub . / WebAssembly / spec
  94. ^ «Модули (двоичные)» . WebAssembly 1.0 .
  95. ^ «Демоверсии WebAssembly Binary Toolkit (wabt)» . webassembly.github.io .

 Эта статья включает текст из бесплатного контента . Под лицензией Apache License 2.0 Лицензионное заявление / разрешение на Wikimedia Commons . Текст взят из Text Format , jfbastien; Россберг-хром; крипкен; титзер; s3thompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; бинджи; andrewosh, GitHub. WebAssembly / дизайн. Чтобы узнать, как добавить открытый текст лицензии в статьи Википедии, см. Эту страницу с инструкциями . Информацию о повторном использовании текста из Википедии см. В условиях использования .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Группа сообщества W3C
  • WebAssembly Дизайн
  • "WebAssembly" , MDN Web Docs - с информацией о совместимости и спецификациях браузеров (WebAssembly JavaScript API)