Language design; Programming language spectrum; Why study programming languages? Compilation and interpretation; Programming environments. Names, scope, and bindings: Concept of binding time; Object lifetime and storage management; Scope rules and implementing scope.
The binding of reference environments; Binding within a scope; Separate compilation. Control Flow – 1: Expression evaluation.
Structured and unstructured flow; Sequencing; Selection; Iteration; Recursion; Non-determinacy.
Type systems; Type checking; Records and variants; Arrays.
Strings; Sets; Pointers and recursive types; Lists; Files and Input/Output; Equality testing and assignment.
Review of stack layout; Calling sequences; Parameter passing; Generic subroutines and modules; Exception handling.
Control abstraction – 2: Coroutines. Data Abstraction, Object Orientation: Object oriented programming; Encapsulation and Inheritance; Dynamic method binding; Multiple inheritance; Object oriented programming revisited.
Functional Labguages: Origins; Concepts; An overview of scheme; Evaluation order revisited; Higher-order functions; Functional programming in perspective. Logic Languages: Concepts; Prolog; Logic programming in perspective. Scripting Languages: Common characteristics.