From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/webassembly/compile/index.html | 83 +++++++++++ .../webassembly/compilestreaming/index.html | 79 ++++++++++ .../global_objects/webassembly/index.html | 161 +++++++++++++++++++++ .../global_objects/webassembly/table/index.html | 104 +++++++++++++ 4 files changed, 427 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/webassembly/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/webassembly/table/index.html (limited to 'files/ru/web/javascript/reference/global_objects/webassembly') diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html new file mode 100644 index 0000000000..ba600573a9 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html @@ -0,0 +1,83 @@ +--- +title: WebAssembly.compile() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +--- +
{{JSRef}}
+ +

Функция WebAssembly.compile() компилирует {{jsxref("WebAssembly.Module")}} из двоичного кода WebAssembly. Эта функция полезна, если необходимо компилировать модуль до того, как его можно создать (в противном случае следует использовать функцию {{jsxref("WebAssembly.instantiate()")}}.

+ +

Синтаксис

+ +
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
+ +

Параметры

+ +
+
bufferSource
+
Типированный массив typed array или ArrayBuffer, содержащий двоичный код модуля .wasm, который вы хотите скомпилировать.
+
+ +

Возвращаемое значение

+ +

Обещание, (Promise), которое разрешает объект {{jsxref("WebAssembly.Module")}}, представляющий скомпилированный модуль.

+ +

Исключения

+ + + +

Примеры

+ +

В следующем примере выполняется компиляция загруженного simple.wasm байт-кода с использованием функции compile(), а затем отправляется его worker-работнику, использующему postMessage().

+ +
var worker = new Worker("wasm_worker.js");
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.compile(bytes)
+).then(mod =>
+  worker.postMessage(mod)
+);
+ +
+

Заметка: Вероятно, вы захотите использовать {{jsxref("WebAssembly.compileStreaming()")}} в большинстве случаев, поскольку он более эффективен, чем compile().

+
+ +

Характеристики

+ + + + + + + + + + + + + + + + +
СпецификацияСтатусКоммент
{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}{{Spec2('WebAssembly JS')}}Первоначальное определение проекта.
+ +

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

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.compile")}}

+
+ +

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

+ + diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html new file mode 100644 index 0000000000..106519cdf2 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html @@ -0,0 +1,79 @@ +--- +title: WebAssembly.compileStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +--- +
{{JSRef}}
+ +

Функция WebAssembly.compileStreaming() компилирует {{jsxref("WebAssembly.Module")}} непосредственно из потокового исходника. Эта функция полезна, если необходимо скомпилировать модуль до того, как его можно создать (в противном случае следует использовать функцию {{jsxref("WebAssembly.instantiateStreaming()")}}.

+ +

Синтаксис

+ +
Promise<WebAssembly.Module> WebAssembly.compileStreaming(source);
+ +

Parameters

+ +
+
source
+
Обещание, или {{domxref("Response")}},  которое будет выполнено с одним, представляющим основной источник модулем .wasm, который вы хотите передать и скомпилировать.
+
+ +

Возвращаемое значение

+ +

Обещание, ( Promise), которое разрешает объект {{jsxref("WebAssembly.Module")}}, представляющий скомпилированный модуль.

+ +

Исключения

+ + + +

Примеры

+ +

Следующий пример (см. Нашу демонстрацию compile-streaming.html на GitHub и view it live) напрямую передает модуль .wasm из исходника, затем компилирует его в объект {{jsxref("WebAssembly.Module")}}.
+ Поскольку функция compileStreaming() принимает обещание для объекта {{domxref("Response")}}, вы можете напрямую передать ему вызов {{domxref("WindowOrWorkerGlobalScope.fetch()")}}, и он передаст ответ в выполняемую функцию.

+ +
var importObject = { imports: { imported_func: arg => console.log(arg) } };
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(module => WebAssembly.instantiate(module, importObject))
+.then(instance => instance.exports.exported_func());
+ +

Затем создается полученный экземпляр модуля с помощью {{jsxref("WebAssembly.instantiate()")}} и вызывается экспортированная функция.

+ +

Характеристики

+ + + + + + + + + + + + + + + + +
СпецификацияСтатусКоммент
{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}{{Spec2('WebAssembly Embedding')}}Первоначальное определение 
+ проекта.
+ +

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

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}

+
+ +

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

+ + diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/index.html new file mode 100644 index 0000000000..daff5d4ee7 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/index.html @@ -0,0 +1,161 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +--- +
{{JSRef}}{{SeeCompatTable}}
+ +

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

+ +

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

+ +

Описание

+ +

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

+ + + +

Методы

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

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

+ +
+
{{jsxref("WebAssembly.Module()")}}
+
Создает новый объект WebAssembly Module.
+
{{jsxref("WebAssembly.Instance()")}}
+
Создает новый объект WebAssembly Instance.
+
{{jsxref("WebAssembly.Memory()")}}
+
Создает новый объект WebAssembly Memory.
+
{{jsxref("WebAssembly.Table()")}}
+
Создает новый объект WebAssembly Table.
+
{{jsxref("WebAssembly.CompileError()")}}
+
Создает новый объект WebAssembly CompileError.
+
{{jsxref("WebAssembly.LinkError()")}}
+
Создает новый объект WebAssembly LinkError.
+
{{jsxref("WebAssembly.RuntimeError()")}}
+
Создает новый объект WebAssembly RuntimeError.
+
+ +

Примеры

+ +

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

+ +
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()
+);
+ +
+

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

+
+ +

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

+ + + + + + + + + + + + + + + + +
СпецификацияСтатусКоммент
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}{{Spec2('WebAssembly JS')}}Первоначальное определение проекта.
+ +

Поддержка браузерами

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support5715[2]{{CompatGeckoDesktop(52)}}[1]{{CompatNo}}4411
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureChrome for AndroidAndroid WebviewEdge MobileFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support5757{{CompatNo}}{{CompatGeckoMobile(52)}}[1]{{CompatNo}}{{CompatNo}}11
+
+ +

[1] WebAssembly включен в Firefox 52+, хотя не валиден в Firefox 52 Extended Support Release (ESR.)

+ +

[2] В настоящее время поддерживается флаг «Экспериментальные функции JavaScript».  Для более подробной информации смотрите этот blog post.

+ +

Смотри также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html new file mode 100644 index 0000000000..c453aeaf46 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html @@ -0,0 +1,104 @@ +--- +title: WebAssembly.Table +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +--- +
{{JSRef}}
+ +

Объект WebAssembly.Table() - это JavaScript обертка — структура похожая на массив, представляюшая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.

+ +
+

Обратите внимание: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.

+
+ +

Конструктор

+ +
+
WebAssembly.Table()
+
Создает новый объект Table.
+
+ +

Экземпляры Table

+ +

Все экземпляры Table наследуются от прототипа конструктора Table(), следовательно изменения прототипа затронут все экземпляры Table.

+ +

Свойства экземпляра

+ +
+
Table.prototype.constructor
+
Возвращает функцию которая создала этот объект. По умолчанию это конструктор {{jsxref("WebAssembly.Table()")}}.
+
{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}
+
Возвращает длину таблицы (количество елементов в таблице).
+
+ +

Instance methods

+ +
+
{{jsxref("WebAssembly/Table/get","Table.prototype.get(index)")}}
+
Возвращает указанное значение из таблицы.
+
{{jsxref("WebAssembly/Table/grow","Table.prototype.grow(count)")}}
+
Увеличивает размер таблицы на указанное количество элементов.
+
{{jsxref("WebAssembly/Table/set","Table.prototype.set(index, value)")}}
+
Сохраняет указанное значение в таблицу под указанным индексом.
+
+ +

Примеры

+ +

Следующий пример (смотри исходный код и живую версию table2.html) создает новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух елементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и елементы равны {{jsxref("null")}}.

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);  // "2"
+console.log(tbl.get(0));  // "null"
+console.log(tbl.get(1));  // "null"
+ +

После этого мы создаем обьект импорта содержащий таблицу:

+ +
var importObj = {
+  js: {
+    tbl: tbl
+  }
+};
+ +

После этого, мы создаем экземпляр модуля wasm (table2.wasm) используя метод {{jsxref("WebAssembly.instantiateStreaming()")}}.  Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри текстовую версию).  Таким образом, после создания wasm-модуля, таблица имеет туже длину, но елементы таблицы стали функциями экспортированными из WebAssembly которые можно вызывать из JS.

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});
+ +

Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращенную из талицы (т.е. get(0)() вместо get(0)) .

+ +

Этот пример показывает что мы создаем и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.

+ +

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

+ + + + + + + + + + + + +
Specification
{{SpecName('WebAssembly JS', '#tables', 'Table')}}
+ +

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

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Table")}}

+
+ +

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

+ + -- cgit v1.2.3-54-g00ecf