Xilem后端2024年路线图
项目背景与目标
Xilem是Rust GUI框架的研究与开发项目,旨在探索如何使UI开发与Rust语言兼容。当前项目处于"永久实验"状态,自2022年5月起未取得足够进展,同时前身项目Druid已被搁置。作者Olivier Faure获得Google Fonts资助,目标是在2024年底前使Xilem具备与Iced、SlintUI同等的推荐级别,并计划实现无缝热重载功能。短期内将专注于基础功能、组件和样式选项,中期将关注性能优化。
当前问题
Xilem的原生后端存在代码质量不佳的问题,包括注释掉的代码、过时文档和待办事项。Rust GUI生态系统面临"过度打磨"问题——开发者往往专注于底层技术而忽视终端用户需求,导致用户体验不足且文档缺乏。
主要改进计划
切换到Masonry后端
Masonry是从Druid分叉而来的GUI框架,代码质量优于Xilem当前原生后端。计划将其整合为Xilem后端,需进行以下改造:
- 使用Vello和Parley替代Piet
- 使用Glazier替代druid-shell
- 集成AccessKit以支持无障碍功能
- 移除对GTK的依赖
避免过度自定义Widget
鼓励开发者使用组合式声明UI元素而非创建自定义Widget,类似于Web开发中的DOM元素组合方式。提供逃生舱机制(如固定大小的画布表面),但设计框架时应假设用户几乎不需要这些机制。
更明确的布局方案
减少布局算法的自定义点,整合主流布局算法(CSS Flow、FlexBox、CSS Grid、Morphorm)。计划深度集成Taffy布局引擎,通过受Web启发的Widget间协议实现布局,而非硬编码布局算法集。
消除Box
由于Widget集合相对固定,可以避免使用Box,这将带来性能优势:
- 允许向Widget trait添加更多方法而不增加vtable大小
- 使方法内联成为可能,改善开发体验
探索ECS模式
考虑采用实体组件系统,主要利用:
- Slotmap数据结构存储Widget
- 高效添加/移除实体组件的能力
使Widget由库而非用户代码拥有,便于序列化、调试和事件处理。
未来讨论主题
- 声明式样式:为Widget提供类似CSS属性的特性,包括动画、伪类、媒体查询和容器查询
- 合成阶段:在GPU处理后增加合成阶段,优化滚动和简单动画的性能与电池寿命
- 资源加载:借鉴游戏引擎,实现纹理、着色器、字体等资源的自动加载管理
社区参与
所有计划均未最终确定,将通过RFC流程与社区讨论。已创建RFC仓库,每个改进方向将有专门RFC文档。最终决策将基于社区共识,而非单方面决定。
生态系统关系
项目关注Winit、Bevy和Servo的协作可能,注意到Vello、Parley、wgpu、Taffy等项目间的合作日益紧密。作者对Rust GUI框架的前景表示乐观,认为Rust有能力构建一流GUI框架。