Programming Languages


Summer 2006



Class Notes

Info & Prerequisites

Course Outline




July 1 - Midterm

The midterm will be on Thursday, July 6. It will be a (roughly) 2 hour open-book (but no laptops) test. While you are free to bring in any material, the test is self-contained and should provide you with everything you need.

June 1 - Assignment 2 correction

I have corrected the second task in assignment 2.

May 31 - Midterm

The midterm is scheduled for Monday, July 3. This will be a short (one hour or under) open-book test.

May 22 - Assignment 1 Submission

The server is now set up to accept your submissions of Assignment 1. Note that you can submit multiple times, where each submission overrides the last one.

May 19 - Updated Homework Assignment

The assignment itself has not changed. However, I now recommend you use the Intermediate Student language in the programming task, rather than the G22.2110 Class Language. This will make your life easier. See the assignment itself for details.

May 18 - Homework Assignment

The first homework assignment, due in a week, is now online. Today's lecture notes are also available in the Class Notes page.

May 16 - Class notes

Notes from the first lecture have been posted here.

May 16 - Mailing List!

Please register for the course mailing list here. On a related note, if you plan to take this course, please register as soon as feasibly possible.

May 1:

The first lecture will take place during the recitation on Monday, May 15.

When and Where

Mondays 7:10-8:10 (recitation)

Thursdays 6:00-8:20 (lecture)

Both lecture and recitation will be in room 102 in WWH.


Ittai Balaban

balaban `at' cs `.' nyu `.' edu

Room 604, WWH

Office Hours: Monday 4:00-5:30


In this course we will examine some basic concepts that underly the design and use of progamming languages: Syntax, binding, functions, control structures, types, and concurrency. We will do this as both users and as designers of a language. As such, we will begin by studying the Scheme language and use it to define and implement our own toy language interpreter. As we study (and use!) concepts as implemented in various languages, we will extend our toy language, and consequently the interpreter, to support these.

Prerequisites: Some programming experience.

The "Feel" of the Course

For the most part we will be working in the DrScheme development environment, which provides us with a framework for implementation of our experimental languages on top of Scheme. Since I do not assume you have prior experience in Scheme and as the course backbone is developed in Scheme, I will begin with a Scheme tutorial. However, getting a feel for the language and environment really depends on you experimenting on your own, for example while reading one of the Scheme guides listed in the next section.

For object oriented programming we will be doing some Java programming. As an example of static typing, as well as for its concurrency features, we will also be looking at Ada.


The point of this course is to challenge, but not burden you with too much mundane programming. Rather, assignments will consist, on one hand, of exercises in the use of various language concepts (e.g., 1st order functions, recursion, polymorphism, etc.), and dually in incremental extensions of our toy language.

Most homework assignments will be submitted online securely to a "Homework Server", directly from within the DrScheme environment. The server will also provide up to date information about grades, solutions, etc. Concrete information about this will be posted shortly.


Much of the course is loosely based on Shriram Krishnamurthi's "Programming Languages: Application and Interpretation", which is available for free, courtesy of the author. A pragmatic Scheme tutorial is "Teach Yourself Scheme in Fixnum Days", available in DrScheme's Help Desk (in DrScheme: Help Help Desk, in the newly opened window click on the Program Design link). Another freely available book is "How to Design Programs" which, while not about Scheme specifically, provides an introduction to Scheme and the DrScheme environment. The ultimate, though less readable, Scheme reference, is the Scheme report (R5RS), which you can find online and in DrScheme's Help Desk.

The standard reference for Java is the Java Language Specification. A less terse tome is Arnold, Gosling, and Holmes' "The Java Programming Language". As for Ada, we will depend on Barnes' "Programming in Ada".


balaban `at' cs `.' nyu `.' edu
Last modified: Fri Jul 14 10:20:27 EDT 2006