Syllabus

Here is a chronological presentation of the course material.

  • Week 1. Introduction to functional programming and Haskell.
  • Week 2. Building an interpreter and operational semantics.
  • Week 3. Real language #1: Ruby.
  • Week 4. Real language #2: Io.
  • Week 5. Building an Interpreter: An object system.
  • Week 6. Real language #3: Prolog.
  • Week 7. Real language #4: Erlang.
  • Week 8. Building an interpreter: A functional programming language and denotational semantics.
  • Week 9. Real language #5: Scala.
  • Week 10. Building an interpreter for the lambda calculus.
  • Week 11. Real language #6: Clojure.
  • Week 12. Deeper into real language #7: Haskell.
  • Week 13. Deeper into the lambda calculus.

A conceptual view

Here is an orthogonal take on the material.

Language Design Choices

  • Different Languages Are Different
  • Compiled vs. Interpreted
  • Type System: Dynamic vs. Static, Save vs. Unsafe, Weak vs. Strong
  • Procedural, OO, or Functional
  • Pointers and Garbage Collection
  • Concatenative, Logical, and Array Languages
  • Concurrency and Parallelism

The Seven Languages

  • Ruby - Dynamic, OO
  • Io - Dynamic, Prototype-Based OO
  • Prolog - Logic Language
  • Erlang - Dynamic, Functional, Message-Passing Concurrecy
  • Scala - Static, Multi-Paradigm
  • Clojure - Dynamic, LISP, STM Concurrency
  • Haskell - Static Pure Functional