CS 421: Programming Languages and Compilers
Syllabus and Study Guide for the Final Exam

Studying for this exam

[top]

  • Understand the lecture slides and discussions thoroughly.
  • Revisit the MPs and make sure you understand the solutions thoroughly. Repeat any you are not comfortable with.
  • Do the sample exam questions as a dry-run for the actual exam.
  • Revisit the midterm and practice midterm questions.

Syllabus

[top]

The exam is comprehensive: it will cover all the lectures in the course. Listed here are topics not previously listed in the Midterm Syllabus. The following give examples of the kinds of questions you are likely to be asked for each topic:

  • Runtime systems and garbage collection
    • Memory organization (stack, heap, ...)
    • Garbage collectors
  • Programming language history, APL
    • Name or identify some well-known imperative, functional and O-O languages
    • Know the common operators, such as those used in the MP.
    • Be able to read and understand APL code (in OCaml)
    • Be able to write simple APL functions without recursion
  • Higher-order functions
    • Know the commonly-used map, fold_right and fold_left functions.
    • Be able to write code using h-o functions, without explicit recursion.
    • Represent data structures and operations on them as h-o functions.
    • Function objects -- use functional programming in imperative languages like Java.
  • Inference (proof) systems
    • Be able to read and understand proof trees.
    • Understand and apply axioms, judgments, and rules of inference.
    • (Note: no need to memorize specific rules; they will be provided if needed.)
    • Write proofs for judgments expressed in this manner.
  • Type systems
    • Understand the Tocaml type system
    • Be able to type check (prove the type of) OCaml expressions.
  • Operational semantics
    • Understand the differences between OSsubst, OSclo, OSstate
    • Be able to write derivations for expression evaluation
  • Hoare logic
    • Know the rules of inference (especially rule of consequence, while, and assignment)
    • Be able to determine the invariant for a while loop
    • Prove partial correctness of simple programs
    • Prove termination by specifying a phi function for loops
  • Advanced topics
    • Lazy evaluation: be able to evaluate expressions using this method, including infinite expressions
    • Lambda-calculus: using Church numerals, applying beta-reduction, representing operations
    • Parallel programming: fundamentals, MapReduce, async workflows
    • ActorNet: not on the exam