Course Description

This course introduces students to fundamental principles and techniques in the design and implementation of modern programming languages. The course covers these issues mainly as they relate to functional programming and object-oriented programming. The emphasis is on rigorous mathematical formalism and reasoning, both in describing programming languages (their syntax) and in analyzing their behavior (their semantics).

Topics include, but are not limited to: the lambda-calculus (LC) as a foundational language, type systems for LC, extensions of LC, references, exceptions, evaluation contexts, continuations, approaches to formal semantics (operational, axiomatic, domain theoretic), type checking and inference.


Tue, Thur 9:30 am - 11:00 am, in Room MCS B29.


According to the BU catalog, CS 320 and CS 332 should be sufficient preparation for taking this course. This is the formal requirement, but the course also presumes a level of intellectual maturity acquired by completing all 300-level courses in the BU CS curriculum, or equivalent courses elsewhere. In addition to learning the theoretical material, from the course textbook and handouts, students will be asked to implement (in Objective CAML) various algorithms presented in lectures. The transition to Objective CAML, a strongly-typed functional language with object-oriented features, should be relatively straightforward for students who have a good programming experience in other languages.

(Objective CAML is installed on and, but as of this writing, not yet installed on Objective CAML is also installed on the Linux machines in the CS Lab. To start an interactive Objective CAML session, type "ocaml" at the prompt and hit the "enter" key. To stop the interactive session, type "#quit;;" and hit "enter", or else press the "CTRL" key and hit the "d" key.)


Midterm Exam: Thursday, October 26, 9:30-11 am.  Solutions
Final Exam: Saturday, December 16, 9-11 am.  Solutions

The exams are closed book. You may, however, bring one 8.5 by 11 sheet of paper (i.e. one regular-size sheet of paper) as a crib sheet. Preparing a crib sheet can be a useful study aid, so take time in selecting material for it. You may use both sides of the paper and write as small as you like, but in any case, you are allowed only one sheet. No mechanical or electronic reproductions are allowed; the crib sheet must be hand written. If you hand in your crib sheet with your exam, you will get credit for it in your total grade for the exam.

Teaching Staff

Instructor -- Assaf Kfoury
       Office Hours: Tue, Thu 12:00-2:00 pm
       Location: MCS 176, e-mail:
Teaching assistant -- Rui Shi
       Office hours: Mon, Wed 3:00-5:00 pm
       Location: MCS 174, e-mail:

Mailing List

The course mailing list is named cs520 and is managed by IT's majordomo engine. All students registered for the course should add themselves to the mailing list. To join the course mailing list, type "csmail -a cs520" at the Unix prompt. To inspect who else is on the mailing list, type "csmail -p cs520". To remove yourself from the mailing list, type "csmail -r cs520".

Students are welcome to post messages and questions to the mailing list.  All messages to are archived (click here).

Books and Reading Material

Required: Programming Reference: Webpages of CS520 in past years:

Maintained by Assaf Kfoury
Created: 2006.07.25    Last modified: 2006.10.26