Перевод из текстового формата WebAssembly в Wasm
WebAssembly имеет текстовое представление на основе S-выражений, которое представляет собой промежуточную форму, предназначенную для отображения в текстовых редакторах, средствах разработки браузеров и т. д. В этой статье кратко объясняется, как это работает и как использовать доступные инструменты для преобразования файлов из текстового формата в двоичный формат .wasm
сборки.
Примечание: Файлы текстового формата обычно сохраняются с расширением .wat
. Исторически так же использовалось расширение .wast
, однако, теперь оно применяется для языка сценариев, используемого тестами WebAssembly.
Пример текстового формата
Давайте рассмотрим простой пример: следующая программа импортирует функцию с именем imported_func
из модуля с именем imports
и экспортирует функцию с именем exported_func
:
(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
.
-
Для начала сделайте копию приведенного выше примера в текстовом файле. Назовите его
simple.wat
. -
Нам нужно преобразовать это текстовое представление в двоичный формат, который фактически читает браузер, прежде чем мы сможем его использовать. Для этого мы можем использовать инструментарий wabt, который включает в себя компиляторы для преобразования между текстовым представлением WebAssembly и wasm и наоборот, а также многие другие утилиты. Перейдите по адресу https://github.com/webassembly/wabt — следуйте инструкциям на этой странице, чтобы настроить инструментарий.
-
Если вы собираете утилиты wabt из исходного кода, добавьте каталог
/wabt/out/clang/Debug
в переменнуюPATH
. -
Затем запустите программу wat2wasm, передав ей путь к исходному файлу, за которым следует параметр
-o
, а затем путь к выходному файлу:bashwat2wasm simple.wat -o simple.wasm
Это преобразует исходный текстовый код в файл с именем simple.wasm
, который содержит собранный двоичный код .wasm
.
Примечание: Также можно преобразовать сборку обратно в текстовое представление при помощи утилиты wasm2wat, например, wasm2wat simple.wasm -o text.wat
.
Просмотр файлов сборки
Поскольку выходной файл является двоичным форматом сборки, его нельзя просмотреть в обычном текстовом редакторе. Однако, вы можете просмотреть его, используя параметр -v
утилиты wat2wasm. Попробуйте выполнить следующую команду:
wat2wasm simple.wat -v
Она выдаст информацию в терминале следующим образом:
Смотрите также
- Описание текстового формата WebAssembly — подробное объяснение синтаксиса текстового формата.
- Компиляция кода C/C++ в WebAssembly — описание инструментов Binaryen/Emscripten, которые компилируют ваш исходный код в wasm и создают код API, необходимый для запуска модуля в контексте JavaScript. Узнайте больше о том, как их использовать.
- Использование WebAssembly JavaScript API — прочтите это, если хотите узнать больше о том, как работает код WebAssembly API.
- Описание текстового формата — детальная спецификация текстового формата WebAssembly в GitHub репозитории.
- wast-loader — загрузчик текстового формата WebAssembly для webpack.