Learn How Programming Languages Work
RSS FeedLearn how programming languages work by building tiny interpreters that are small enough to understand as a whole and focused enough to make one language idea concrete. Elm is the current implementation language.
Recent Posts
FUN: Making Curried Functions Work in the Presence of Free Variables
Fix a subtle problem with currying and free variables by changing what FUN stores in a function value, uncovering closures along the way.
FUN: First-Class Functions, Currying, and a Surprise
Extend LET with first-class functions, then use currying and partial application to uncover an unexpected consequence of how function calls are evaluated.
LETDEP: Dependency-Ordered Binding Semantics for let Expressions
LETDEP gives multiple-binding let expressions dependency-ordered binding semantics: initializer dependencies determine the evaluation order, allowing forward references while rejecting duplicate names and cyclic bindings.
LETSEQ: Sequential Binding Semantics for let Expressions
LETSEQ gives multiple-binding let expressions sequential binding semantics: bindings are evaluated in source order, with each new binding becoming available to the ones that follow it.
LETPAR: Parallel Binding Semantics for let Expressions
LETPAR gives multiple-binding let expressions parallel binding semantics: every initializer is evaluated in the incoming environment, so sibling bindings cannot see one another.