特别声明:由于长期受盗文和剽窃困扰,本博客的精华文章均已转为付费阅读,一次付费可解锁全部文章,详情参见 【 付费专栏 】,望请理解。
文章目录
- 1. GPUI 为什么会引入 Entity?
- 2. 如何更新 Entity 的状态?
- 3. Observe 机制
- 4. Subscribe 机制
- 5. 如何规避“重入”问题?
- 6. 状态更新与租借所有权
引言
本文翻译自 Zed 官方博客文章《Ownership and data flow in GPUI》(原文地址:https://zed.dev/blog/gpui-ownership),在翻译过程中针对文中提及的重点和难点作了详实的注解,并在示例代码中添加了必要的注释,同时还划分了章节并添加了章节标题。这是一篇难得的学习 GPUI 设计理念,特别是 Entity,Observe / Subcribe 机制的好文章,非常值得细细研读。
正文
我们在构建 Zed 用户界面之初面临过的挑战之一就是 Rust 严格的所有权系统。在 Rust 中,每个对象只有一个唯一的所有者,这强烈鼓励我们把 Zed 的所有数据组织成一个树形结构,且不能存在循环引用或共享所有权。在构建 Zed 之前,我大部分的 GUI 编码经验都来自 Web 技术,其中 JavaScript 的垃圾回收机制意味着你基本不需要考虑所有权。举例来说,将鼠标事件监听器附加到一个 DOM 节点上并捕获对 this 的引用,是很常见的做法,而我在构建 UI 时的直觉大多基于这种范式。在 Rust 中,在事件监听器中捕获 self 并非那么直接。
网硕互联帮助中心


评论前必须登录!
注册