System76 一直在开发他们自己的 COSMIC 桌面,作为他们在 Ubuntu 基础上构建的 Pop!_OS Linux 发行版的下一个演变。有趣的是,对于这个用 Rust 编写的大型 COSMIC 桌面项目,他们决定不再使用 GTK 工具包,而是使用 Iced-Rs 作为替代,后者是原生 Rust 跨平台图形工具包。
参与 COSMIC 项目的一位 System76 工程师在 Reddit 上评论了 COSMIC 使用 Iced 工具包的情况:
过去一年里,UX 团队一直在精心设计小部件和应用程序。我们现在正处于工程团队决定 COSMIC 的 GUI 工具包的关键时刻。经过去年的深思熟虑和实验,工程团队决定使用 Iced 而不是 GTK。
Iced 是一个原生的 Rust GUI 工具包,它足够快的进展已经满足 COSMIC 的使用需求。开发团队已经使用 GTK 和 Iced 中编写了各种 COSMIC 小组件以供比较。与 GTK 相比,Iced 的最新开发版本具有非常灵活、富有表现力和直观的 API。它在 Rust 中使用起来十分自然,任何熟悉 Elm 的人都会欣赏它的设计。
这名工程师还表示 GTK 是最低效的 GUI 工具包之一,因为其使用的 GObject、C 及其通用的布局和渲染方法。GTK 的每个方面都被认为是当今软件开发和 GUI 架构的不良实践。其最大的问题之一是数据、逻辑和 UI 深度捆绑。因此除非所有代码都被丢弃,并且以与 Iced 类似的方式在 Rust 中从头开始创建新的工具包,否则无法解决缺点。
工程师介绍道,在 Iced 中,数据与桌面小部件是分开的。开发者从一个应用程序结构开始作为模型,它存储了您的应用程序在构建其布局时需要的所有状态。每当收到消息并且状态发生更改时,都会调用一个视图方法,并且此视图方法将整个布局描述为一个状态机。然后将之前的布局进行比较和差异化,以便渲染器仅渲染两者之间的差异。此外还有一些巧妙的技术可以在未来用于减少所需的视图更新次数。当然最好的部分之一是,开发者不需要在运行时使用 Iced 加载数十个巨大的库——因为它有一个完全静态的二进制文件的选项。
Iced 是一个为 Rust 编程语言编写的跨平台 GUI 库,“专注于简单性和类型安全”。Iced 的设计思路受到了 Elm 语言的启发。Iced 工具包不仅适用于 Linux、macOS 和 Windows,还适用于 Web 应用程序。
延伸阅读
- 为开发新版 Rust 桌面环境,Pop!_OS 将跳过 22.10 版本