增量计算

增量计算是一种软件功能 。当一部分的数据产生了变化,就仅对该产生变化的部分进行计算和更新,以节省计算时间。[1][2][3] 相比于简单地重复计算完整的输出内容,增量计算能够显著地节省计算时间。 比如,电子表格会在实现重计算功能时使用增量计算,只重新计算并更新那些含有公式且被直接或间接地改变了的单元格。

用于帮助开发者自动实现增量计算的工具,可以被看作是帮助程序优化的程序分析工具。

增量计算提供一种计算方法,使得新的输入/输出对(I2,O2)能够从旧的输入/输出对(I1,O1)中推演而出。其中的关键就在于ΔP函数,它能够把输出的变化量与输入的变化量进行关联。
增量计算从一个或多个输入/输入关系中派生出一对新的输入/输出。图中的ΔP将输入的变化量与输出的变化量进行关联,以实现上述目标。用户可能关注完整的输出内容,或部分更新的输出结果,抑或是对上述两者皆有所关注。

静态实现和动态实现

增量计算在技术实现上可以大致分为两种类型:

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

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

专用实现和通用实现

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

现有系统

编译器与编程语言支持

  • 自动增量化(也称“自调节计算”和“适应性函数式计算”)[4]
  • 康奈尔合成器生成器[5]
  • IceDust页面存档备份,存于互联网档案馆) - 定制化的领域特定语言(DSL)

框架与程序库

应用

  • 数据库(视图维护)
  • 软件构建系统
  • 电子表格[6]
  • 软件开发环境
  • 金融计算
  • 属性文法分析
  • 图计算和查询
  • GUI (例如 React 和 DOM diffing)
  • 科学计算应用程序

另请参阅

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

参考文献

  1. ^ Carlsson, Magnus. Monads for incremental computing. Proceedings of the seventh ACM SIGPLAN international conference on Functional programming - ICFP '02 (Pittsburgh, PA, USA: ACM Press). 2002: 26–35. ISBN 9781581134872. doi:10.1145/581478.581482 (英语). 
  2. ^ Umut A. Acar (2005). Self-Adjusting Computation页面存档备份,存于互联网档案馆 (PDF)(Ph.D. thesis).
  3. ^ Demetrescu, Camil; Finocchi, Irene; Ribichini, Andrea. Reactive imperative programming with dataflow constraints. Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications - OOPSLA '11 (Portland, Oregon, USA: ACM Press). 2011: 407. ISBN 9781450309400. doi:10.1145/2048066.2048100 (英语). 
  4. ^ Hammer, Matthew A.; Acar, Umut A.; Chen, Yan. CEAL: a C-based language for self-adjusting computation. Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation - PLDI '09 (Dublin, Ireland: ACM Press). 2009: 25. ISBN 9781605583921. doi:10.1145/1542476.1542480 (英语). 
  5. ^ Reps, Thomas; Teitelbaum, Tim. The synthesizer generator. Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments - SDE 1 (Not Known: ACM Press). 1984: 42–48. ISBN 9780897911313. doi:10.1145/800020.808247 (英语). 
  6. ^ Hammer, Matthew; Phang, Khoo; Hicks, Michael; Foster, Jeffrey (2014). ADAPTON: Composable, Demand-Driven Incremental Computation页面存档备份,存于互联网档案馆 (PDF). PLDI.