aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/webassembly/index.html
blob: f28faf6e5da246d0f8c775b96ef810428c0985f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
---
title: WebAssembly
slug: Web/JavaScript/Reference/Global_Objects/WebAssembly
translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly
---
<div>{{JSRef}}{{SeeCompatTable}}</div>

<p>Объект JavaScript <strong><code>WebAssembly</code></strong> действует как пространство имён для всего <a href="/en-US/docs/WebAssembly">WebAssembly</a>-связанной функциональности.</p>

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

<h2 id="Описание">Описание</h2>

<p>Основное использование <code>WebAssembly</code> следующее:</p>

<ul>
 <li>Загрузка кода WebAssembly, с помощью функции {{jsxref("WebAssembly.instantiate()")}}.</li>
 <li>Создание новой памяти и таблицы экземпляров с помощью конструкторов {{jsxref("WebAssembly.Memory()")}}/{{jsxref("WebAssembly.Table()")}}.</li>
 <li>Обеспечение возможности управлять ошибками, которые появляются в WebAssembly с помощью конструкторов {{jsxref("WebAssembly.CompileError()")}}/{{jsxref("WebAssembly.LinkError()")}}/{{jsxref("WebAssembly.RuntimeError()")}}.</li>
</ul>

<h2 id="Методы">Методы</h2>

<dl>
 <dt>{{jsxref("WebAssembly.instantiate()")}}</dt>
 <dd>Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее <code>Module</code> и его первый <code>Instance</code>.</dd>
 <dt>{{jsxref("WebAssembly.compile()")}}</dt>
 <dd>Компилирует {{jsxref("WebAssembly.Module")}} из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.</dd>
 <dt>{{jsxref("WebAssembly.validate()")}}</dt>
 <dd>Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (<code>true</code>) или (<code>false</code>).</dd>
</dl>

<h2 id="Конструкторы">Конструкторы</h2>

<dl>
 <dt>{{jsxref("WebAssembly.Module()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>Module</code>.</dd>
 <dt>{{jsxref("WebAssembly.Instance()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>Instance</code>.</dd>
 <dt>{{jsxref("WebAssembly.Memory()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>Memory</code>.</dd>
 <dt>{{jsxref("WebAssembly.Table()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>Table</code>.</dd>
 <dt>{{jsxref("WebAssembly.CompileError()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>CompileError</code>.</dd>
 <dt>{{jsxref("WebAssembly.LinkError()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>LinkError</code>.</dd>
 <dt>{{jsxref("WebAssembly.RuntimeError()")}}</dt>
 <dd>Создаёт новый объект WebAssembly <code>RuntimeError</code>.</dd>
</dl>

<h2 id="Примеры">Примеры</h2>

<p>После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (<code>result</code>), содержащий скомпилированные <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module">Module</a></code> и объекты <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance">Instance</a></code>. Мы можем вызвать <a href="/en-US/docs/WebAssembly/Exported_functions">Exported WebAssembly function</a>, которая была экспортирована через <code>Instance</code>.</p>

<pre class="brush: js">var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('simple.wasm').then(response =&gt;
  response.arrayBuffer()
).then(bytes =&gt;
  WebAssembly.instantiate(bytes, importObject)
).then(result =&gt;
  result.instance.exports.exported_func()
);</pre>

<div class="note">
<p><strong>Note</strong>: Смотрите пример <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html">index.html</a> на GitHub (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/">view it live also</a>), который использует наши <code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js#L1">fetchAndInstantiate()</a></code> библиотечные функции.</p>
</div>

<h2 id="Спецификации">Спецификации</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Спецификация</th>
   <th scope="col">Статус</th>
   <th scope="col">Коммент</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}</td>
   <td>{{Spec2('WebAssembly JS')}}</td>
   <td>Первоначальное определение проекта.</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility">Поддержка браузерами</h2>

<p>{{Compat}}</p>

<h2 id="Смотрите_также">Смотрите также</h2>

<ul>
 <li><a href="/en-US/docs/WebAssembly">WebAssembly</a> обзорная страница</li>
 <li><a href="/en-US/docs/WebAssembly/Concepts">WebAssembly концепции</a></li>
 <li><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></li>
</ul>