这是一篇关于 Zed 解码系列的第一篇文章,主要内容如下:
- 系列介绍:在“Zed 解码”系列中,将深入研究 Zed,包括其构建方式、使用的数据结构、技术和技巧、具有的功能以及遇到的错误等,并将采访 Zed 的同事来获取相关信息。
- 伴随视频:该帖子配有 1 小时的伴随视频,Thorsten 和 Antonio 在其中探讨了 Zed 如何使用异步 Rust。
- 异步 Rust 与 Zed 的应用:展示了 Zed 代码库中代表异步代码的代码片段,介绍了如何使用
async_task
的Task
类型和spawn
方法来实现异步功能,以及 Zed 中使用的cx.background_executor()
和cx.foreground_executor()
。 - macOS 作为异步运行时:解释了异步 Rust 允许选择自己的运行时,Zed 在 macOS 中不使用常见的运行时如
tokio
、smol
或async_task
的Executor
,而是使用 macOS 的 Grand Central Dispatch(GCD)作为“运行时”,通过PlatformDispatcher
和trampoline
来调度和执行异步任务。 - 永不阻塞主线程:强调在原生 UI 应用中主线程的重要性,Zed 通过使用 GCD 来调度工作(在主线程和后台线程上),以及在 GPUI 中明确区分
ForegroundExecutor
和BackgroundExecutor
,以确保主线程的响应性和应用的高性能。 - 异步友好的数据结构、测试执行器等:前文代码示例引发了一些问题,如如何将缓冲区快照发送到后台线程、如何测试等,这些内容将在伴随视频中讨论,Antonio 还推荐了关于异步 Rust 代码属性测试的视频,并承诺未来将有关于 Zed 编辑器底层数据结构的文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。