Design of Programming Languages
- Programming Languages, Computational Models, Classes of Programming Languages, Language and Computability
- Syntax Specification, Grammars, and Concrete and Abstract Syntax
- Dynamic Semantics, Operational and Denotational Semantics
- Lambda Calculus: Syntax, Semantics, and Recursive Functions
- Functional Programming Languages: Lisp and ML
- Static Semantics: Type Systems, Safe Languages, Typed Lambda Calculus, Type Inference
- Functional Programming Languages: Haskell
- Scope, Functions, and Memory Management: Block-Structured Languages, Activation Records, and Closures
- Higher-Order Functions and Parameter Passing
- Control in Sequential Languages: Structured Control, Exceptions, Continuations, Functions and Evaluation Order
- Modularity and Abstraction
- Object-Oriented Programming
- Concurrent and Distributed Programming: Basic Concepts in Concurrency, Actor Model, Core Calculus of Concurrency, Concurrent ML, Concurrency in Java
- Logic Programming: Concepts of First-Order Logic, Resolution, Prolog
- Proof-Assistant Tools