Cloudflare : 通过 wasm-bindgen 的新 Emscripten 目标,在 Workers 中支持原生 Rust

[!quote]+

今天,我们宣布推出一项功能的第一个公开实验性预览版,该功能旨在更好地支持原生 Rust 代码,甚至支持在 Workers 上原生运行的基于 Tokio 的应用程序:对 wasm-bindgen 开源工具链和 Cloudflare 的 Rust Workers 上的 Emscripten wasm32-unknown-emscripten Rust 编译器目标提供一流的支持。

wasm-bindgen 是一个开源工具链,它为基于 Rust 的 WebAssembly 应用在我们的 V8 Workers Runtime 上运行提供支持。为 wasm-bindgen 启用 Emscripten 目标是一项长期工作,最初由 Google 在一年多前发起,随后由维护 wasm-bindgen 的 Cloudflare 工程师进行了进一步的审查和支持。

虽然仍处于预发布阶段,但我们很高兴与大家分享这项工作带来的全新工作流程可能性,即在 Web、Node.js 和 Cloudflare 的全球 Workers 平台上使用 Emscripten 运行原生 wasm-bindgen Rust 应用程序。

在测试中,我们发现 Rust Workers 的库兼容性得到了显著提升。为了展示其支持的功能,我们成功地在 Durable Object 中运行了一个 Rust 原生 Minecraft 服务器(Pumpkin),并启用了 TCP 入口,使用了 Tokio 的真实 TCP 套接字。本文末尾提供了该移植的完整描述。

Emscripten 是一个开源的 WebAssembly 编译器工具链,最初由 Mozilla 创建,目前由 Google 工程师维护,它能够运行本地代码并将其与 Web 平台连接起来,包括支持和虚拟化平台特性,例如计时器、文件系统操作、套接字和其他本地功能。

由于 Cloudflare Workers 支持 Web 平台 API 和 Node.js 兼容性,我们能够利用 Node.js 编译标志在 Workers 上支持 Emscripten,从而在现有 Node.js API 的基础上完全虚拟化原生平台功能,例如定时器、文件系统操作和套接字。此外,通过我们对 Tokio 的支持,现在基于 Tokio 异步运行时生态系统构建的 Rust 代码也可以通过此 Emscripten 目标完全集成到基于 JavaScript 的主机环境中。

我们已将这些当前的实验性补丁集以及示例应用程序提供给您,供您立即试用。

7 个赞