This course is no longer offered

20504 Workshop: Essentials of Programming Languages

Credits: 3 advanced credits in Computer Science

Prerequisites: At least 36 credits in Computer Science. Students must also fulfill all English requirements and take bibliographic instruction in the Library. Only students who have successfully completed, or are about to complete, at least one advanced course in Computer Science may enroll in a workshop. Workshop enrollment is subject to the written approval of the faculty member responsible for seminars.

Required: Data Structures and Introduction to Algorithms (or Data Structures), Automata Theory and Formal Languages, and at least two courses or workshops in which the following languages are taught: Pascal, C, C++, Ada, Prolog, Java.

Recommended: Compilation, Introduction to the Theory of Computation and Complexity,1 and knowledge of a language that supports object-oriented programming.

The course is based on Essentials of Programming Languages (2nd ed.), by D.P. Friedman, M. Wand, and C.T. Haynes (MIT Press, 2001).

Objective: To gain an in-depth and practical understanding of programming language fundamentals and principles. These constitute the basis for understanding future developments in programming languages and for mastery of existing languages. Most of the principles relate to the semantics of programming structures.

The workshop combines theoretical and practical study. The workshop assumes high-level programming skills. During the semester, a sequence of interpreters is written to demonstrate behavior and implementation issues in various programming languages. Workshop requirements include a final project in which the student demonstrates the concepts and tools acquired in the course. Projects may focus on the implementation of programming languages, programming language constructs (syntax and semantics) or on issues related to the programming style in various languages.

Topics: Functional programming and Scheme; Environment-passing interpreters (including variable binding and scoping, procedures, parameter passing and recursion); Continuation-passing interpreters (including a discussion of advanced control flow structures such as exceptions and concurrency); Object-oriented languages; Type systems of programming languages.


1or Computability and Introduction to Complexity (20365), which is no longer offered.