Rust GUI 編程漫談:超越 Web 與原生 GUI

自打我有了一個寫 Uncode IDE 的小目標之後,我開始尋找一些適用於 Rust 語言的 GUI 框架。對於未來而言,基於 Rust 語言寫 GUI 提供了大量的優點。

於是,在我這一個月的努力之下,我嘗試了三個不同風格的 Rust GUI 框架:終於總算是勉強能跑起來了。順便一提,這三個框架都不是穩定版本,功能都不夠完善。

唯一值得稱道的一點是,我寫這篇文章用的工具用的是其中的 Druid 框架寫的 Print 編輯器吧。它可以穩定的運行着,雖然功能還不夠完善,但是勉強可以用起來。

而且,從輸入的效果來看,輸入的響應速度還是相當不錯的 —— 畢竟在沒有各種智能 + 智障提醒的情況下,它不會有多慢。

混合框架 Tauri

爲了方便於開發,我開始我假設 Uncode 是運行在瀏覽器環境的,所以呢,我就找了 Electron 的替代器 Tauri。

Tauri 走的是古老的混合應用框架 Cordova 的思路,通過調用系統默認的 WebView 來作爲環境。想想,還是很美好的,所以我嘗試了使用 Tauri 運行了第一個 hello, world。然後試着,加了幾個功能,也是勉強能接受的,直到我需要一個多窗口的功能,發現沒有。

於是,我去 GitHub 上了解了一下情況,看了一眼 Todo:

看了一眼時間,沒錯今年是 2021 了,這些個 Todo 這麼多,我還怎麼繼續啊。

小結,其實呢,如果你用過 Cordova 的話,那你就知道 Cordova 在跨平臺上的諸多問題。不過,寫寫小工具還是相關不錯的,hello,world 只需要 600 KB,體積少了 100M 還是很香的。

跨 Web 與原生框架 Iced

接着,我開始尋找了第二個 GUI 框架,我看到了一個更美好的框架 Iced:用 Iced 寫的應用,除了可以在桌面上運行,還可以編譯爲 Web 應用在瀏覽器上跑。有沒有很香??

拿起 Iced 就開發幹了:

如下是使用 Iced 編寫的 Style,支持一定程度的自定義:

那,我們來寫個編輯器吧。咦,沒有多行 text input。我思考了一下一個編輯器的工作量,我決定放棄這個框架。

總結:API 非常友好,至少我是覺得不錯滴,但是 widget 不全。

桌面級 Druid

我要醒醒醒醒,原生 GUI 開發和 Web UI 開發不一樣,大部分組件庫沒那麼全的。嗯,看來這樣一來,我的目標就很清晰了:多窗口 + 多行文本。一波努力之下,我找到了 Druid。然後看了看作者的頭像,似乎有點眼熟,點進去一眼,原來就是那個寫 Xi Editor 的作者了。

排版方式上,同樣是可以用 Flex,如下:

比較有意思的是,這個框架內置了大量的 GUI 範式,你得按它的模式來編寫。

總結:基本可用的 Rust GUI 庫,文檔還有待完善。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。