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

**Экспериментальная возможность:** **Это экспериментальная технология**  
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

Объект JavaScript **`WebAssembly`** действует как пространство имён для всего WebAssembly-связанной функциональности.

В отличие от большинства других глобальных объектов, `WebAssembly` не является конструктором (это не объект функции). Можно сравнить его с `Math`, который так же является пространством имён констант и функций, или `Intl`, который является пространством имён для конструкторов интернационализации и других языково-чувствительных функций.

Описание
--------

Основное использование `WebAssembly` следующее:

* Загрузка кода WebAssembly, с помощью функции `WebAssembly.instantiate()` (en-US).
* Создание новой памяти и таблицы экземпляров с помощью конструкторов `WebAssembly.Memory()` (en-US)/`WebAssembly.Table()`.
* Обеспечение возможности управлять ошибками, которые появляются в WebAssembly с помощью конструкторов `WebAssembly.CompileError()` (en-US)/`WebAssembly.LinkError()` (en-US)/`WebAssembly.RuntimeError()` (en-US).
Методы
------

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

Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее `Module` и его первый `Instance`.

`WebAssembly.compile()`

Компилирует `WebAssembly.Module` (en-US) из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.

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

Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (`true`) или (`false`).

Конструкторы
------------

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

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

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

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

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

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

`WebAssembly.Table()`

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

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

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

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

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

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

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

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

После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции `WebAssembly.instantiate()` (en-US), импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (`result`), содержащий скомпилированные `Module` (en-US) и объекты `Instance` (en-US). Мы можем вызвать Exported WebAssembly function, которая была экспортирована через `Instance`.


```js
var importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.instantiate(bytes, importObject))
  .then((result) => result.instance.exports.exported\_func());
```


**Примечание:** Смотрите пример index.html на GitHub (view it live also), который использует наши `fetchAndInstantiate()` библиотечные функции.

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

| Specification |
| --- |
| WebAssembly JavaScript Interface # webassembly-namespace |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* WebAssembly обзорная страница
* WebAssembly концепции
* Использование WebAssembly JavaScript API