programming languages course

The goal of this course

It helps to learn the fundamental concepts that appear in one form or another in almost every programming language. They will get some sense of how these concepts “fit together” to provide what programmers need in a language and use different languages to see how they can take complementary approaches to representing these concepts.

Approximate list of specific course topics

Part A:

  • Syntax vs. semantics vs. idioms vs. libraries vs. tools
  • ML basics (bindings, conditionals, records, functions)
  • Recursive functions and recursive types
  • Benefits of no mutation
  • Algebraic datatypes, pattern matching
  • Tail recursion
  • Higher-order functions; closures
  • Lexical scope
  • Currying
  • Syntactic sugar
  • Equivalence and effects
  • Parametric polymorphism and container types
  • Type inference
  • Abstract types and modules

Part B:

  • Racket basics
  • Dynamic vs. static typing
  • Laziness, streams, and memoization
  • Implementing languages, especially higher-order functions
  • Macros
  • Eval

Part C:

  • Ruby basics
  • Object-oriented programming is dynamic dispatch
  • Pure object-orientation
  • Implementing dynamic dispatch
  • Multiple inheritance, interfaces, and mixins
  • OOP vs. functional decomposition and extensibility
  • Subtyping for records, functions, and objects
  • Class-based subtyping
  • Subtyping
  • Subtyping vs. parametric polymorphism; bounded polymorphism