WebAssembly: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
м Удаление шаблонов: {{нп5}}×1 |
|||
Строка 13: | Строка 13: | ||
Проект стартовал 17 июня 2015 года<ref>{{cite web |url=https://blogs.msdn.microsoft.com/mikeholman/2015/06/17/working-on-the-future-of-compile-to-web-applications/ |title=Working on the Future of Compile-to-Web Applications |date=2015-06-17 |publisher=Mike Holman's Blog |lang=en |accessdate=2017-06-07}}</ref>, 15 марта 2016 года была продемонстрирована работа игры Angry Bots из набора примеров для [[Unity (игровой движок)|Unity]] в браузере [[Chromium]]<ref>{{Cite web|url=https://hacks.mozilla.org/2016/03/a-webassembly-milestone/|title=A WebAssembly Milestone: Experimental Support in Multiple Browsers|last=Wagner|first=Luke|date=14 March 2016|website=Mozilla Hacks}}</ref>. Изначально проект основывался на [[asm.js]]<ref>{{cite web |url=http://2ality.com/2015/06/web-assembly.html |title=WebAssembly: a binary format for the web |work=②ality — JavaScript and more |date=2015-06-18 |lang=en}}</ref> и [[Native Client|PNaCl]]<ref name="ars">{{cite web |first=Peter|last=Bright|url=http://arstechnica.com/information-technology/2015/06/the-web-is-getting-its-bytecode-webassembly|title=The Web is getting its bytecode: WebAssembly|work=[[Ars Technica]]|publisher=[[Condé Nast]]|date=18 June 2015}}</ref>. В марте 2017 года сообщество разработчиков достигло соглашения о бинарном формате, API для JavaScript и о эталонном интерпретаторе. В конце мая 2017 года команда проекта Chromium объявила о планах по отказу от [[Native Client|PNaCl]] в пользу WebAssembly<ref>{{cite web |url=https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html |title=Goodbye PNaCl, Hello WebAssembly! |lang=en |date=2017-05-30 |accessdate=2017-06-10}}</ref>. |
Проект стартовал 17 июня 2015 года<ref>{{cite web |url=https://blogs.msdn.microsoft.com/mikeholman/2015/06/17/working-on-the-future-of-compile-to-web-applications/ |title=Working on the Future of Compile-to-Web Applications |date=2015-06-17 |publisher=Mike Holman's Blog |lang=en |accessdate=2017-06-07}}</ref>, 15 марта 2016 года была продемонстрирована работа игры Angry Bots из набора примеров для [[Unity (игровой движок)|Unity]] в браузере [[Chromium]]<ref>{{Cite web|url=https://hacks.mozilla.org/2016/03/a-webassembly-milestone/|title=A WebAssembly Milestone: Experimental Support in Multiple Browsers|last=Wagner|first=Luke|date=14 March 2016|website=Mozilla Hacks}}</ref>. Изначально проект основывался на [[asm.js]]<ref>{{cite web |url=http://2ality.com/2015/06/web-assembly.html |title=WebAssembly: a binary format for the web |work=②ality — JavaScript and more |date=2015-06-18 |lang=en}}</ref> и [[Native Client|PNaCl]]<ref name="ars">{{cite web |first=Peter|last=Bright|url=http://arstechnica.com/information-technology/2015/06/the-web-is-getting-its-bytecode-webassembly|title=The Web is getting its bytecode: WebAssembly|work=[[Ars Technica]]|publisher=[[Condé Nast]]|date=18 June 2015}}</ref>. В марте 2017 года сообщество разработчиков достигло соглашения о бинарном формате, API для JavaScript и о эталонном интерпретаторе. В конце мая 2017 года команда проекта Chromium объявила о планах по отказу от [[Native Client|PNaCl]] в пользу WebAssembly<ref>{{cite web |url=https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html |title=Goodbye PNaCl, Hello WebAssembly! |lang=en |date=2017-05-30 |accessdate=2017-06-10}}</ref>. |
||
По состоянию на |
По состоянию на 2021 год группа, работающая над WebAssembly, включает разработчиков из [[Mozilla]], [[Google (компания)|Google]], [[Microsoft]] и [[Apple]], которые представляют на рынке четыре наиболее распространённых браузера — [[Firefox]], [[Google Chrome|Chrome]], [[Microsoft Edge]] и [[Safari]] соответственно<ref name="ars"/>. По состоянию на июль 2021, 94% установленных браузеров поддерживают WebAssembly.<ref name="caniuse.com">{{cite web |title=WebAssembly |url=https://caniuse.com/wasm |work=Can I use |access-date=22 March 2020}}</ref> Но для старых браузеров Wasm может быть скомпилирован в asm.js с помощью Javascript [[:en:polyfill (programming)|polyfill]].<ref name="ars2015">{{Cite news|url=https://arstechnica.com/information-technology/2015/06/the-web-is-getting-its-bytecode-webassembly/|title=The Web is getting its bytecode: WebAssembly|last=Bright|first=Peter|date=18 June 2015|work=Ars Technica|access-date=23 December 2017|language=en-us}}</ref> |
||
== Представление == |
== Представление == |
Версия от 06:24, 13 ноября 2021
WebAssembly | |
---|---|
Класс языка | Expression-oriented[англ.] |
Появился в | 2015[2] |
Автор | Консорциум Всемирной паутины |
Разработчик | |
Расширение файлов |
.wast или .wasm [3] |
Выпуск | |
Система типов | статическая |
Испытал влияние | Asm.js и Native Client |
Лицензия | Apache License 2.0 |
Сайт | webassembly.org |
Медиафайлы на Викискладе |
WebAssembly (сокращённо wasm) — язык программирования низкого уровня для стековой виртуальной машины, спроектированный как портативная цель компиляции для высокоуровневых языков, таких как Си, C++, C#, Rust, Go. Стековая виртуальная машина, исполняющая инструкции бинарного формата wasm, может быть запущена как в среде браузера, так и в серверной среде. Код на wasm — переносимое абстрактное синтаксическое дерево, что обеспечивает как более быстрый анализ, так и более эффективное выполнение в сравнении с JavaScript.
Проект стартовал 17 июня 2015 года[4], 15 марта 2016 года была продемонстрирована работа игры Angry Bots из набора примеров для Unity в браузере Chromium[5]. Изначально проект основывался на asm.js[6] и PNaCl[7]. В марте 2017 года сообщество разработчиков достигло соглашения о бинарном формате, API для JavaScript и о эталонном интерпретаторе. В конце мая 2017 года команда проекта Chromium объявила о планах по отказу от PNaCl в пользу WebAssembly[8].
По состоянию на 2021 год группа, работающая над WebAssembly, включает разработчиков из Mozilla, Google, Microsoft и Apple, которые представляют на рынке четыре наиболее распространённых браузера — Firefox, Chrome, Microsoft Edge и Safari соответственно[7]. По состоянию на июль 2021, 94% установленных браузеров поддерживают WebAssembly.[9] Но для старых браузеров Wasm может быть скомпилирован в asm.js с помощью Javascript polyfill.[10]
Представление
Следующая таблица показывает три различных представления одного и того же исходного кода по мере трансляции его в wasm:
Исходный код на C | «линейный ассемблерный байт-код» | бинарный код 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 поддерживается для множества языков, реализация находится на разных стадиях[11]:
- Си и C++ — через набор инструментов Emscripten и Binaryen обеспечивается компиляция в asm.js и wasm, использует LLVM.
- C# — через Blazor и Uno Platform — на основе mono.
- Rust — экспериментальная поддержка компиляции в wasm поддерживается с версии 1.14[12].
- Elixir и Erlang — через компилятор Lumen, разработанный специально для WebAssembly[13].
- Go — экспериментальная поддержка компиляции в wasm поддерживается с версии 1.11[14].
- TypeScript — через AssemblyScript.
- D — LDC начиная с версии 1.11 поддерживает компиляцию и линковку кода на D напрямую в WebAssembly[15].
- Lazarus — поддерживает сборку в WebAssembly[16]
Поддержка в браузерах
Реализация WebAssembly есть во всех основных браузерах (кроме Internet Explorer) с конца 2017 года[17]:
- Google Chrome — wasm поддерживается с версии 57[18].
- Mozilla FireFox — поддержка wasm появилась в версии 52[19].
- Safari — поддерживается начиная с версии 11[20]
- Microsoft Edge — поддерживается начиная с версии 16[21].
На конец октября 2019 года WebAssembly поддерживается в 86,92 % используемых браузеров[22].
Примечания
- ↑ Release 2.0 — 2022.
- ↑ http://webassembly.org/roadmap/
- ↑ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
- ↑ Working on the Future of Compile-to-Web Applications (англ.). Mike Holman's Blog (17 июня 2015). Дата обращения: 7 июня 2017.
- ↑ Wagner, Luke A WebAssembly Milestone: Experimental Support in Multiple Browsers . Mozilla Hacks (14 марта 2016).
- ↑ WebAssembly: a binary format for the web (англ.). ②ality — JavaScript and more (18 июня 2015).
- ↑ 1 2 Bright, Peter The Web is getting its bytecode: WebAssembly . Ars Technica. Condé Nast (18 июня 2015).
- ↑ Goodbye PNaCl, Hello WebAssembly! (англ.) (30 мая 2017). Дата обращения: 10 июня 2017.
- ↑ WebAssembly . Can I use. Дата обращения: 22 марта 2020.
- ↑ Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica (англ.). Дата обращения: 23 декабря 2017.
- ↑ Awesome WebAssembly Languages
- ↑ Announcing Rust 1.14 (англ.) (22 декабря 2016). Дата обращения: 7 июня 2017.
- ↑ An alternative BEAM implementation, designed for WebAssembly: lumen/lumen. — 2019-12-06.
- ↑ Go 1.11 Release Notes - The Go Programming Language . tip.golang.org. Дата обращения: 16 июля 2018.
- ↑ Generating WebAssembly with LDC .
- ↑ WebAssembly - Free Pascal wiki . wiki.freepascal.org. Дата обращения: 15 мая 2020.
- ↑ WebAssembly support now shipping in all major browsers (англ.). The Mozilla Blog (13 ноября 2017). Дата обращения: 31 октября 2019.
- ↑ WebAssembly — Chrome Platform Status . Дата обращения: 7 июня 2017.
- ↑ Firefox 52: Introducing Web Assembly, CSS Grid and the Grid Inspector (англ.) (7 марта 2017). Дата обращения: 7 июня 2017.
- ↑ New WebKit Features in Safari 11 (англ.) (22 сентября 2017).
- ↑ Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16 (англ.) (31 октября 2017). Дата обращения: 14 ноября 2017.
- ↑ Can I use WebAssembly
Ссылки
- Официальный веб-сайт WebAssembly (англ.)
- WebAssembly Community Group
- WebAssembly Design
- Awesome wasm (англ.) — список ссылок по WebAssembly