Lightly 是 TeamCode 团队开发的一款轻量且功能强大的集成开发工具。目前已反对 C、C++、Java、Python、HTML+JS+CSS、PHP、Go 我的项目。除语法高亮、语法错误自动检测、代码智能提醒和主动补全等根底性能外,它还能够主动构建开发环境,云端存储所有代码和资源,反对我的项目的多用户合作开发。此文介绍增量编译技术在 Lightly IDE 的利用,不便大家更好地理解和应用产品。
背景
在产品研发周期中,编写代码、编译、调试占据了工程师们绝大部分的工夫,在默认状况下,更新小局部的代码,就须要触发一次全量编译,这个过程耗时大略为分钟级别,导致每次调试的反馈周期会绝对较长,影响开发效率。为了解决这个问题,Lightly 团队进行了很多摸索与尝试,引进了增量编译技术,旨在缩短编译工夫,晋升开发效率。
架构设计
鉴于 Lightly 是一反对全语言的在线编辑器(IDE),咱们认为设计一个增量编译系统需满足以下条件:
- 通用性 : 可能承受各类文件类型的源代码变更,并进行结构化解决
- 扩展性 : 可能适配不同语言,不同框架,进行针对性的编译和构建
为满足以上条件,咱们将增量编译系统设计为以下模块:
如上图所示,在线编辑器零碎整体分成 3 个局部:
- 监听模块 : 负责监听源程序中文件的变动,新增、批改、删除、重命名等。
- 音讯模块 : 负责将变更的内容结构化为音讯,并依据已知类型进行分类打标,作为上游编译模块生产时的根据,同时,音讯零碎作为传输队列,自身须要具备长久化的个性。
- 编译模块 : 该模块由各类具体的语言模块形成,通过音讯零碎的数据作为输出,将变更的内容做针对性的编译和构建,输入产出物。
上面是整体运行的流程图,形容了从代码批改到实现编译的整个过程:
以 Java 工程为例,从整个流程登程,在线编辑器的外部流程如下:
监听到 Java 源代码变动之后,首先咱们会将这个变动的文件打标,放入音讯队列将文件编译所依赖的信息进行收集,蕴含 maven 所有依赖的门路,以及相干环境变量和运行时参数将变更的文件进行编译,失去产出物,即 class 文件
运行编译产出物
因为咱们把须要的文件曾经编译实现,那接下来只须要将制品加载即可看到最终成果:
Lightly 应用体验
后面的局部详细描述了增量编译的具体实现,其中蕴含了很多简单流程和内容,然而对用户来说,应用过程是通明的,咱们在 Lightly 在线编辑器上只须要一键触发就能够在 1 秒内实现整个编译打包、运行流程,优化了原先“批改代码、运行构建命令、启动”的流程,具体介绍如下(以 Java 为例)
- 用户编码完之后, 只需点击右上角 RUN 按钮, 即可查看输入:
- 用户再次编码完之后,再次点击右上角 RUN 按钮,后果如下:
瞻望
将来,Lightly 团队将持续围绕更智能化的轻量级在线编辑器(IDE)迭代更多功能,为开发者带来更好的体验,并期待后续更多的开发者能够参加共建。