91.531 Design of Programming Languages, Spring 2013
We will be using the following books:
According to the catalog, 91.531 Design of Programming Languages is...
A one-semester course designed to provide students with hands-on understanding of the underlying concepts of programming languages, the principles of their design, and the fundamental methods for their implementation. An executable metalanguage such as Scheme or SML is used throughout the course, facilitating the design of high-level, concise interpreters that are easy to comprehend. The approach is analytical because the salient features of the imperative, functional, object-oriented, and logic programming paradigms are described in the executable meta-language.
This is a concise and accurate description what we will do. However, if you understood exactly what this paragraph is saying, you've probably already taken a similar course or acquired the self-same knowledge.
Here's another take at a description. There are two parallel strands that we'll develop in the class:
The implementation work will all be done using Haskell, a pure functional programming language. Thus, in an update to the catalog description, we'll be using Haskell (not Scheme or Standard ML) as the “executable metalanguage.”
With this approach, (a) we'll get practical experience using a variety of great practical languages that, as a group, demonstrate most of the important ideas in language design, and (b) we'll learn how to build these systems.
The course texts are shown above. The 7 Languages text is required and will be heavily used. Please buy it immediately. The Haskell text is freely available online, and you are welcome to use the web resources.
We will use a custom online system called Bottlenose to deliver:
You will receive a link from the Bottlenose server in your email. If you lose it, you can enter your email address at the Bottlenose home page to have it re-sent.
Programming assignments receive an auto-assessment grade, which is generated by the server shortly after upload. This grade is simply the fraction of tests that the assignment completes successfully. The final assignment grade may be adjusted up or down by the instructors.
An assignment may be submitted as many times as desired, without penalty, up until the due date. Each time it is submitted, the auto-assessment is generated. Only the final submission counts towards your grade.
The course grade will be based on the following distribution of value:
Assignments are due at 11:59 pm, typically the day of an associated class meeting.
If they are turned in late:
Our goal is that the course will consist of 39 assignmentsapproximately one per class meeting.
Collaboration and Academic Integrity Policy
You are welcome to discuss ideas in the class with your peers. However, pair programming or other side-by-side work that involves sharing of code is not allowed. By turning in an assignment, you attest that you have written the new code that it includes.
Please be familiar with the university's academic integrity policy for graduate students.
We will be using Piazza to coordinate all discussion and announcements. Click on the link Discussion Group to find the site.