乐趣区

关于编辑器:增量编译技术在Lightly中的实践

背景
在产品研发周期中,编写代码、编译、调试占据了工程师们绝大部分的工夫,在默认状况下,更新小局部的代码,就须要触发一次全量编译,这个过程耗时大略为分钟级别,导致每次调试的反馈周期会绝对较长,影响开发效率。为了解决这个问题,Lightly 团队进行了很多摸索与尝试,引进了增量编译技术,旨在缩短编译工夫,晋升开发效率。

架构设计
鉴于 Lightly 是一反对全语言的 IDE,咱们认为设计一个增量编译系统需满足以下条件:

  • 通用性 : 可能承受各类文件类型的源代码变更,并进行结构化解决
  • 扩展性 : 可能适配不同语言,不同框架,进行针对性的编译和构建
    为满足以上条件,咱们将增量编译系统设计为以下模块:

    如上图所示,零碎整体分成 3 个局部:
  • 监听模块 : 负责监听源程序中文件的变动,新增、批改、删除、重命名等。
  • 音讯模块 : 负责将变更的内容结构化为音讯,并依据已知类型进行分类打标,作为上游编译模块生产时的根据,同时,音讯零碎作为传输队列,自身须要具备长久化的个性。
  • 编译模块 : 该模块由各类具体的语言模块形成,通过音讯零碎的数据作为输出,将变更的内容做针对性的编译和构建,输入产出物。

上面是整体运行的流程图,形容了从代码批改到实现编译的整个过程:

以 Java 工程为例,从整个流程登程,外部流程如下:

  • 监听到 Java 源代码变动之后,首先咱们会将这个变动的文件打标,放入音讯队列
  • 将文件编译所依赖的信息进行收集,蕴含 maven 所有依赖的门路,以及相干环境变量和运行时参数
  • 将变更的文件进行编译,失去产出物,即 class 文件

运行编译产出物
因为咱们把须要的文件曾经编译实现,那接下来只须要将制品加载即可看到最终成果:

Lightly 应用体验
后面的局部详细描述了增量编译的具体实现,其中蕴含了很多简单流程和内容,然而对用户来说,应用过程是通明的,咱们在 Lightly 上只须要一键触发就能够在 1 秒内实现整个编译打包、运行流程,优化了原先“批改代码、运行构建命令、启动”的流程,具体介绍如下(以 Java 为例)

  1. 用户编码完之后, 只需点击右上角 RUN 按钮, 即可查看输入:
  2. 用户再次编码完之后,再次点击右上角 RUN 按钮,后果如下:

瞻望
将来,Lightly 团队将持续围绕更智能化的轻量级 IDE 迭代更多功能,为开发者带来更好的体验,并期待后续更多的开发者能够参加共建。扫描下方二维码,退出 Lightly 用户交换群,获取更多信息!

退出移动版