Перевод из текстового формата 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

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