WebAssembly

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

WebAssembly – это новый открытый формат байт-кода, исполняемого современными браузерами. Он позволяет переносить код, написанный на таких языках как C, C++, C#, Rust, в низкоуровневые ассемблерные инструкции и использовать его в сети. Формат имеет компактные размеры, высокую производительность, близкую к нативной, и может одновременно работать с JavaScript.

В двух словах

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

WebAssembly разработан для дополнения JavaScript – используя WebAssembly JavaScript API вы можете загружать модули WebAssembly в приложения JavaScript и обеспечивать взаимодействие между ними, используя общие функции. Такой подход позволяет вам получить производительность и мощность WebAssembly, а также выразительность и гибкость JavaScript в ваших приложениях, даже если вы не знаете как писать код WebAssembly, а используете готовые модули.

И что ещё лучше, так это то, что WebAssembly разрабатывается как веб-стандарт W3C WebAssembly Working Group и Community Group при активном участии основных производителей браузеров.

Руководства

Основы WebAssembly

Прежде всего, начните с чтения общего описания WebAssembly - что это такое, чем это может быть полезно, почему он подходит для веб-платформы и как его использовать.

Компиляция кода C/C++ в WebAssembly

После того как вы написали код на C / C ++, вы можете скомпилировать его в .wasm, например, с помощью инструмента Emscripten. Давайте посмотрим, как это работает.

Компиляция существующего кода C в WebAssembly

Главное, что позволяет WebAssembly, это использование огромного множества разнообразных и проверенных временем библиотек, написанных на языке C, в сети.

Компиляция Rust в WebAssembly

Если у вас есть уже написанный код на Rust, вы можете скомпилировать его в WebAssembly. Из этого руководства вы узнаете всё, что вам нужно знать, чтобы скомпилировать проект на Rust в wasm и использовать его в существующем веб-приложении.

Загрузка и запуск кода WebAssembly

После того, как у вас появился .wasm, эта статья расскажет, как из него получить, скомпилировать и создать экземпляр модуля, совмещая WebAssembly JavaScript API c Fetch или XHR API.

Использование WebAssembly JavaScript API

После того, как вы загрузили модуль .wasm, вы захотите его использовать. В этой статье мы покажем вам, как использовать WebAssembly через WebAssembly JavaScript API.

Экспортируемые функции WebAssembly

Экспортируемые функции WebAssembly — это функции нативного модуля, доступные в JavaScript, которые позволяют вызывать код WebAssembly из JavaScript. В этой статье описывается, что они из себя представляют.

Описание текстового формата WebAssembly

Эта статья описывает текстовый формат WebAssembly. Это низкоуровневое текстовое представления модулей .wasm используемое в инструментах разработчика во время отладки.

Перевод из текстового формата WebAssembly в wasm

Эта статья содержит руководство по переводу модулей WebAssembly, написанных в текстовом формате, в двоичный файл .wasm.

Ссылки на API

WebAssembly

Этот объект является пространством имён для всех функций, связанных с WebAssembly.

WebAssembly.Module()

Объект WebAssembly.Module содержит не контролируемый WebAssembly код, который уже скомпилирован браузером и может эффективно использоваться совместно с Workers и иметь несколько экземпляров.

WebAssembly.Instance()

Объект WebAssembly.Instance это контролируемый, исполняемый экземпляр Module. Instance содержит все экспортированные функции WebAssembly, которые позволяют вызывать код WebAssembly из JavaScript.

WebAssembly.instantiateStreaming()

Функция WebAssembly.instantiateStreaming() является основной для компиляции и создания экземпляра кода WebAssembly, возвращающая одновременно Module и Instance.

WebAssembly.Memory()

WebAssembly.Memory это изменяемый ArrayBuffer содержащий в себе данные не имеющие типа к которым обращается Instance.

WebAssembly.Table()

WebAssembly.Table объект является изменяемым типизированным массивом значений, таких как ссылки на функции, которые доступны Instance.

WebAssembly.CompileError()

Создаёт новый WebAssembly CompileError объект.

WebAssembly.LinkError()

Создаёт новый WebAssembly LinkError объект.

WebAssembly.RuntimeError()

Создаёт новый WebAssembly RuntimeError объект.

Примеры

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

Specification
WebAssembly JavaScript Interface
# webassembly-namespace
Unknown specification
Unknown specification
Unknown specification
Unknown specification
WebAssembly Core: Garbage Collection
# garbage-collection①
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification

Совместимость с браузерами

webassembly.api

BCD tables only load in the browser

webassembly.BigInt-to-i64-integration

BCD tables only load in the browser

webassembly.bulk-memory-operations

BCD tables only load in the browser

webassembly.exception-handling

BCD tables only load in the browser

webassembly.extended-constant-expressions

BCD tables only load in the browser

webassembly.fixed-width-SIMD

BCD tables only load in the browser

webassembly.garbage-collection

BCD tables only load in the browser

webassembly.multiMemory

BCD tables only load in the browser

webassembly.multi-value

BCD tables only load in the browser

webassembly.mutable-globals

BCD tables only load in the browser

webassembly.non-trapping-float-to-int-conversions

BCD tables only load in the browser

webassembly.reference-types

BCD tables only load in the browser

webassembly.sign-extension-operations

BCD tables only load in the browser

webassembly.tail-calls

BCD tables only load in the browser

webassembly.threads-and-atomics

BCD tables only load in the browser

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