Rust 和 WebAssembly 领域工作组希望在 2019 年为 Rust 和 Wasm 开发 培养一个稳定、功能齐全且可用于生产的环境。

为了实现这一目标,我们正在创建 Gloo,这是一个用于构建以下内容的模块化工具包:

  • 小型、针对性的 Wasm 模块,这些模块可以集成到更大的 JavaScript 系统中,以及

  • 用 Rust 编写的整个 Web 应用程序。

Gloo 对 Wasm 的目标类似于 Async Ecosystem 工作组的 Tide 项目对服务器端 Web 开发的意图。

“Tide” 这个名字指的是“海潮上涨,船舶皆浮”,其目的是提高 Rust 中所有 Web 开发和框架的共享、兼容性和改进。

实用程序高级库和框架提供的功能

我们使用高级库和框架而不是直接使用 Web API,因为我们想要能够自然地表达自己的抽象。我们将非业务逻辑问题外包,以便能够比以前更快地创建更强大的库和应用程序。例如,人们可能希望:

  • 他们更喜欢描述他们希望 DOM 现在看起来的样子,而不是列举一系列修改,这些修改将把 DOM 的当前状态转换为他们想要的状态。因此,他们使用立即模式虚拟 DOM 库。

  • 他们更喜欢用 Rust 类型来思考,而不是考虑 fetched HTTP 响应主体中的原始序列化字节,或者考虑 Indexed DB 中的对象存储。因此,他们使用 derive 基于的序列化和反序列化,以及 serde

有许多不同的方法来处理高级 API,人们对哪种方法最好有许多不同的意见!设计这些 API 非常困难:我们有正确性、人体工程学和性能方面的考虑。

Gloo 的作用

Gloo 的目标既是小型、专注的实用程序箱的集合,也是一个将所有实用程序箱整合到一个包中的伞形箱。

我们对 Gloo 的目标是:

  • 增强 Rust 和 WebAssembly 箱子生态系统。即使您没有使用整个伞形 Gloo 箱子,或者您正在使用其他 Rust 和 Wasm 框架,也可以选择实用程序箱。我们今天有一些这样的箱子——例如 the console_log 箱子——但我们希望有意地在整个生态系统中增加更多共享的实用程序箱。

  • 将这些实用程序箱打包到一个伞形箱中,以便您的新项目可以立即开始运行。这个伞形箱将是实用程序箱的薄包装器,并在存在多个(可能是有意见的)选择的情况下提供默认值。为了保持伞形箱的体积小,我们应该不断地将代码提取到新的共享实用程序箱中。对于更具意见性的部分,例如虚拟 DOM 渲染或 Web 组件,伞形箱应该优先考虑接口而不是实现,以便可以使用不同方法的不同实现进行交换。

Gloo 目前还远未准备好!该项目才刚刚开始。但我们希望以集体和开放的方式构建 Gloo,因此我们提前宣布它,并邀请您来帮助我们设计和构建它。

想参与进来吗?

我们的起点

在 2019 年柏林的 Rust 全员会议上,我们发现根据 Web 库是否有意见对它们进行分类是有用的。我们都希望围绕原始 web-sys 定时器和 requestAnimationFrame 等的惯用 Rust 包装箱,而且这方面并没有太多需要进行的设计工作。对于许多这类箱子,我们已经准备好开始实施。另一方面,对于更具意见性的部分,例如虚拟 DOM 和状态管理,我们需要在承诺特定方法之前进行探索性设计工作。

我们将在后续的博客文章系列中开始探索后一组的设计空间。与此同时,如果您想参与进来,开始编写一些实用程序箱,或者集思广益设计,那么请 查看 Gloo GitHub 仓库中的一些问题