Перевод из текстового формата WebAssembly в Wasm
================================================

WebAssembly имеет текстовое представление на основе S-выражений, которое представляет собой промежуточную форму, предназначенную для отображения в текстовых редакторах, средствах разработки браузеров и т. д. В этой статье кратко объясняется, как это работает и как использовать доступные инструменты для преобразования файлов из текстового формата в двоичный формат `.wasm` сборки.

**Примечание:** Файлы текстового формата обычно сохраняются с расширением `.wat`. Исторически так же использовалось расширение `.wast`, однако, теперь оно применяется для языка сценариев, используемого тестами WebAssembly.

Пример текстового формата
-------------------------

Давайте рассмотрим простой пример: следующая программа импортирует функцию с именем `imported_func` из модуля с именем `imports` и экспортирует функцию с именем `exported_func`:


```wasm
(module
  (func $i (import "imports" "imported\_func") (param i32))
  (func (export "exported\_func")
    i32.const 42
    call $i
  )
)
```


Функция `exported_func` экспортируется для использования в нашей среде (например, web-приложении, в котором мы используем наш модуль WebAssembly). Когда он вызывается, он вызывает импортированную функцию JavaScript с именем `imported_func`, которая запускается со значением (42), передаваемым в качестве параметра.

Преобразование текстового формата .wat в двоичный .wasm файл
------------------------------------------------------------

Давайте попробуем преобразовать приведенный выше пример текстового представления `.wat` в двоичный формат `.wasm`.

1. Для начала сделайте копию приведенного выше примера в текстовом файле. Назовите его `simple.wat`.
2. Нам нужно преобразовать это текстовое представление в двоичный формат, который фактически читает браузер, прежде чем мы сможем его использовать. Для этого мы можем использовать инструментарий wabt, который включает в себя компиляторы для преобразования между текстовым представлением WebAssembly и wasm и наоборот, а также многие другие утилиты. Перейдите по адресу https://github.com/webassembly/wabt — следуйте инструкциям на этой странице, чтобы настроить инструментарий.
3. Если вы собираете утилиты wabt из исходного кода, добавьте каталог `/wabt/out/clang/Debug` в переменную `PATH`.
4. Затем запустите программу wat2wasm, передав ей путь к исходному файлу, за которым следует параметр `-o`, а затем путь к выходному файлу:

```bash
wat2wasm simple.wat -o simple.wasm
```


Это преобразует исходный текстовый код в файл с именем `simple.wasm`, который содержит собранный двоичный код `.wasm`.

**Примечание:** Вы также можете преобразовать сборку обратно в текстовое представление при помощи утилиты wasm2wat, например, `wasm2wat simple.wasm -o text.wat`.

Просмотр файлов сборки
----------------------

Поскольку выходной файл является двоичным форматом сборки, его нельзя просмотреть в обычном текстовом редакторе. Однако, вы можете просмотреть его, используя параметр `-v` утилиты wat2wasm. Попробуйте выполнить следующую команду:


```bash
wat2wasm simple.wat -v
```


Она выдаст информацию в терминале следующим образом:

![несколько строк двоичного кода с текстовым описанием рядом с ними. Например: 0000008: 01 ; section code ](/ru/docs/WebAssembly/Text_format_to_Wasm/assembly-output.png)

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

* Описание текстового формата WebAssembly — подробное объяснение синтаксиса текстового формата.
* Компиляция кода C/C++ в WebAssembly — описание инструментов Binaryen/Emscripten, которые компилируют ваш исходный код в wasm и создают код API, необходимый для запуска модуля в контексте JavaScript. Узнайте больше о том, как их использовать.
* Использование WebAssembly JavaScript API — прочтите это, если хотите узнать больше о том, как работает код WebAssembly API.
* Описание текстового формата — детальная спецификация текстового формата WebAssembly в GitHub репозитории.
* wast-loader — загрузчик текстового формата WebAssembly для webpack.