Closed timzaak closed 1 month ago
zed 另一款基于 Rust 的编辑器, 编辑状态使用了tree-sitter 来进行源码文件解析和语法树生成。 号称最快,但目前看其原因是
目前 Linux 快支持了,参考官方blog: zed-decoded-linux-when。
websocket + protobuf,估计是为了以后的浏览器兼容。
blade, mac Metal。 构建了 gpui, 类似 floem。
基于 alacritty 管理 Terminal 编辑状态,渲染自行处理。
现在还不支持插件,不过已在roadmap 中。
Helix 基于 Terminal 的编辑器,也是 Rust 编写,不支持鼠标事件。 使用Tokio 作为异步运行时,代码风格是让人阅读的明白,没那么多花里胡哨的东西,相比于有窗口的编辑器,可以不用管GPU渲染的东西。 基于 tree-sitter 做着色、源码 AST。
Helix 目前尚无 插件、远程功能。
入口:helix-term/src/main.rs。
在研究了一圈 #116 后,很自然的跳到编辑器开发 lapce。
整理一下小技巧:
代码语法树分析用 tree_sitter 来做。文本编辑用 Rope 结构。
远程与本地
中间加了一层 rpc-proxy,抹平 local/ remote rpc。 remote 目前做了ssh、wsl,后期可以扩展成服务器。 ssh remote 部分没有看到网络卡顿时的处理情况。
渲染
搞出了 floem GUI,里面有各种各样的GUI 组件。 floem 具体写在 #117
Terminal 实现
基于 alacritty 管理 Terminal 编辑状态,渲染基于 floem 搞。原因可能在于一个窗口,无法简单的兼容多个渲染引擎?
插件
自搞了个(Plugin Server Protocol)协议,模仿vs code LSP,基于 wasmtime 做逻辑,用 channel 解耦。 插件注册事件到
PluginCatalog
,根据事件进行分发。 至于 lsp 插件,是下载二进制包,由主程序启动,例如 rust 是走 rust-analyser server(这样也容易兼容很多其他包吧)。静态语言有个问题,就是挂插件的时候,如何能做到低开销通信?
工程化
很多都基于自己的需求做了二开。