Rust 和 WebAssembly 領域工作小組想要為 2019 年 Rust 和 Wasm 開發 培育一個穩定、可用於電池的且可投入生產的生態系。

為了進一步達成此目標,我們正在建置 Gloo,一個用於建置下列內容的模組化工具包

  • 小型、目標明確的 Wasm 模組,可整合到較大的 JavaScript 系統中,以及

  • 用 Rust 撰寫的完整 Web 應用程式。

Gloo 針對 Wasm 的目標與 Async 生態系工作小組的 Tide 專案計劃對伺服器端 Web 開發執行的項目類似

名稱「Tide」指的是「漲潮讓所有船隻都受益」;目的是改善 Rust 中所有 Web 開發和架構的共用、相容性和改進。

實用程式、高階函式庫和架構提供

我們使用高階函式庫和架構,而非直接使用 Web API,是因為我們想要具備可以自然表達自我的抽象。我們將非商業邏輯問題外包,因此可以比原本更快地建置更強大的函式庫和應用程式。例如,人們可能有的願望包括

  • 他們偏好描述他們希望 DOM 當下看起來的樣子,而不是列舉一串修改,將 DOM 的目前狀態轉變為他們想要的狀態。因此,他們使用立即模式虛擬 DOM 函式庫。

  • 他們偏好以 Rust 類型思考,而不是考慮 fetch 的 HTTP 回應內文中未序列化過的原始位元組,或是 Indexed DB 中的物件儲存。因此,他們使用 serde,以 derive 為基礎進行序列化和反序列化。

有很多不同的方法可以接觸高階 API,而且大家對於哪種方式最好有很多不同的意見!要設計好這些 API 很困難:我們有正確性、人體工學和效能方面的顧慮。

Gloo 如何融入

Gloo 的目標是要成為一個小型、小而美實用程式箱的集合,以及一個將所有實用程式彙整成單一套件的保護傘箱。

我們的 Gloo 目標是

  • 加強 Rust 和 WebAssembly 箱子生態圈。就算不是使用大傘形組織 Gloo 的箱子,或者你使用的是 Rust 和 Wasm 的其他框架,你都可以任意挑選實用箱子。我們目前有一些這樣箱子,例如 console_log 箱子,但我們希望有意識地讓整個生態圈中有更多實用箱子共用。

  • 將這些實用程式包裝成一個大傘形組織箱子,讓你的新專案可以馬上開始運作。此大傘形組織箱子會對實用程式箱子產生一個薄的包裝器,並在存在多個(可能是有意見的)選擇時提供預設值。為了讓大傘形組織箱子保持精簡,我們應持續將程式碼抽取出到新的共用實用程式箱子中。對於更具意見性的部分,例如虛擬 DOM 渲染或網路組件,大傘形組織箱子應該優先使用介面而非實作,以便不同的實作方式能互相置換。

Gloo 目前還遠未就緒!這個專案才剛開始。但我們希望以合作且公開的方式建構 Gloo,因此我們早早地宣布它,並且邀請你來協助我們設計和建構它。

想要參與嗎?

我們從何開始

在柏林舉行的 2019 Rust All Hands 會議中,我們發現依照網路程式庫是有意見的還是沒有意見的來分類很有用。我們都希望有點像 Rust 白話的包裝器箱子來助我們使用原始的 web-sys 計時器和 requestAnimationFrame 等,並且不需要進行大量的設計工作。對於這類許多的箱子,我們已準備好投入實作。另一方面,對於較有意見的部分,例如虛擬 DOM 和狀態管理,我們需要進行探討性的設計工作,才能確定特定的方法。

我們將在後續的一系列網誌文章中開始探討後一組的設計空間。在此同時,如果你想參與的話,可以開始從事一些實用程式箱子的操作修正,或者對設計進行腦力激盪,接著 查看 Gloo 的 GitHub 儲存庫中的一些議題