A code sandwich consists of before, after, and body code. Typically, the before code makes some change, the body code works in the context of the change, and the after code undoes the change. A code sandwich must guarantee that its after code will execute if its before code has executed, even if exceptions arise. This pattern is common to many programming situations, and most modern languages have some language-level support for expressing it.
We survey support for code sandwiches in several programming languages and proposed language extensions. We explain why such support can improve a program, consider related features, and discuss desirable properties that a language can provide its programmers. We relate these properties to Jyro, our code sandwich extension to Java. We examine two large, mature open-source programs, find numerous sandwich-related bugs and readability issues, and demonstrate how they might be avoided using our Jyro implementation.
This paper is available as a PDF document.