Graph explorer

Stepping Lazy Programs

Debugging lazy functional programs poses serious challenges. In support of the "stop, examine, and resume" debugging style of imperative languages, some debugging tools abandon lazy evaluation. Other debuggers preserve laziness but present it in a way that may confuse programmers because the focus of evaluation jumps around in a seemingly random manner. In this paper, we introduce a supplemental tool, the algebraic program stepper. An algebraic stepper shows computation as a mathematical calculation. Algebraic stepping could be particularly useful for novice programmers or programmers new to lazy programming. Mathematically speaking, an algebraic stepper renders computation as the standard rewriting sequence of a lazy lambda-calculus. Our novel lazy semantics introduces lazy evaluation as a form of parallel program rewriting. It represents a compromise between Launchbury's store-based semantics and a simple, axiomatic description of lazy computation as sharing-via-parameters. Finally, we prove that the stepper's run-time machinery correctly reconstructs the standard rewriting sequence.

6 nodes5 linksoverview previewStepping Lazy Programs
6 nodes5 links
Stepping Lazy Programs6 visible / 6 total nodes / 11 links
Co-authorshipCo-authorshipCo-authorshipCo-authorshipCo-authorshipCo-authorshipAuthorshipAuthorshipAuthorshipAuthorshipTopic signalWStepping Lazy Programspreprint / 2011AStephen ChangResearcherAJohn ClementsResearcherAEli BarzilayResearcherAMatthias FelleisenResearcherTProgramming Languages1239 works
PaperSignal 105 links

Stepping Lazy Programs

preprint / 2011

Open