WebAssembly (сокращённо wasm) — язык программирования низкого уровня, призванный внести программируемость туда, где нужны кроссплатформенность, эффективность и безопасность, в первую очередь на клиентскую сторону Всемирной паутины.
WebAssembly | |
---|---|
Класс языка | Expression-oriented |
Появился в | 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 поддерживается для множества языков, реализация находится на разных стадиях:
Реализация WebAssembly есть во всех основных браузерах (кроме Internet Explorer) с конца 2017 года:
По состоянию на июль 2021 год 94 % установленных браузеров поддерживают WebAssembly. Для устаревших браузеров существует полифил asm.js.
This article uses material from the Wikipedia Русский article WebAssembly, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Если не указано иное, содержание доступно по лицензии CC BY-SA 4.0. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Русский (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.