这个项目能做什么

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 状态以及基准测试数据来自项目方本身这两个主要因素。