GitHub热门
Ollama:一行命令跑起大模型,本地 LLM 推理的终极方案
GitHub热门解析|Marimo:下一代 Python 反应式笔记本
Zed:用 Rust 重写编辑器性能天花板
Hono:多运行时超快 Web 框架,TypeScript 的下一个选择
GitHub 热门项目解析:Zed Editor —— Rust 重塑代码编辑器的未来
GitHub 热门项目解析:Zed Editor —— Rust 重塑代码编辑器的未来
Hermes Agent:唯一内置学习循环的自进化 AI Agent
本站点使用 MrDoc 构建
-
+
Zed:用 Rust 重写编辑器性能天花板
> 分类:GitHub 热门 | 发布时间:2026-05-17  ## 项目概览 | 属性 | 详情 | |------|------| | **名称** | Zed | | **作者** | Zed Industries (Nathan Sobo 等) | | **Star 数** | 58.2k+ | | **语言** | Rust (95%+) | | **协议** | GPL-3.0 / AGPL-3.0 | | **官网** | https://zed.dev | > Zed 是一款由 Atom 编辑器原创始人 Nathan Sobo 带队打造的高性能多人协作代码编辑器,完全使用 Rust 编写,自研 GPU 加速 UI 框架 GPUI,目标是成为"世界上最快的编辑器"。 ## 为什么火? Zed 的爆火并非偶然,它精准踩中了开发者长期以来的几个痛点: 1. **VS Code 性能天花板**:Electron 架构下的内存占用和启动速度已无法满足大型项目需求,Zed 用 Rust+GPUI 从根本上解决了这个问题 2. **协作原生内置**:不像 VS Code 需要安装 Live Share 扩展,Zed 的协作功能是协议层原生的,基于 CRDT 实现无冲突多人编辑 3. **Atom 精神延续**:Nathan Sobo 是 Atom 的原创始人,Zed 被视为"Atom 2.0"——同样的可扩展性理念,但性能提升了几个量级 4. **AI 原生集成**:内置 AI 助手面板,支持 inline edit、代码生成,且不绑定特定模型供应商 5. **开源社区力量**:2024年1月开源后,社区贡献者迅速涌入,issues 和 PR 活跃度极高 ## 核心架构解析  Zed 采用了多层架构设计,核心模块如下: ``` zed/ ├── crates/ │ ├── gpui/ # 自研 GPU 加速 UI 框架 │ │ ├── platform/ # 平台抽象 (macOS/Linux/Win) │ │ ├── elements/ # UI 原子组件 │ │ └── renderer/ # 渲染管线 │ ├── editor/ # 编辑器核心 │ │ ├── display_map # 文本显示映射 │ │ ├── buffer/ # 文本缓冲区 (rope data structure) │ │ └── actions/ # 编辑动作定义 │ ├── language/ # LSP 客户端实现 │ ├── project/ # 项目模型 & 文件监听 │ ├── collab/ # CRDT 协作引擎 │ ├── extension/ # WASM 扩展宿主 │ ├── workspace/ # 窗口/面板管理 │ └── zed/ # 应用入口 & 命令系统 ├── extensions/ # 官方扩展 └── Cargo.toml # workspace 定义 ``` **关键设计决策**: - **GPUI 不用 DOM**:自绘渲染管线直接调用 Metal/Vulkan,绕过浏览器中间层,实现 120fps 流畅度 - **Rope 数据结构**:文本缓冲区使用 Rope 而非 Flat String,保证大文件编辑的 O(log n) 插入/删除性能 - **进程隔离**:LSP Server 和扩展运行在独立进程,崩溃不影响主编辑器 - **CRDT 协作**:基于 RGA(Replicated Growable Array)算法,无需中央服务器协调 ## 关键代码片段 ### GPUI 组件定义(声明式 UI) ```rust // crates/gpui/examples/hello.rs impl Render for HelloView {{ fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {{ div() .flex() .flex_col() .items_center() .justify_center() .size_full() .bg(gpui::black()) .child( h1("Hello, Zed!") .text_color(gpui::white()) .text_2xl() ) .child( button("Click me") .on_click(|_event, _cx| {{ println!("clicked!"); }}) ) }} }} ``` > GPUI 采用声明式 UI 范式,类似 SwiftUI/Flutter 的风格,但底层直接编译为 GPU 渲染指令,没有虚拟 DOM diff 的开销。 ### 文本缓冲区 - Rope 操作 ```rust // crates/buffer/src/Buffer::edit pub fn edit(&mut self, mut edits: Vec<(Range<usize>, String)>) {{ // 按位置倒序排列,避免偏移量漂移 edits.sort_by(|a, b| b.0.start.cmp(&a.0.start)); for (range, new_text) in edits {{ self.rope.replace(range, &new_text); // 通知协作层同步变更 self.broadcast_operation(Operation::Replace {{ range, text: new_text, }}); }} self.set_dirty(true); }} ``` ### LSP 客户端通信 ```rust // crates/language/src/lsp.rs pub async fn send_request<R: Request>( &self, params: R::Params, ) -> Result<R::Result> {{ let id = self.next_id.fetch_add(1, Ordering::Relaxed); let request = jsonrpc::Request {{ id: Some(id.into()), method: R::METHOD.into(), params: Some(serde_json::to_value(params)?), }}; self.transport.send(request).await?; let response = self.pending_requests.wait(id).await?; Ok(serde_json::from_value(response.result()?)?) }} ```  ## 值得学习的设计模式 ### 1. Entity-Component 模式 Zed 借鉴了游戏引擎的 ECS 思想: ```rust // 每个 "View" 都是一个 Entity pub struct Model<T> {{ entity_id: EntityId, _phantom: PhantomData<T>, }} // 通过 Context 访问和修改 cx.update_model(&self.buffer, |buffer, _| {{ buffer.edit(edits); }}); ``` 这种模式使得 UI 组件与数据模型完全解耦,便于测试和协作同步。 ### 2. 零拷贝文本渲染 编辑器性能的关键在于文本渲染: - 使用 DisplayMap 将逻辑位置映射到屏幕位置 - 仅重绘可见区域的文本行(视口裁剪) - 语法高亮结果缓存,增量更新 ### 3. Capability-based 扩展安全 扩展运行在 WASM 沙箱中,通过 capability token 授权: ```rust pub struct ExtensionCapability {{ can_read_files: bool, can_access_network: bool, can_run_subprocesses: bool, }} ``` 比 VS Code 的 activationEvents 更细粒度,安全性更高。 ### 4. 结构化并发 基于 tokio 的任务模型,每个 LSP 连接、文件监听器、协作会话都是独立的 Task,通过 channel 通信,避免共享状态的锁竞争。 ## 如何参与贡献 1. **环境准备**: ```bash git clone https://github.com/zed-industries/zed.git cd zed cargo install cargo-script # 用于运行开发脚本 cargo run # 构建并启动 ``` 2. **贡献方向**: - Good First Issue:搜索 good first issue 标签,适合新手 - Linux 平台支持:GPUI 的 Wayland/X11 适配仍在进行中 - 扩展生态:为流行语言编写 Tree-sitter 语法和 LSP 配置 - 文档改进:API 文档和教程始终需要补充 3. **开发流程**: - Fork → Branch → PR(要求 cargo clippy 和 cargo test 通过) - 代码审查严格,每个 PR 至少需要一位 core team 成员 approve - Commit message 遵循 Conventional Commits 规范 4. **社区资源**: - GitHub Discussions: https://github.com/zed-industries/zed/discussions - Zed Discord: https://discord.gg/zed - 每周四社区办公时间(Community Office Hours) --- > Zed 证明了"用 Rust 重写一切"不只是口号。当你真正需要极致性能时,系统级语言的优势无可替代。它不仅仅是一个编辑器,更是一份宣言:**开发工具应该和代码一样快**。
admin
2026年5月17日 01:12
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码