增量计算(),又称增量计算法,是一种软件特性。当部分数据变化时,增量计算试图仅重新计算那些依赖于变化的数据的输出,以节省计算时间。 相比于简单地重新计算完整的输出内容,增量计算能够显著地节省计算时间。 比如,电子表格的重计算功能可能会采用增量计算的方式,只有当单元格含有的公式直接或间接依赖于发生变化的其他单元格时,该单元格才会被更新。
当一个工具能够自动地为各种不同的代码实现增量计算时,该工具可被视为一种用于优化的程序分析工具。
静态实现和动态实现
增量计算在技术实现上可以大致分为两种类型:
静态方法 试图从现有的程序P中派生出一个增量计算程序。例如可以采取进行程序的重新设计、程序重构的手段,或者使用工具自动生成增量计算程序。这种程序的转换需要发生在输入或是输入的变化量出现之前。
动态方法 记录运行中的程序P在接受某个特定输入(l1)时的信息。当这P接受另一个输入(l2)时,把这些信息用于计算并更新输出结果(从O1变化到O2)。图示中显示了:程序P;构成增量计算程序的核心的变化量计算函数ΔP;以及两组输入和输出(I1,O1和I2,O2)。
专用实现和通用实现
某一些实现增量计算的方法是只适用于特定程序的专用实现方法,但也有一些可以普遍适用于任何程序的通用方法。专用实现方法需要程序员特别指定用于保存未修改子计算的算法和数据结构。通用实现方法则会使用编程语言特性、编译器功能或者一些算法来给非增量计算程序赋予增量计算的行为。
现有系统
编译器与编程语言支持
- 自动增量化(也称“自调节计算”和“适应性函数式计算”)
- 康奈尔合成器生成器
- [https://github.com/MetaBorgCube/IceDust IceDust] - 定制化的领域特定语言(DSL)
框架与程序库
- [http://adapton.org/ Adapton]
- [https://github.com/janestreet/incremental Jane Street Incremental]
应用
- 数据库(视图维护)
- 软件构建系统
- 电子表格
- 软件开发环境
- 金融计算
- 属性文法分析
- 图计算和查询
- GUI (例如 React 和 DOM diffing)
- 科学计算应用程序
另请参阅
- 响应式编程
** 函数式响应式编程
- 记忆化
- 双向转换
参考文献
评论 (0)