下一代编辑器的方向就是进程分离:使用 C/Cpp/Rust 开发的核心 + Electron / Qt 开发界面
这就是 NeoVim 这几年走出来的路,界面这种东西更新迭代快,需要跨平台,需要好看,紧跟当下流行风格。用 Cpp 显然是一件很劳累的事情,所以 NeoVim 做的最主要的事情就是把界面给 externalize 化,C 只实现文本编辑和脚本系统这些非界面的事情,界面部分让另外一个进程来做,界面进程通过管道+msgpack 来和内核进程通信,界面进程会把用户的操作指令发送给编辑器内核进程,编辑器内核进程又会将需要显示些什么发送给外部进程,由外部进程显示出来。
由此,编辑器内核只关注性能和功能,而外部界面进程就着重跨平台和用户体验。
Atom 真的是成也 Electron ,败也 Electron。用 Electron 开发内核,开发是容易了,但是结果大家都看到了。事实证明 Electron 并不擅长做编辑器内核这种一定复杂度又要求性能的东西,即便多次的把各种东西由 electron 挪到 Cpp 中,也是徒劳的。
所以 NeoVim 的实践结果告诉大家,编辑器内核和界面,两种完全不同的开发模式,不能混为一谈。所以自 NeoVim 发布后,已经有 22 种 运行再不同操作系统下的 GUI 前端了,我自己用的就是一款用 Electron 开发的 GUI 前端:
无独有偶,google 也开发了一个 rust 做核心,使用json进行进程间通信的编辑器:
xi-editor 使用 python 作为脚本系统,目前已经开发近两年,完善程度比 github 的 xray 高不少,而且目前有 9种 不同的 GUI 前端,包括文本终端模式和桌面 GUI 模式。
Github 对文本编辑器的“不妥协”的探索精神是令人敬佩的,瞅了一眼它的开发者都是以前 Atom 的核心团队,希望他们能充分吸取 Atom 的经验给大家好好打造一款趁手的编辑器吧。