Об этом проекте

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 и предпочитают компактное ядро среды выполнения, функции хоста которого добавляются через плагины. Бета-статус и тот факт, что показатели производительности предоставлены самими авторами, являются основными моментами, которые следует учитывать перед внедрением.