DITTO: automatic incrementalization of data structure invariant checks (in Java)

We present DITTO, an automatic incrementalizer for dynamic, side-effect-free data structure invariant checks. Incrementalization speeds up the execution of a check by reusing its previous executions, checking the invariant anew only the changed parts of the data structure. DITTO exploits properties specific to the domain of invariant checks to automate and simplify the process without restricting what mutations the program can perform. Our incrementalizer works for modern imperative languages such as Java and C#. It can incrementalize,for example, verification of red-black tree properties and the consistency of the hash code in a hash table bucket. Our source-to-source implementation for Java is automatic, portable, and efficient. DITTO provides speedups on data structures with as few as 100 elements; on larger data structures, its speedups are characteristic of non-automatic incrementalizers: roughly 5-fold at 5,000 elements,and growing linearly with data structure size.

[1]  G. Ramalingam Bounded Incremental Computation , 1996, Lecture Notes in Computer Science.

[2]  Yoonsik Cheon,et al.  A Runtime Assertion Checker for the Java Modeling Language (JML) , 2003, ICSE 2003.

[3]  Allan Heydon,et al.  Caching function calls using precise dependencies , 2000, PLDI '00.

[4]  Hassen Saïdi,et al.  Construction of Abstract State Graphs with PVS , 1997, CAV.

[5]  Muga Nishizawa,et al.  An Easy-to-Use Toolkit for Efficient Java Bytecode Translators , 2003, GPCE.

[6]  Chandrasekhar Boyapati,et al.  Efficient software model checking of data structure properties , 2006, OOPSLA '06.

[7]  K. Rustan M. Leino,et al.  The Spec# Programming System: An Overview , 2004, CASSIS.

[8]  Matthew B. Dwyer,et al.  Tool-supported program abstraction for finite-state verification , 2001, Proceedings of the 23rd International Conference on Software Engineering. ICSE 2001.

[9]  J. T. Schwartz,et al.  Expression continuity and the formal differentiation of algorithms , 1977, POPL 1977.

[10]  Thomas W. Reps,et al.  Incremental evaluation for attribute grammars with application to syntax-directed editors , 1981, POPL '81.

[11]  Yanhong A. Liu,et al.  Incrementalization across object abstraction , 2005, OOPSLA '05.

[12]  Thomas W. Reps,et al.  A categorized bibliography on incremental computation , 1993, POPL '93.

[13]  Robert Paige,et al.  Finite Differencing of Computable Expressions , 1982, TOPL.

[14]  Yanhong A. Liu,et al.  Systematic Derivation of Incremental Programs , 1995, Sci. Comput. Program..

[15]  Guy E. Blelloch,et al.  Adaptive functional programming , 2002, POPL '02.

[16]  Guy E. Blelloch,et al.  An experimental analysis of self-adjusting computation , 2009 .

[17]  Albert L. Baker,et al.  JML: A Notation for Detailed Design , 1999, Behavioral Specifications of Businesses and Systems.

[18]  William Pugh,et al.  Incremental computation via function caching , 1989, POPL '89.

[19]  Richard Cole,et al.  Two Simplified Algorithms for Maintaining Order in a List , 2002, ESA.