Skip to content

Commit

Permalink
[ru] replace old noteblock syntax with GFM syntax in webassembly fo…
Browse files Browse the repository at this point in the history
…lder (#22793)

[ru] replace old noteblock syntax with GFM syntax in 'webassembly' folder
  • Loading branch information
leon-win authored Aug 8, 2024
1 parent 8468b19 commit dd24e1f
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 47 deletions.
9 changes: 6 additions & 3 deletions files/ru/webassembly/c_to_wasm/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ slug: WebAssembly/C_to_Wasm

Если все работает как планировалось, вы должны увидеть надпись "Hello world" на открывшейся веб-странице и в JavaScript консоли вашего браузера. Поздравляем, вы только что скомпилировали программу на Си в WebAssembly и запустили её в своём браузере!

> **Примечание:** На самом деле, если просто открыть полученный `hello.html`, то ничего работать не будет. Подразумевается что все файлы находятся на веб-сервере и вы запускаете страницу через `localhost/hello.html`. Для этих целей можно использовать отладочный веб-сервер Emscripten. Чтобы его запустить, откройте терминал, перейдите в каталог, в котором находятся ваши файлы и выполните команду `emrun hello.html`
> [!NOTE]
> На самом деле, если просто открыть полученный `hello.html`, то ничего работать не будет. Подразумевается что все файлы находятся на веб-сервере и вы запускаете страницу через `localhost/hello.html`. Для этих целей можно использовать отладочный веб-сервер Emscripten. Чтобы его запустить, откройте терминал, перейдите в каталог, в котором находятся ваши файлы и выполните команду `emrun hello.html`
### Использование собственного HTML шаблона

Expand Down Expand Up @@ -92,7 +93,8 @@ slug: WebAssembly/C_to_Wasm

4. Теперь давайте запустим этот пример. Команда, указанная выше, сгенерирует файл `hello2.html`, который будет иметь тоже содержание что и шаблон, но с некоторым кодом, добавленным в процесс загрузки сгенерированного wasm, запускающим его и т.д. Откройте его в своём браузере, и вы увидите тот же результат, что и прошлом примере.

> **Примечание:** вы можете указать компилятору создавать только JavaScript-кода, без HTML, используя внутри флага `-o`, `.js` вместо `.html` для формата выходного файла, например `emcc -o hello2.js hello2.c -O3 -s WASM=1`. После этого вы должны создать свой собственный HTML файл с нуля. Однако так делать не рекомендуется — Emscripten требуется большое количество связывающего кода для обработки операций выделения памяти, утечек памяти и других проблем, которые уже включены в предоставляемый шаблон. Намного легче использовать уже готовое решение, чем создавать свои собственные версии самому.
> [!NOTE]
> Можно создавать только JavaScript-файлы без HTML, указав `.js` вместо `.html` внутри флага `-o`, например `emcc -o hello2.js hello2.c -O3`. После этого вы должны создать свой собственный HTML файл с нуля. Как правило легче использовать уже готовое решение, чем создавать свои собственные версии самому.
### Вызов пользовательской функции, определённой в Си

Expand Down Expand Up @@ -123,7 +125,8 @@ slug: WebAssembly/C_to_Wasm
По умолчанию, код созданный Emscripten, всегда просто вызывает функцию `main()` , а остальные неиспользуемые функции удаляются. Добавьте определение `EMSCRIPTEN_KEEPALIVE` перед именем функции чтобы этого не происходило. Также вы должны подключить библиотеку `emscripten.h` для использования `EMSCRIPTEN_KEEPALIVE`.
> **Примечание:** Мы используем блоки `#ifdef` чтобы, пример оставался рабочим если вы попытаетесь использовать C++ код. Из за различия в правилах преобразования имён между Си и Си++, этот код может сломаться, но мы написали его так, что функция будет рассматриваться как функция Си даже если вы будете использовать Си++.
> [!NOTE]
> Мы используем блоки `#ifdef` чтобы, пример оставался рабочим если вы попытаетесь использовать C++ код. Из-за различия в правилах преобразования имён между Си и Си++, этот код может сломаться, но мы написали его так, что функция будет рассматриваться как функция Си даже если вы будете использовать Си++.
2. Теперь добавьте `html_template/shell_minimal.html` в ваш новый каталог, просто для удобства. В настоящем проекте стоит размещать его в специально определённый каталог.
3. Теперь снова займёмся этапом компиляции. Внутри вашего последнего каталога, используя терминал, скомпилируйте ваш Си код следующей командой. (Обратите внимание что при компиляции обязательно нужно использовать опцию NO_EXIT_RUNTIME, иначе после выполнения функции `main()`, рабочий цикл будет завершён. Это приведёт, например, к вызову функции atexits и дальше будет невозможно использовать наш скомпилированный код. Другими словами это необходимо для правильной эмуляции Си.)
Expand Down
6 changes: 4 additions & 2 deletions files/ru/webassembly/concepts/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ WebAssembly позволяет запускать код, написанный
- Поддерживать безопасность - код WebAssembly предназначен для запуска в безопасной, изолированной среде выполнения. Как и другой веб-код, он будет соблюдать политики безопасности браузера.
- Не разрушать текущий веб - технология WebAssembly разработана так, что она прекрасно сочетается с другими веб-технологиями и поддерживает обратную совместимость.

> **Примечание:** Технология WebAssembly также будет иметь возможность использования за пределами веб и JavaScript-сред (см. [Встраивание вне Web](http://webassembly.org/docs/non-web/)).
> [!NOTE]
> Технология WebAssembly также будет иметь возможность использования за пределами веб и JavaScript-сред (см. [Встраивание вне Web](http://webassembly.org/docs/non-web/)).
## Как WebAssembly встраивается в веб-платформу?

Expand Down Expand Up @@ -93,7 +94,8 @@ JavaScript API предоставляет разработчикам возмо
2. Emscripten преобразует скомпилированный результат clang + LLVM в двоичный файл .wasm.
3. Сам по себе код WebAssembly в настоящее время не может напрямую обращаться к DOM; он может вызывать только JavaScript, передавая целочисленные и числа с плавающей точкой примитивные типы данных. Таким образом, чтобы получить доступ к любому Web-API, WebAssembly модуль должен обращаться к JavaScript, который затем вызывает Web-API. Поэтому Emscripten создаёт необходимый для этого связующий код HTML и JavaScript.

> **Примечание:** В будущем планируется [позволить WebAssembly напрямую вызывать Web API](https://github.com/WebAssembly/gc/blob/master/README.md).
> [!NOTE]
> В будущем планируется [позволить WebAssembly напрямую вызывать Web API](https://github.com/WebAssembly/gc/blob/master/README.md).
Связующий код JavaScript не так прост, как вы можете себе представить. Прежде всего Emscripten предоставляет популярные библиотеки C/C++, такие как [SDL](https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer), [OpenGL](https://en.wikipedia.org/wiki/OpenGL), [OpenAL](https://en.wikipedia.org/wiki/OpenAL) и части [POSIX](https://en.wikipedia.org/wiki/POSIX). Эти библиотеки реализованы с точки зрения Web-API, и поэтому каждой из них требуется некоторый код JavaScript для соединения WebAssembly модуля с базовым Web-API.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ fetch("simple.wasm")
.then((mod) => worker.postMessage(mod));
```

> **Примечание:** Вероятно, вы захотите использовать {{jsxref("WebAssembly.compileStreaming()")}} в большинстве случаев, поскольку он более эффективен, чем `compile()`.
> [!NOTE]
> Вероятно, вы захотите использовать [`WebAssembly.compileStreaming()`](/ru/docs/WebAssembly/JavaScript_interface/compileStreaming_static) в большинстве случаев, поскольку он более эффективен, чем `compile()`.
## Характеристики

Expand Down
19 changes: 7 additions & 12 deletions files/ru/webassembly/javascript_interface/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,19 @@ slug: WebAssembly/JavaScript_interface

## Примеры

После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (`result`), содержащий скомпилированные [`Module`](/ru/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module) и объекты [`Instance`](/ru/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance). Мы можем вызвать [Exported WebAssembly function](/ru/docs/WebAssembly/Exported_functions), которая была экспортирована через `Instance`.
Смотрите пример [instantiate-streaming.html](https://github.com/mdn/webassembly-examples/blob/main/js-api-examples/instantiate-streaming.html) на GitHub ([демо](https://mdn.github.io/webassembly-examples/js-api-examples/instantiate-streaming.html)).

```js
var importObject = {
imports: {
imported_func: function (arg) {
console.log(arg);
},
},
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};

fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, importObject))
.then((result) => result.instance.exports.exported_func());
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
```

> **Примечание:** Смотрите пример [index.html](https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html) на GitHub ([view it live also](https://mdn.github.io/webassembly-examples/js-api-examples/)), который использует наши [`fetchAndInstantiate()`](https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js#L1) библиотечные функции.
Потом осуществляется доступ к свойству `.instance` объекта `ResultObject` и вызывается содержащаяся в нём экспортированная функция.

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

Expand Down
3 changes: 2 additions & 1 deletion files/ru/webassembly/javascript_interface/table/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ slug: WebAssembly/JavaScript_interface/Table

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

> **Примечание:** Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.
> [!NOTE]
> Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.
## Конструктор

Expand Down
12 changes: 8 additions & 4 deletions files/ru/webassembly/loading_and_running/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@ fetch("module.wasm")
}
```

> **Примечание:** Обычно мы заботимся только об экземпляре, но полезно иметь модуль на тот случай, если мы хотим его кешировать, поделиться им с другим работником или окном через [`postMessage()`](/ru/docs/Web/API/MessagePort/postMessage), или просто создать больше экземпляров.
> [!NOTE]
> Обычно мы заботимся только об экземпляре, но полезно иметь модуль на тот случай, если мы хотим его кешировать, поделиться им с другим работником или окном через [`postMessage()`](/ru/docs/Web/API/MessagePort/postMessage), или просто создать больше экземпляров.
> **Примечание:** Вторая форма перегрузки принимает в качестве аргумента объект {{jsxref("WebAssembly.Module")}} и возвращает `Promise`, непосредственно содержащее объект экземпляра, в качестве результата. См. [Второй пример перегрузки](/ru/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate#Second_overload_example).
> [!NOTE]
> Вторая форма перегрузки принимает в качестве аргумента объект {{jsxref("WebAssembly.Module")}} и возвращает `Promise`, непосредственно содержащее объект экземпляра, в качестве результата. См. [Второй пример перегрузки](/ru/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate#Second_overload_example).
### Выполнение вашего кода WebAssembly

Expand All @@ -77,7 +79,8 @@ WebAssembly.instantiateStreaming(fetch("myModule.wasm"), importObject).then(
);
```

> **Примечание:** Для получения дополнительной информации о том, как работает экспорт из модуля WebAssembly, ознакомьтесь с разделами [Использование JavaScript API WebAssembly](/ru/docs/WebAssembly/Using_the_JavaScript_API), и [Понимание текстового формата WebAssembly](/ru/docs/WebAssembly/Understanding_the_text_format).
> [!NOTE]
> Для получения дополнительной информации о том, как работает экспорт из модуля WebAssembly, ознакомьтесь с разделами [Использование JavaScript API WebAssembly](/ru/docs/WebAssembly/Using_the_JavaScript_API), и [Понимание текстового формата WebAssembly](/ru/docs/WebAssembly/Understanding_the_text_format).
## Используя XMLHttpRequest

Expand All @@ -104,4 +107,5 @@ request.onload = function () {
};
```

> **Примечание:** вы можете увидеть пример этого в действии в [xhr-wasm.html](https://mdn.github.io/webassembly-examples/js-api-examples/xhr-wasm.html).
> [!NOTE]
> Можно увидеть пример этого в действии в [xhr-wasm.html](https://mdn.github.io/webassembly-examples/js-api-examples/xhr-wasm.html).
3 changes: 2 additions & 1 deletion files/ru/webassembly/rust_to_wasm/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ slug: WebAssembly/Rust_to_Wasm

Чтобы установить Rust, посетите [Install Rust](https://www.rust-lang.org/install.html) страницу и проследуйте всем инструкциям. Так вы установите тулзу, называемую "rustup", которая позволит вам управлять несколькими версиями Rust. По умолчанию, она устанавливает последний стабильный релиз Rust, который вы будете использовать для стандартной разработки на Rust. Rustup устанавливает `rustc`, компилятор Rust, вместе с `cargo`, Rust-овским пакетным менеджером, `rust-std`, стандартной библиотекой Rust, и несколькими вспомогательными доками — `rust-docs`.

> **Примечание:** Обратите внимание на пост-установочную заметку о необходимости добавить cargo `bin` директорию в список `PATH`. Она должна быть добавлена автоматически, но вам нужно будет перезапустить терминал, чтобы изменения вступили в силу.
> [!NOTE]
> Обратите внимание на пост-установочную заметку о необходимости добавить cargo `bin` директорию в список `PATH`. Она должна быть добавлена автоматически, но вам нужно будет перезапустить терминал, чтобы изменения вступили в силу.
### wasm-pack

Expand Down
Loading

0 comments on commit dd24e1f

Please sign in to comment.