Webassembly

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

WebAssembly
Изображение логотипа
Класс языка Expression-oriented[en]
Появился в 2015
Автор Консорциум Всемирной паутины
Разработчик
Расширение файлов .wast или .wasm
Выпуск 2.0.0 (1 июня 2022 года)
Система типов статическая
Испытал влияние Asm.js и Native Client
Лицензия Apache License 2.0
Сайт webassembly.org
Логотип Викисклада Медиафайлы на Викискладе

Программирование идёт на обычных статически типизированных языках, таких как Си, C++, C#, Rust, Go. Стековая виртуальная машина, исполняющая инструкции бинарного формата wasm, может быть запущена как в среде браузера, так и в серверной среде. Код на wasm — переносимое абстрактное синтаксическое дерево, что обеспечивает как более быстрый анализ, так и более эффективное выполнение в сравнении с JavaScript.

Проект стартовал 17 июня 2015 года, 15 марта 2016 года была продемонстрирована работа игры Angry Bots из набора примеров для Unity в браузере Chromium. Изначально проект основывался на asm.js и PNaCl. В марте 2017 года сообщество разработчиков достигло соглашения о бинарном формате, API для JavaScript и о эталонном интерпретаторе. В конце мая 2017 года команда проекта Chromium объявила о планах по отказу от PNaCl в пользу WebAssembly.

По состоянию на 2021 год группа, работающая над WebAssembly, включает разработчиков из Mozilla, Google, Microsoft и Apple, которые представляют на рынке четыре наиболее распространённых браузера — Firefox, Chrome, Microsoft Edge и Safari соответственно.

Существует расширение форматов TrueType/OpenType и типографского движка Harfbuzz, позволяющее писать рендеринг текста на WebAssembly. Полученный шрифт меньше по размеру, лучше стандартизован (ожидается меньше расхождений от движка к движку) и обрабатывается быстрее, чем традиционные таблицы OpenType. А некоторые эффекты — многослойный рендеринг цветного шрифта (сначала рисуются все глифы заднего плана, потом все переднего) или качественная сборка стиля арабской вязи «настали́к» — принципиально недостижимы таблицами OpenType.

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

Следующая таблица показывает три различных представления одного и того же исходного кода по мере трансляции его в wasm:

Исходный код на C (*.c) Линейный ассемблерный текст (*.wat) Байт-код WASM (*.wasm)
int factorial(int n) {   if (n == 0)     return 1;   else     return n * factorial(n-1); } 
get_local 0 i64.eqz if i64     i64.const 1 else     get_local 0     get_local 0     i64.const 1     i64.sub     call 0     i64.mul end 
20 00 50 04 7e 42 01 05 20 00 20 00 42 01 7d 10 00 7e 0b 

Компилятор внутри использует представление в виде s-выражения, которое содержит больше информации, чем линейный текст или байт-код. Например:

(module   (type $FUNCSIG$dd (func (param f64) (result f64)))   (import "global.Math" "exp" (func $exp (param f64) (result f64)))   (memory 256 256)   (export "memory" (memory 0))   (func $doubleExp (param $0 f64) (result f64)     (f64.mul       (call $exp         (get_local $0)       )       (f64.const 2)     )   )   (export "doubleExp" (func $doubleExp)) ) 

Поддержка

Компиляция в WebAssembly поддерживается для множества языков, реализация находится на разных стадиях:

  • Си и C++ — через набор инструментов Emscripten и Binaryen обеспечивается компиляция в asm.js и wasm, использует LLVM.
  • C# — через Avalonia, Blazor и Uno Platform (на основе mono).
  • Rust — экспериментальная поддержка компиляции в wasm поддерживается с версии 1.14.
  • Elixir и Erlang — через компилятор Lumen, разработанный специально для WebAssembly.
  • Go — экспериментальная поддержка компиляции в wasm поддерживается с версии 1.11.
  • TypeScript — через AssemblyScript.
  • D — LDC начиная с версии 1.11 поддерживает компиляцию и линковку кода на D напрямую в WebAssembly.
  • Lazarus — поддерживает сборку в WebAssembly
  • Kotlin — экспериментальная поддержка.

Поддержка в браузерах

Реализация WebAssembly есть во всех основных браузерах (кроме Internet Explorer) с конца 2017 года:

  • Google Chrome — wasm поддерживается с версии 57.
  • Mozilla FireFox — поддержка wasm появилась в версии 52.
  • Safari — поддерживается начиная с версии 11
  • Microsoft Edge — поддерживается начиная с версии 16.

По состоянию на июль 2021 год 94 % установленных браузеров поддерживают WebAssembly. Для устаревших браузеров существует полифил asm.js.

Примечания

Ссылки

Tags:

Webassembly ПредставлениеWebassembly ПоддержкаWebassembly Поддержка в браузерахWebassembly ПримечанияWebassembly СсылкиWebassemblyВсемирная паутинаКибербезопасностьКроссплатформенностьПолнота по ТьюрингуЯзык программирования низкого уровня

🔥 Trending searches on Wiki Русский:

Леди ГагаТроцкий, Лев ДавидовичOpenAIКошечкин, Василий ВладимировичИван ГрозныйСписок иностранных агентов (Россия)Крымская войнаКалифорнияЧелленджер 2Нисон, ЛиамШевчук, Юрий ЮлиановичОдессаИскусственный интеллектУкраинский языкРахмонов, Шавкат БахтибаевичПригожин, Евгений ВикторовичDassault Mirage 2000Распутин, Григорий ЕфимовичПочта Mail.ruБейл, КристианПравославная церковь УкраиныКабо, Ольга ИгоревнаКим Чен ЫнЧеремшаПаническая атакаКостомаров, Роман СергеевичКорейская Народно-Демократическая РеспубликаОртега, ДженнаТаблица математических символовТрамп, ДональдВавилон (фильм, 2022)Карнивал РоуИндияОрден МужестваЧёрная дыраСВОИС-3Тухель, ТомасДжилленхол, ДжейкБисексуальностьМоргенштернХасбикВладивостокСноуден, ЭдвардТ-72Мэрилин МонроWindowsGmailОвен (знак зодиака)СкарлатинаМилославская, СтасяРаспад СССРМихалков, Никита СергеевичНорвегияСталин, Иосиф ВиссарионовичАхмедов, Фархад Теймур оглыТеррористический акт в БесланеЯнковский, Олег ИвановичБиполярное расстройствоARMv8Петров, Александр Андреевич (актёр)СикераЕлизавета IIДудаев, Джохар МусаевичШейк, ИринаSteamМинетБортич, Александра НиколаевнаРумынияКит (фильм, 2022)Хопкинс, ЭнтониКрик 6Солнечная системаНазаров, Дмитрий ЮрьевичГоршенёв, Михаил ЮрьевичСеверный флот (группа)Герой Российской ФедерацииЛенин, Владимир Ильич🡆 More