Об этом проекте
Wago — это среда выполнения WebAssembly, написанная полностью на Go. Вместо интерпретации Wasm она компилирует модули напрямую в нативный машинный код, что позволяет встраивать её в программы на Go без использования CGO, сохраняя простоту обычных сборок Go и кросс-компиляции. Проект позиционируется как быстрый, компактный и расширяемый; при этом отмечается, что он все еще находится в стадии бета-тестирования, а значит, API и артефакты .wago могут измениться.
Характеристики, которые выделяет проект:
- Чистый Go: встраивание не требует инструментария C.
- Ориентация на стандарты: заявляется, что среда выполнения проходит официальный набор тестов WebAssembly, а также фаззинг-тесты и проверку на реальных корпусах данных.
- Расширяемость: WASI, Component Model и другие возможности хоста вынесены за пределы основного ядра среды выполнения и представлены в виде плагинов.
- Автономные исполняемые файлы: файл .wasm может быть скомпилирован в небольшой нативный бинарный файл, что, согласно README, полезно для CLI-инструментов.
- Платформы: Linux, macOS и Windows на архитектурах amd64 и arm64, при этом поддержка функций WebAssembly варьируется в зависимости от бэкенда. Точный охват функций задокументирован в файле матрицы функций.
Установка
В macOS и Linux задокументированная однострочная команда загружает скрипт установщика и передает его в sh; в Windows пользователи PowerShell запускают эквивалентную команду irm. Эти действия устанавливают менеджер, который затем устанавливает среду выполнения. Сайт с документацией описывает альтернативные методы установки, каналы релизов и сборку из исходного кода.
Запуск модулей
После установки модуль можно запустить напрямую: запуск небольшого Wasm-файла с вычислением чисел Фибоначчи с аргументом выводит ожидаемый результат. Для создания автономного бинарного файла используется подкоманда compile, которая принимает на вход .wasm-файл и путь вывода; полученный исполняемый файл принимает те же аргументы.
Использование Wago в Go
Разработчики Go добавляют модуль с помощью команды go get github.com/wago-org/wago. Репозиторий содержит пронумерованные примеры, включая пример типизированной среды выполнения, которая компилирует модуль, создает экземпляр и вызывает экспортированную функцию. Отдельное руководство по документации описывает процесс встраивания Wago в Go.
Возможности хоста и плагины
Интеграции с хостом намеренно вынесены за пределы основного ядра среды выполнения. Проект можно инициализировать командой init, а плагины, такие как реализация WASI, добавляются по имени, например wago-org/wasi. Для просмотра доступных плагинов предусмотрен сайт реестра плагинов.
Производительность
В README указано, что Wago использует несколько килобайт оперативной памяти, а время компиляции примерно в три раза быстрее, а выполнение — примерно на 40 процентов быстрее, чем у wazero. Проект ссылается на страницу с бенчмарками и директорию с тестами в репозитории. Эти цифры являются собственными измерениями разработчиков, и их следует проверить на ваших собственных рабочих нагрузках перед использованием.
Статус проекта и лицензирование
Wago выпускается под лицензией Apache License 2.0 и разрабатывается бесплатно, при этом приветствуется спонсорство. Репозиторий включает документацию, примеры, матрицу функций, документ по архитектуре, дорожную карту, рекомендации по внесению вклада и трекер ошибок.
В целом, Wago ориентирован на разработчиков Go, которые хотят запускать или встраивать WebAssembly без зависимости от C и предпочитают компактное ядро среды выполнения, функции хоста которого добавляются через плагины. Бета-статус и тот факт, что показатели производительности предоставлены самими авторами, являются основными моментами, которые следует учитывать перед внедрением.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.