Course Review
-
Basic
Scheme
programming.
Specifying classes of data.
Inductive data definitions.
Recursive Functions
-
Representation Invariants.
Relating concrete representations to abstractions.
Data Abstractions.
- Specifying Programming Languages.
Concrete Syntax.
Abstract Syntax.
Semantics.
- Environments.
Expressed versus Denoted Values.
Variable binding and scope.
The LET language.
- First class procedures.
Lexical scope.
The PROC language.
Representing procedures.
- Recursive procedures.
The LETREC language.
Note the relationship between the new concrete environment
ADT extended with
extend-env-rec
and the
abstract mathematical environment that we are representing
with it.
- Computational effects.
The Store.
Explicit references.
Store-passing specifications.
- Implicit references.
Program transformations.
- Continuations as a way to reason about
program evaluation.
Continuations as an implementation artifact.
- Continuations as a programmer visible feature.
Exceptions.
Another example:
yield
in Python.
- Types.
Type safety.
Strongly typed languages.
Statically typed languages.
Static versus dynamic semantics.
Program analysis.
Constraint generation, constraint solving.
The halting problem.
Careful reading: "what is the type of
proc (x) x
."
- Continuations (again) as a programmer visible
feature.
Continuation-passing interpreters.
Exceptions (
try/catch
, throw
).
Nondeterministic choice.
Threads.
Globally angelic choice (choose
).
Restricted angelic choice (choose/cut
, fail
).
- Imperative threads.
Race conditions.
CAS
(aka compare-and-swap).
Reasoning about imperative multi-threading is
complicated.
- Objects, Modularity
Encapsulation.
Dispatch.
Subclassing.
Subtyping.
Last updated 14 April 2008.