跳转到内容

Lapce — 把编辑器搬到 GPU 上的 Rust 实验

待复核

Lapce 是一个用 Rust 从零写、靠 GPU 画画面的代码编辑器。日常类比:VS Code 是把网页技术(HTML/CSS)塞进一个壳里画编辑器;Lapce 跳过浏览器那一层,直接让显卡画字——就像别人开车走高速,它走专修的私人轨道。

形态上它和 VS Code 长得很像(侧边栏 + 编辑区 + 命令面板),但底层栈完全是另一套:

  • GUI:Floem(早期用过 Druid,2023 前后被作者团队替换成自研)
  • 渲染:wgpu(Rust 跨平台 GPU 抽象,文字 + UI 都走显卡)
  • 文本核:Rope(继承自 Xi-Editor,O(log n) 编辑超长文件)
  • 插件:WASI(C / Rust / AssemblyScript 编到 WASM 跑沙箱)
  • 远程:内置远程开发(类 VS Code Remote),配套 Lapdev 云开发环境

GitHub 约 38.5k star,Apache-2.0,作者 Dongdong Zhou(dzhou121),最新 v0.4.6(2026-01)。

不理解 Lapce,下面这些事都没法解释:

  • 为什么 2020 年代还有人重新发明编辑器——VS Code 不香吗
  • 为什么 Rust 社区会自己造一个 GUI 框架(Floem),而不是用 Tauri / egui
  • 为什么 GPU 渲染对编辑器有意义——人眼读字又不需要 60fps
  • 为什么”WASM 插件”这个看起来很潮的方案,其实是为了安全 + 跨语言而不是性能
  • 云原生编辑器(Lapdev)和 GitHub Codespaces 思路差在哪

Lapce 想解决的核心矛盾是:VS Code 功能完整但 Electron 太重,Vim 轻但门槛高。它的三板斧:

  1. 不要浏览器:抛弃 Electron,自己用 wgpu 画。官方宣称常见配置下冷启动可到百毫秒级、静态内存占用约百兆内。代价:每个 widget 都要自己实现,没有 CSS 这种成熟样式系统。

  2. 不要 JS/TS 写插件:插件用 WASI 跑。任何能编到 WASM 的语言都能写插件,沙箱隔离避免 VS Code 那种”恶意插件偷 token”的问题。代价:生态小,没有 VS Code 数十万插件可用。

  3. 响应式 UI(Floem):作者参考 SolidJS 的细粒度信号(fine-grained reactivity),让 UI 状态变化只重渲染受影响的那块。类比 React 的 diff 算法——但 Floem 不需要 diff,它知道哪个像素该重画。

三个选择合起来是一个赌注:桌面应用应不应该跳过浏览器栈。Lapce 是这条路上跑得最远的几个项目之一。

案例 1:五分钟装上并打开大文件

Section titled “案例 1:五分钟装上并打开大文件”
Terminal window
# macOS / Linux(也可用官网安装包)
cargo install --locked lapce
# 或: brew install --cask lapce
lapce ./huge.log # 打开 50–100MB 日志,试滚动与搜索

第一次打开若卡在 vim 模式:按 i 进入插入,或在设置里关掉 modal editing。这是验证「Rope + GPU 渲染」体感的最小步骤。

案例 2:Floem 替代 Druid 是怎么发生的

Section titled “案例 2:Floem 替代 Druid 是怎么发生的”

Lapce 0.1(2021 年)用的 GUI 是 Druid(注意:这是 Xi-Editor 团队的 Rust GUI,不是 Apache Druid 数据库)。Druid 在 2022 年进入 maintenance,Xi 团队转向 Xilem。Lapce 没等,派生出自研 Floem:SolidJS 式 signal、为虚拟滚动/IME 优化、与 wgpu 深度绑定。教训:依赖 framework 要么贡献它,要么准备接管。

案例 3:为什么编辑器需要 GPU 渲染

Section titled “案例 3:为什么编辑器需要 GPU 渲染”

卖点不是「人眼觉得更快」,而是大文件 + HiDPI + 特效叠加时不掉帧:10 万行日志滚动、Retina 缩字形、minimap/选区动画在 GPU 上更便宜。CPU 软渲染在「大文件 + 高分屏 + 动画」三者叠在一起时才会明显掉帧——这才是 wgpu 路线的真实动机。

WASI 插件理论更好(沙箱、跨语言),但生态稀:作者已会 JS/TS,WASI host API 未全标准化,用户基数远小于 VS Code。文本核 Rope 继承自 Xi——中间插入 O(log n),适合 100MB 级文件;实现复杂度换长期性能。打开巨型日志、频繁局部编辑时,差距比「日常改小文件」明显得多。

2024 年团队推出 Lapdev(自托管云开发,对标 Codespaces):数据不出公司、按需启停。很难正面打过绑死 GitHub 生态的 Codespaces,更现实的定位是「在意隐私的中小团队备选」。

  1. wgpu 在不同平台表现不一致:Windows DX12、macOS Metal、Linux Vulkan 都有边缘 bug,issue 区常见「某平台字体糊」。GPU 抽象不是免费的。

  2. IME 输入法适配难:中日韩输入在 GUI 框架里都是脏活。早期中文输入不稳,Floem 重写后才明显好转。

  3. modal editing 默认开:默认 vim-like(按 i 插入)。新人常以为软件坏了;后来才加 onboarding 提示。

  4. vs Zed:2024 年起 Zed(前 Atom 团队)走类似路线(Rust + GPU + gpui),资源与星标更足。Lapce 处在「先驱但被追赶」的位置。

  5. 跨平台字体细节:macOS 子像素抗锯齿与 Linux freetype 不同,wgpu 再夹一层,调教是无穷工作量——VS Code 把这层交给 Chromium,Lapce 自己背。

  6. 插件生态冷启动:即便 WASI 设计漂亮,没有「一键装 Copilot 同类」就很难留住从 VS Code 迁过来的用户。

适用

  • 想要轻量原生编辑器(常见配置下约百兆内存量级)的人
  • Rust 开发者(lsp-rs / rust-analyzer 集成顺畅)
  • 远程开发场景(内置 SSH,不需要装扩展)
  • 学习 GUI / 编辑器架构的工程师

不适用

  • 重度依赖 VS Code 插件生态(Copilot、Live Share 都没有成熟等价物)
  • 团队协同实时编辑(不像 VS Code Live Share / Zed 协作那样成熟)
  • 需要图形化调试器(断点 / 变量监视面板还在补齐)
  • 只想「装上就能用全家桶」的用户——Lapce 更适合能接受缺插件的人
  • 2021:dzhou121 开源 Lapce 0.1,GUI 用 Druid,定位「Rust + GPU 编辑器」
  • 2022-2023:Druid 进入 maintenance;团队派生 Floem,替换整套 UI
  • 2024:推出 Lapdev(自托管云开发,对标 Codespaces);Zed 同路线加速追赶
  • 2025-2026:继续补 LSP / 远程 / 输入法细节;2026-01 发布 v0.4.6,GitHub 星标约 3.8 万

Rust 桌面 GUI 仍在早期,Lapce 是少数把编辑器产品推到可用的样本。

  1. 桌面应用不一定要 Electron——wgpu + Rust 能做出百兆量级的原生编辑器
  2. 依赖一个 framework,要做好接管的准备(Lapce 从 Druid 派生出 Floem 是被迫但正确)
  3. GPU 渲染卖点不是快,是”大文件 + HiDPI + 特效叠加时不掉帧”
  4. 生态护城河 > 技术优越性——WASI 插件理论更好但生态没起来
  5. Rust 桌面 GUI 还在早期——没有”标准选择”,每个项目都在赌
  6. 今天的价值是路径证明:Lapce 未必替换 VS Code,但证明跳过 Electron、用 Rust + wgpu 做桌面 IDE 能跑通——哪怕生态仍落后于后来者
  • codemirror —— 同样追求”轻 + 可拼”,但走 Web 路线
  • monaco-editor —— Lapce 的”对手”,Electron + TS 路线
  • ratatui —— Rust + 终端 UI,和 Lapce 是 Rust GUI 的两端
  • zed —— 同路线竞品(Rust + GPU),资源更足
  • lite-xl —— 另一条轻量编辑器路线(Lua 扩展,体积极小)
  • lite-xl —— Lite-XL — 不到 3MB 的编辑器也能扩展出花样