增量计算

增量计算（），又称增量计算法，是一种软件特性。当部分数据变化时，增量计算试图仅重新计算那些依赖于变化的数据的输出，以节省计算时间。Umut A. Acar (2005). Self-Adjusting Computation  (PDF)(Ph.D. thesis). 相比于简单地重新计算完整的输出内容，增量计算能够显著地节省计算时间。 比如，电子表格的重计算功能可能会采用增量计算的方式，只有当单元格含有的公式直接或间接依赖于发生变化的其他单元格时，该单元格才会被更新。

当一个工具能够自动地为各种不同的代码实现增量计算时，该工具可被视为一种用于优化的程序分析工具。
替代=增量计算提供一种计算方法，使得新的输入/输出对(I2,O2)能够从旧的输入/输出对（I1,O1）中推演而出。其中的关键就在于ΔP函数，它能够把输出的变化量与输入的变化量进行关联。|缩略图|增量计算从一个或多个输入/输入关系中派生出一对新的输入/输出。图中的ΔP将输入的变化量与输出的变化量进行关联，以实现上述目标。用户可能关注完整的输出内容，或部分更新的输出结果，抑或是对上述两者皆有所关注。

 静态实现和动态实现 
增量计算在技术实现上可以大致分为两种类型：

静态方法 试图从现有的程序P中派生出一个增量计算程序。例如可以采取进行程序的重新设计、程序重构的手段，或者使用工具自动生成增量计算程序。这种程序的转换需要发生在输入或是输入的变化量出现之前。

动态方法 记录运行中的程序P在接受某个特定输入（l1）时的信息。当这P接受另一个输入（l2）时，把这些信息用于计算并更新输出结果（从O1变化到O2）。图示中显示了：程序P；构成增量计算程序的核心的变化量计算函数ΔP；以及两组输入和输出（I1，O1和I2，O2）。

 专用实现和通用实现 
某一些实现增量计算的方法是只适用于特定程序的专用实现方法，但也有一些可以普遍适用于任何程序的通用方法。专用实现方法需要程序员特别指定用于保存未修改子计算的算法和数据结构。通用实现方法则会使用编程语言特性、编译器功能或者一些算法来给非增量计算程序赋予增量计算的行为。

 现有系统 

 编译器与编程语言支持 

 自动增量化（也称“自调节计算”和“适应性函数式计算”）
 康奈尔合成器生成器
 IceDust  - 定制化的领域特定语言（DSL）

 框架与程序库 

 Adapton 
 Jane Street Incremental 

 应用 

 数据库（视图维护）
 软件构建系统
 电子表格Hammer, Matthew; Phang, Khoo; Hicks, Michael; Foster, Jeffrey (2014). ADAPTON: Composable, Demand-Driven Incremental Computation  (PDF). PLDI.
 软件开发环境
 金融计算
 属性文法分析
 图计算和查询
 GUI （例如 React 和 DOM diffing）
 科学计算应用程序

 另请参阅 

 响应式编程
 函数式响应式编程
 记忆化
 双向转换

 参考文献 

Category:计算机编程
Category:程序分析