COS 441 Programming Languages: Summary - May 2, 1996
This summary is a complete list of the topics we have covered
during this course, roughly in the order in which we covered them.
- syntax - lexical elements, BNF, context-sensitive constraints
- parsing and abstract syntax
- identifier binding - free variables, bound variables
- basic recursive programming, inductively defined data
- syntactic abstraction - when to use it, capture
- data abstraction
- finite functions (environments)
- first-order transformation
- meta-circular interpeters
- first-order interpreters
- lexical scope, dynamic scope
- dynamic assignment
- parameter passing: call-by-value, call-by-reference, call-by-value-result, call-by-name, call-by-need
- thunks, force, delay
- continuation-passing style
- continuation-passing interpreters
- implementing the CPS transformation
- control operators - abort, catch/throw, call/cc
- reduction semantics - including control operators
- lambda calculus - beta, alpha, eta
- exceptions, breakpoints, coroutines, thread systems
- assignment - store passing
- registerization (imperative form in EOPL)
- garbage collection - mark/sweep, stop and copy, generational, conservative, reference counting, stack allocation
- streams - samefringe
- natural semantics
- type checking, type inference, unification, polymorphism (substitution rule), type soundness
- modules and abstract datatypes, signatures, signature matching, parameterized modules
- object systems, classes, delegation
- inheritance, static vs. dynamic inheritance, multiple inheritance
- static typing for object-oriented languages - subclassing vs. subtyping
- interfaces, abstract methods and classes
- when to use datatypes, when to use OOP
- logic programming - Horn clauses, Prolog, cut