Princeton University
Computer Science Dept.

Computer Science 441
Programming Languages

Kim Bruce

Fall 1998

General Information | Schedule and Readings | Assignments | Handouts | Course Newsgroup | What's New?

Concepts and structures governing the design and implementation of modern programming languages. Run-time representations of traditional block structured languages, typing systems, abstraction and procedure mechanisms, and storage management. Special emphasis on object-oriented and functional languages, their type systems, and operational & denotational semantics. Prerequisites COS 217 and COS 226.

General Information

Lectures: T,Th at 9:00am-10:20am, CS 302.

Professor: Kim B. Bruce, 407 CS Building, 258-4633, kb@cs

Tentative Office Hours: M & W 1:30-2:30, T & Th 10:30-11:30 and by appointment (I'll be off campus consulting on Fridays ).

Final Exam

The final exam is now available. It must be turned in to Tina McCoy in room 410 by noon on Friday, January 15.

Course Description

A programming language is a programmer's principal interface with the computer. As such, the choice of an appropriate language can make a large difference in a programmer's productivity. The goal of this course is to present a comprehensive introduction to the principal features and overall design of both traditional and modern programming languages. As such you will be examining language features both in isolation and in the context of a more complete language description. While we will examine features of older imperative programming languages like Pascal and C, we will concentrate on features and programming paradigms introduced in more recent languages in response to problems in writing programs in these earlier languages.

At the end of this course you should have a more thorough understanding of why certain programming language features provide more support for the production of reliable programs, while others are fraught with ambiguity or other problems. Since programming languages mediate between the programmer and the raw machine, we will also gain a deeper understanding of how programming languages are compiled, what actually happens when a program is executed on a computer, and how the programming language design affects these. As an example, by the end of the course, you should be able to understand the strengths and weaknesses of Java as compared to C++, and why changes have been proposed to strengthen the design.

One of the more important features of this course is the introduction to more recent programming language paradigms (in particular, languages which support new ways of thinking about implementing algorithms). We’ll pay the most attention to functional and object-oriented languages as posing special opportunities and problems. You will investigate both new programming features and the software engineering problems which spawned these developments

This course will involve extensive reading on your part in the required texts and in outside sources. The segments of the course which introduce new programming language paradigms will also feature some programming in languages representative of the functional and object-oriented paradigms (ML and a polymorphic extension of Java — not Microsoft's!).

Problems involving analysis of programming language features will be assigned and due most weeks during the term. Homework will generally be due at the beginning of class on Tuesdays. Each student may use a maximum of two late days during the course of the semester (note that weekend days count). Once those late days are used up, late homework will not be accepted. The take-home midterm and final exams will cover both lectures and readings. The midterm will be handed out during the first week after fall break. Final grades will be determined as follows: Midterm: 20%, Final Exam: 30%, Homework and programs: 50%.