Abstract
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.
- Umut A. Acar, Guy E. Blelloch, Matthias Blume, and Kanat Tangwongsan. An experimental analysis of self-adjusting computation. In PLDI '06: Proceedings of the 2006 ACM SIGPLAN conference on Programming Language Design and Implementation, pages 96--107, New York, NY, USA, 2006. ACM Press. Google ScholarDigital Library
- Umut A. Acar, Guy E. Blelloch, and Robert Harper. Adaptive functional programming. In Symposium on Principles of Programming Languages, pages 247--259, 2002. Google ScholarDigital Library
- Thomas Ball, Rupak Majumdar, Todd D. Millstein, and Sriram K. Rajamani. Automatic predicate abstraction of c programs. In SIGPLAN Conference on Programming Language Design and Implementation, pages 203--213, 2001. Google ScholarDigital Library
- Mike Barnett, K. Rustan M. Leino, and Wolfram Schulte. The spec-sharp programming system: An overview. http://research. microsoft.com/specsharp/papers/krml136.pdf.Google Scholar
- M. Bender, R. Cole, E. Demaine, M. Farach-Colton, and J. Zito. Two simplified algorithms for maintaining order in a list. In Proceedings of the 10th Annual European Symposium on Algorithms (ESA 2002), 2002. Google ScholarDigital Library
- Yoonsik Cheon and Gary T. Leavens. A runtime assertion checker for the Java Modeling Language (JML). In Hamid R. Arabnia and Youngsong Mun, editors, Proceedings of the International Conference on Software Engineering Research and Practice (SERP '02), Las Vegas, Nevada, USA, June 24-27, 2002, pages 322--328. CSREA Press, June 2002.Google Scholar
- S. Chiba and M. Nishizawa. An easy-to-use toolkit for efficient java bytecode translators. In Proceedings of the second International Conference on Generative Programming and Component Engineering (GPCE'03), Erfurt, Germany, volume 2830 of LNCS, pages 364--376, September 2003. Google ScholarDigital Library
- Paul T. Darga and Chandrasekhar Boyapati. Efficient software model checking of data structure properties. SIGPLAN Not., 41(10):363--382, 2006. Google ScholarDigital Library
- Alan Demers, Thomas Reps, and Tim Teitelbaum. Incremental evaluation for attribute grammars with application to syntax-directed editors. In POPL '81: Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages 105--116, New York, NY, USA, 1981. ACM Press. Google ScholarDigital Library
- Matthew B. Dwyer, John Hatcliff, Roby Joehanes, Shawn Laubach, Corina S. Pasareanu, Robby, Hongjun Zheng, and W. Visser. Tool supported program abstraction for finite-state verification. In International Conference on Software Engineering, pages 177--187, 2001. Google ScholarDigital Library
- Hotjava 1.0 signature bug, 1997. http://www.cs.princeton.edu/sip/news/april29.html.Google Scholar
- Allan Heydon, Roy Levin, and Yuan Yu. Caching function calls using precise dependencies. ACM SIGPLAN Notices, 35(5):311--320, 2000. Google ScholarDigital Library
- Jso. http://shaneng.awardspace.com/#jso description.Google Scholar
- Gary T. Leavens, Albert L. Baker, and Clyde Ruby. JML: A notation for detailed design. In Haim Kilov, Bernhard Rumpe, and Ian Simmonds, editors, Behavioral Specifications of Businesses and Systems, pages 175--188. Kluwer Academic Publishers, 1999.Google ScholarCross Ref
- Yanhong A. Liu, Scott D. Stoller, Michael Gorbovitski, Tom Rothamel, and Yanni Ellen Liu. Incrementalization across object abstraction. In OOPSLA '05: Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications, pages 473--486, New York, NY, USA, 2005. ACM Press. Google ScholarDigital Library
- Yanhong A. Liu and Tim Teitelbaum. Systematic derivation of incremental programs. Science of Computer Programming, 24(1):1--39, 1995. Google ScholarDigital Library
- Bob Paige and J. T. Schwartz. Expression continuity and the formal differentiation of algorithms. In POPL '77: Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, pages 58--71, New York, NY, USA, 1977. ACM Press. Google ScholarDigital Library
- Robert Paige and Shaye Koenig. Finite differencing of computable expressions. ACM Trans. Program. Lang. Syst., 4(3):402--454, 1982. Google ScholarDigital Library
- W. Pugh and T. Teitelbaum. Incremental computation via function caching. In POPL '89: Proceedings of the 16th ACM SIGPLANSIGACT symposium on Principles of programming languages, pages 315--328, New York, NY, USA, 1989. ACM Press. Google ScholarDigital Library
- G. Ramalingam. Bounded incremental computation. Technical Report 1172, Univ. of Wisconsin, Madison, Computer Sciences Dept., 1210 West Dayton St., Madison, WI 53706, USA, 1993.Google Scholar
- G. Ramalingam and Thomas Reps. A categorized bibliography on incremental computation. In POPL '93: Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages 502--510, New York, NY, USA, 1993. ACM Press. Google ScholarDigital Library
- S. Graf and H. Saidi. Construction of abstract state graphs with PVS. In O. Grumberg, editor, Proc. 9th International Conference on Computer Aided Verification (CAV'97), volume 1254, pages 72--83. Springer Verlag, 1997. Google ScholarDigital Library
Index Terms
- DITTO: automatic incrementalization of data structure invariant checks (in Java)
Recommendations
DITTO: automatic incrementalization of data structure invariant checks (in Java)
PLDI '07: Proceedings of the 28th ACM SIGPLAN Conference on Programming Language Design and ImplementationWe 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 ...
Asynchronous assertions
OOPSLA '11: Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applicationsAssertions are a familiar and widely used bug detection technique. Traditional assertion checking, however, is performed synchronously, imposing its full cost on the runtime of the program. As a result, many useful kinds of checks, such as data ...
Asynchronous assertions
OOPSLA '11Assertions are a familiar and widely used bug detection technique. Traditional assertion checking, however, is performed synchronously, imposing its full cost on the runtime of the program. As a result, many useful kinds of checks, such as data ...
Comments