Debugging hygienic macros

  • Authors:
  • Ryan Culpepper;Matthias Felleisen

  • Affiliations:
  • College of Computer and Information Science, Northeastern University, Boston, MA 02115, USA;College of Computer and Information Science, Northeastern University, Boston, MA 02115, USA

  • Venue:
  • Science of Computer Programming
  • Year:
  • 2010

Quantified Score

Hi-index 0.00

Visualization

Abstract

Over the past two decades, Scheme macros have evolved into a powerful API for the compiler front end. Like Lisp macros, their predecessors, Scheme macros expand source programs into a small core language; unlike Lisp systems, Scheme macro expanders preserve lexical scoping, and advanced Scheme macro systems handle other important properties such as source location. Using such macros, Scheme programmers now routinely develop the ultimate abstraction: embedded domain-specific programming languages. Unfortunately, a typical Scheme programming environment provides little support for macro development. This lack makes it difficult for programmers to debug their macros and for novices to study the behavior of macros. In response, we have developed a stepping debugger specialized to the concerns of macro expansion. This debugger presents the macro expansion process as a linear rewriting sequence of annotated terms; it graphically illustrates the binding structure of the program as expansion reveals it; and it adapts to the programmer's level of abstraction, hiding details of syntactic forms that the programmer considers built-in.