A very good writeup, but one thing always confuses me. What is meant specifically by the "heap" and "stack"? I know what a stack is, but "heap" gets thrown around in many different contexts and I've yet to find any explanation that made it clear. If anyone has a good explanation or good links for those two terms in this context, I'd be very grateful. Thanks! [EDIT: thanks everyone for the answers so far!]
* Stack: "control stack" -- a structure that tracks the context of an evaluation "step" in the program
* Heap: an environment that maps symbols to values (i.e a data structure that tracks the bindings of names to computations and results).