Playlist | schedule page slides as PDF |
Continuation 1 — to-do lists (3:59)
Introducing continuations as a language implementation’s way of keeping track of what to do next.
Continuation 2 — representations (3:49)
Choosing a representation for Curly continuations.
Continuation 3 — interp (5:05)
Deriving the implementation interp with an explicit representation of continuations. See lambda-k.rkt.
Continuation 4 — interp traces (2:37)
A look at the implementation of interp and continue so far by tracing calls to those two functions (which now togther implement interpretation).
Continuation 5 — interp traces (4:15)
A look at the lambda and application cases of interp and continue, including tracing calls on another example.
Continuation 6 — loops (4:33)
Loops as infinite recursion versus non-loop recursion that eventually runs out of space. To demonstrate an infinite loop, we work through a long trace of interp and continue calls.
In case you don't like the sped-up portion of the video, a variant that keeps the steps slow is available here.
Continuation 7 — tail calls (4:28)
Recognizing loops versus space-bounded recursion syntactically.
Continuation 8 — reliably eager (0:46)
Runnng our new interpreter in lazy Plait still implements an eager language.