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.
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.
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".