这个项目能做什么
Wago 是一个完全用 Go 编写的 WebAssembly 运行时。它并非解释执行 Wasm,而是将模块直接编译为原生机器码,因此可以无需 CGO 嵌入到 Go 程序中,从而保持普通的 Go 构建和交叉编译简单直接。该项目定位为快速、紧凑且可扩展,并声明目前仍处于 beta 阶段,这意味着 API 和生成的 .wago 产物可能会发生变化。
项目强调的特性包括:
- 纯 Go:嵌入时不需要 C 工具链。
- 专注于标准:该运行时据称通过了官方 WebAssembly 测试套件,以及模糊测试和真实世界的语料库测试。
- 可扩展性:WASI、组件模型(Component Model)和其他宿主能力作为插件存在于核心运行时之外。
- 独立可执行文件:.wasm 文件可以被编译成小型原生二进制文件,README 指出这对于 CLI 工具非常有用。
- 平台支持:支持 amd64 和 arm64 架构下的 Linux、macOS 和 Windows,不同后端的 WebAssembly 功能覆盖范围有所不同。具体覆盖情况记录在功能矩阵文件中。
安装方式
在 macOS 和 Linux 上,文档提供了一行命令用于下载安装脚本并将其传递给 sh;在 Windows 上,PowerShell 用户运行相应的 irm 命令。这些操作会安装一个管理器,随后由管理器安装运行时。文档网站还涵盖了其他安装方法、发布渠道和源码构建。
运行模块
安装后可直接执行模块:运行一个带有参数的小型 Fibonacci Wasm 文件将打印出预期结果。要创建独立二进制文件,可以使用 compile 子命令,输入 .wasm 文件并指定输出路径,生成的执行文件接受相同的参数。
在 Go 中使用 Wago
Go 开发者可以通过 go get github.com/wago-org/wago 添加该模块。仓库提供了编号示例,包括一个类型化运行时的示例,演示了如何编译模块、创建实例并调用导出函数。另有独立的文档指南介绍如何在 Go 中嵌入 Wago。
宿主能力与插件
宿主集成被刻意地放在核心运行时之外。可以使用 init 命令初始化项目,并通过名称添加插件(例如 WASI 实现 wago-org/wasi)。项目提供了一个插件注册表网站用于浏览可用插件。
性能
README 指出 Wago 仅占用几 KB 的 RAM,并声称编译速度比 wazero 快约三倍,执行速度快约 40%。项目链接到了基准测试页面和仓库中的 benchmark 目录。这些数据是维护者的自行测量结果,在依赖之前应根据自己的工作负载进行验证。
项目状态与许可
Wago 基于 Apache License 2.0 发布,免费开发并鼓励赞助。仓库包含文档、示例、功能矩阵、架构文档、路线图、贡献指南和问题追踪器。
总体而言,Wago 面向希望在没有 C 依赖的情况下运行或嵌入 WebAssembly,且偏好通过插件扩展宿主功能的轻量级运行时核心的 Go 开发者。在采用之前,需要权衡其 beta 状态以及基准测试数据来自项目方本身这两个主要因素。
评论
0 评分人数达到10人后显示
登录后参与讨论。