WebAssembly
===========

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 (en-US)

Главное, что позволяет 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()` (en-US)

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

`WebAssembly.Instance()` (en-US)

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

`WebAssembly.instantiateStreaming()` (en-US)

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

`WebAssembly.Memory()` (en-US)

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

`WebAssembly.Table()`

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

`WebAssembly.CompileError()` (en-US)

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

`WebAssembly.LinkError()` (en-US)

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

`WebAssembly.RuntimeError()` (en-US)

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

Примеры
-------

* WASMSobel
* Больше примеров вы можете найти в нашем репозитории webassembly-examples.
Спецификация
------------

| Specification |
| --- |
| WebAssembly JavaScript Interface  |

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

{{Compat}}Смотрите также
--------------

* WebAssembly on Mozilla Research
* webassembly.org
* WebAssembly articles on Mozilla Hacks blog
* W3C WebAssembly Community Group
* Large-Allocation HTTP header (en-US)
* Emscripting a C Library to Wasm