Programming Languages

CSCI-GA.2110-001
Summer 2016

Course Outline

This outline is subject to change, but should give you some idea of what will be covered and when.

  1. May 24, 2016 
    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.

     
  2. May 31, 2016
    I
    mperative languages. names, binding, scope, lifetime, nesting, control structures.
    Readings: Scott, ch 3

     
  3. June 7, 2016
    Subprograms: functions and procedures. Parameter passing. Nested procedures. First-class and higher-order functions. Implementation issues.
    Readings: Scott, ch 6, 8.1 - 8.3

     
  4. June 14, 2016
    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)
      
  5. June 21, 2016
    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

     
  6. June 28, 2016 - Midterm exam (in class)
     
  7. July 5, 2016 - Legislative Day - No Class (Monday schedule in effect)

  8. July 12, 2016
    Garbage collection, allocation/deallocation, reference counting, concurrent programming.
    Readings: Scott, ch. 7

     
  9. July 19, 2016
    Overview of ML. Pattern matching, type inference, data types, pattern matching, continuations.
    Readings: Ullman, ch 1-4, 5 (optional)

     
  10. July 26, 2016
    Overview of Prolog. Logical programming, goals, subgoals, backtracking, unification.
    Readings: Scott, ch. 11 (including 11.3 on CD)

     
  11. August 2, 2016
    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.

     
  12. August 9, 2016
    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).

     
  13. August 16, 2016 - Final exam (in class).