Programming Languages

Fall 2005
Tuesday 5:00 - 6:50
Room 109, Warren Weaver Hall
Professor Edmond Schonberg

Instructor: Edmond Schonberg (
Office hours: Room 410, WWH, Tuesday 3:00 to 4:30 pm, and by appointment.
Teaching Assistants:
Abhijit Guria (
Office hours WWH 427, Thursday 1:30 pm to 3:00 pm, and by appointment.
Yeting Ge (
Office hours: WWH 408, Wednesday 1:30 pm to 3:00 pm and by appointment.


We will examine basic concepts underlying the design of modern programming languages: types, control structures, abstraction mechanisms, inheritance, concurrency, constructs for programming in the large, etc. This is not a programming course per se, but there will be programming assignments in several languages, imperative and functional. The languages are chosen because of the interest of their features, and not necessarily because of their wide use. We will touch on Ada, C++, C#, Java, LISP, ML, Python, Scheme, and mention many others.
Course Outline


Undergraduate courses in data structures and algorithms, familiarity and programming experience with one of the following: C, C++, Ada,Java, or Pascal.

Course Work

Programming assignments, final examination, roughly in the same weight, i.e. the final represents half of the grade.


Assignment 1
Assignment 2
Assignment 3
Assignment 4
Assignment 5 (Scheme)
Assignment 6 (your choice)
sample final exam

Programming Examples



Michael Scott: Programming Language Pragmatics (Morgan Kaufman 2000)
This is a excellent recent text that covers both language design and compiler fundamentals. In your readings for this course you don't need to study sections that deal with translation and compiler construction issues, but that material is interesting, and you will examine it in more detail when you take the Compiler Construction course. The second edition of the book has just appeared, but you can use the first edition if you have a copy of it.

Recommended :

John Barnes: Programming in Ada95 Addison Wesley
We will study Ada in some detail, because the language design highlights some fundamental issues about programming in general. This is the standard text on the language. We will also use on-line materials listed below.
You must have some good text on C++ and on Java. For C++ the 3rd edition of Stroustrup: the C++ programming Language, is the standard reference. For Java, the language definition is given in: Gosling, Joy and Steele: the Java Language Specification. For both languages, there are several introductory texts by Horstmann that are very well-written, and innumerable others.
We will discuss functional languages, specifically Scheme and ML, for which there is abundant on-line documentation. The older book by Ravi Sethi: Programming Languages, Concepts and Constructs, has several good chapters on functional languages.
We will discuss scripting and so-called very high level languages, and focus on Python and Perl, There is abundant on-line documentation for both, and several programming texts and users guides from O'Reilly.

Class list

All students should register themselves with the class list, which is used for all technical discussions concerning the course. To register, go to the following web page, and follow the instructions:

You can also subscribe by sending an e-mail message to The contents of the message should be the single line:
     subscribe g22_2110_001_fa05
you will be notified in return that you are a list participant. Please send all your questions to this list (not to the instructor) so that everyone can participate.


You are free to do the programming assignments on any machine you choose, either the NYU servers, some other machine at work, or a personal computer at home. For each programming assignment, Indicate what compiler you used.

Compilers for Ada

The GNAT compiler is installed on the CS servers. To access the system, place the directory /usr/local/pkg/gnat/bin in your path. The basic compilation command is gnatmake. If your test program is called numbers.adb, you create an executable for it simply by writing:

gnatmake numbers.adb

which you can execute by writing: ./numbers

If you want to compile a single file, write:

gcc -c numbers.adb

You can also download a (more recent) version of the compiler for your own machine (Windows, Linux, or MAC OS X). Go to this site for information and download.