编辑器的自制( 二 )
- 模型 。程序所操作数据的底层描述,如文本属性、缓冲区等等;并与系统进行交互 。
- 视图 。面向用户展示数据的方法,如对于窗口增量显示更新逻辑等 。
- 控制器 。负责实现用户与视图的交互(如按键、鼠标事件等),并对模型进行更新(采用 Lisp 作为支撑)
GitHub :https://github.com/phodal/stadal
IDE:IDEA 的插件化

文章插图
因为偶然地原因,我分析了一段时间的 Intellij IDEA 社区版 + Android Studio 的源码之后,我有了一些新的感受 —— 这个系统架构有点复杂,哈哈 。当然,也发现了一些相似的模式 。
隔离层:独立二进制对于工具的制造者来说,开发者并不希望工具被捆绑在某一个开发工具上 。因此,对于开发者而言,优先做的是提供一个可独立运行的程序,而后再封装一个针对于该工具的实现 。
于是乎,这个运行的程序,它可能是:
- C/C++ 编写的二进制应用 。通过 daemon 的方式来运行,并能通过解析输出来进行错误处理 。
- Gradle 开发的插件 。并借助于 Gradle Tooling API 来实现插件的调用 。
- JAVA 编写的应用 。通过直接集成的方式进行 。
- ……
语言扩展IDEA 本身的插件体系已经设计得很完善了,如我们可以快速添加一门语言,只需要:
- 注册文件类型
- 实现 Lexer(词法分析)
- 实施 Parser(语法分析) 和 PSI(程序结构接口)
- 语法高亮显示和错误高亮显示
- 代码补全
- 查找用法
- 重构:重命名、安全删除
- 代码格式化程序
- ……

文章插图
总结一个好的编辑器/IDE 应该能:
- 滋长的特性:通过插件化支撑
- 可维护性:具备良好的可读性
- 进程分离
- 速度
只有自己挖的坑才是好的 。
我行我上 。
【编辑器的自制】
推荐阅读
- Linux分段系统中的地址映射和基本机制
- 设计一个高效的定时任务系统
- Pony - 最智能的 Python ORM 框架
- C++构造函数的三种写法
- 开胃水果茶的做法,玫瑰水果茶的做法
- 红茶是普洱茶吗,红茶的保质期大概是多久
- 红茶馒头的做法,全麦绿茶馒头的做法
- 红茶和绿茶各自的功效,甘蔗红茶菊花绿茶饮
- 苦丁茶功效与作用,苦丁茶的功效与作用
- AlgorithmMan,一套免费的算法演示神器