University of Virginia, Department of Computer Science
CS655: Programming Languages
Spring 2000


Course Description

The goal of this course is to provide students with the background they need to design, use and understand programming languages. The course will cover the history of programming languages, general design principles, the theory behind the meaning of programming languages, and current research issues.

Course meetings: Tuesdays and Thursdays, 12:30-1:45 in Olsson 011.

Textbook: No required text. Course will revolve around reading research papers. A list of recommended books for background reading is available at

Expected background: Experience programming in several different languages, some compiler experience, a theory course. Undergraduates who have not taken CS415 must obtain permission of the instructor to take this course.

Web page: - Check this page frequently for couse announcements. All lectures and assignments will be available on the web.

Email: Instructor and TA. We answer this religiously. If you don't get an answer within 8 hours something is wrong. Goes to all students in the class and staff. Students should only mail this list for important announcements.
Instructor: David Evans

phone x2-2218 (office), (804) 825-0207 (mobile)
officeOlsson, 236A
office hoursMonday 1:30-2:30; Thursdays after class; other times, by email appointment.

TA: John Haskins, Jr.


There will be approximately seven position papers and four problems sets.


This is a paper-driven course. It is important that students read the assign papers and come to class prepared to discuss them.

Position Papers

Position papers are short essays that answer a directed question based on the readings. Position papers are not book reports - they are a chance for you to make bold claims and use coherent arguments to defend them. Position papers will be graded subjectively on an unbounded scale - technical clarity, clear writing, organized presentation, and creativity count. Read before writing your first position paper.

Problem Sets

Problem sets will ask more concrete questions. Occasionally, a small amount of programming may be involved, but most problem sets will be pencil and paper questions.


Students will work in groups for 2-4 (individual projects permitted only under special circumstances) to complete a project relating to programming languages. See for some project ideas.

Final Exam

There will be an oral final exam covering the whole course and scheduled near the end of term.

Collaboration Policy

Your fellow students are your best resource. Students are encouraged to discuss readings, position paper questions and problem sets in study groups. Everything you turn in should be your own work, and writing should always be done independently.

Students are also encouraged to consult outside experts - many of the authors of papers we read are easily available by email. (Note: if they get annoyed by your questions, don't say I sent you!)

Always list the resources you used (students, outside experts, papers, web sites) on your submission.


Grading will be based on approximately the following weighting (but it is possible to get more than 100% of the points in a particular category, and we will adjust the weights as necessary):

Project30% Position Papers30%
Problem Sets20% Exam20%


Introduction and Background
Thursday, 20 JanuaryIntroduction: Why programming languages matter?
Thursday, 27 JanuaryOperational Semantics
Tuesday, 1 FebruaryMilestones in Programming Languages, Before Algol
Structured Languages
Thursday, 3 FebruaryAlgol60
Tuesday, 8 FebruaryAlgol successors: Algol68, Bliss, C, Pascal
Data Languages
Thursday, 10 FebruaryTypes
Tuesday, 15 FebruaryData Abstraction (CLU), Reasoning about Data Abstractions
Thursday, 17 FebruaryWhat Is Object-Oriented Programming?
Tuesday, 22 FebruaryWhen is Subtyping Safe?
Thursday, 24 FebruaryObject-Oriented Languages
Tuesday, 29 FebruaryGuest Lecture by John Viega: Multiple Inheritance and Automated Delegation
Thursday, 2 MarchAxiomatic Semantics and Program Verification
Tuesday, 7 MarchProof-Carrying Code
Thursday, 9 MarchLambda Calculus
Spring Break, 11 March - 19 MarchPonder the power of Lambda
Functional Languages
Tuesday, 21 MarchFixed Points
Thursday, 23 MarchFunctional Languages, Type Inference
Mock Trial
Tuesday, 28 MarchMock Trial Part 1: Openings, Prosecution Witnesses
Thursday, 30 MarchMock Trial Part 2: Defense Witnesses, Closings
Denotational Semantics
Tuesday, 4 AprilDenotational Semantics
Thursday, 6 AprilType Inference Revisited
Concurrent Programming
Tuesday, 11 AprilMonitors, Transactions
Thursday, 13 AprilDataflow Languages: Id
Research Topics
Tuesday, 18 AprilAspect-Oriented Programming
Thursday, 20 AprilGuest Lecture: John Thornley
Tuesday, 25 AprilStatic Checking, Type Qualifiers
Thursday, 27 AprilOther Ways to Program
Project Presentations
Monday, 1 May, 6:30pm-9pm Student project presentations, in the Rotunda Lower West Oval Room
PL Jeopardy
Tuesday, 2 MayWho wants to be a hecto-billionaire?

CS 655 University of Virginia
CS 655: Programming Languages
Last modified: Mon Feb 26 12:48:27 2001