📜  编译器设计中的增量编译器

📅  最后修改于: 2021-06-28 07:26:52             🧑  作者: Mango

增量编译器是一种为一个语句或一组语句生成代码的编译器,该代码独立于为其他语句生成的代码。

例子 :
C / C++ GNU编译器, Java Eclipse平台等

增量编译器就是这样一种编译方案,其中仅重新编译已修改的源文本并将其与先前编译的代码合并,以形成新的目标代码。因此,增量编译器可避免在某些修改后重新编译整个源代码。而是仅对源程序的修改部分进行编译。

Code           -->           Compilation
New code       -->           New Compilation 

(Previous                      (Previous Compilation + 
Code + Changes)                compilation of modified part)              

需要增量编译器:
程序员的大部分时间都花在了如下的edit-compile-debug工作流程中。

  • 您进行了很小的更改(通常在单个模块甚至函数)。
  • 您让编译器将代码转换为二进制,最后。
  • 您可以运行该程序或一堆单元测试以查看更改结果。

这将增加更改每一步的编译时间。但这可以通过增量编译器的概念来克服(保存以前的编译并编译代码的修改部分)。

如何实现这个概念(增量编译的概念):
我们已经听说,增量计算意味着只更新计算输出的那些部分,这些部分需要根据计算输入的给定变化进行调整。我们可以采用的一种基本策略是将一个大型计算(如编译程序)看作是许多相互依赖的较小且相互关联的计算的组合。这些较小的计算中的每一个都会产生一个中间结果,该结果可以缓存并希望在以后的迭代中重新使用,从而避免了我们再次重新计算该特定中间结果的需要。

增量编译器的功能:

  • 在程序开发过程中,对源程序的修改可能导致重新编译整个源文本。在增量编译器中减少了这种开销。
  • 通过保持程序修改不变,可以像编译时错误一样修补运行时错误。
  • 编译过程更快。
  • 使用的内存较少。
  • 使用增量编译器处理批处理程序变得非常灵活。
  • 在增量编译器中,程序结构表维护用于目标代码的内存分配。编译新语句时,将在程序结构表中为其创建新条目。因此,增量编译器所需的内存分配不必是连续的。
  • 帮助跟踪对源程序的依赖关系。