This outline is subject to change, but should give you some idea of what will be covered and when.
May 28, 2013
Course overview. History, standards, syntax, semantics, grammars, parsing.
Readings: Scott, ch 1 - 2
See resources folder for language standards documents: C99, C++ 2003, C++0x, and JLS7.
June 4, 2013
Imperative languages. names, binding, scope, lifetime, nesting, control structures.
Readings: Scott, ch 3
June 11, 2013
Subprograms: functions and procedures. Parameter passing. Nested procedures. First-class and higher-order functions. Implementation issues.
Readings: Scott, ch 6, 8.1 - 8.3
June 18, 2013
Functional programming. Overview of the lambda calculus and Scheme.
Readings: Scott, ch. 10 (including 10.6.1 on the CD),
Dybvig ch. 1,2 (optional)
June 25, 2013
Data types and representation. Typing: strong vs. weak, static vs. dynamic. Type declarations, type equivalence, type inference. Subtypes and derived types. Scalar and composite types (arrays, records, variant records). Pointers and references.
Readings: Scott, ch. 7
Midterm exam, July 2 (in class). Garbage collection, allocation/deallocation, reference counting, concurrent programming.
Readings: Scott ch 7.7.3
July 9, 2013
Overview of ML. Pattern matching, type inference, data types, pattern matching, continuations.
Readings: Ullman, ch 1-4, 5 (optional)
July 16, 2013
Overview of Prolog. Logical programming, goals, subgoals, backtracking, unification.
Readings: Scott, ch. 11 (including 11.3 on CD)
July 23, 2013
Program structure: Modules, packages, and interfaces. Abstract types and information hiding. Exception handling.
Readings: Scott ch 3.3.4-3.3.5, 3.7 (review), 8.5.
July 30, 2013
Concurrent programming: threads, tasks, synchronization, communication. Generic programming and templates in C++, Java, and ML. Containers and iteration.
Readings: Scott ch. 8.4-5,12, Stroustrup ch. 8.3, 13, 18 (optional), Barnes ch. 18. (optional), Arnold ch. 12, 14 (optional).
August 6, 2013
To be announced.
August 13, 2013, Final exam.