Home Syllabus Lecture Blog Resources Piazza Bottlenose

91.531 Design of Programming Languages, Spring 2013
Prof. Fred Martin, ⚠ (:html:)<a href="http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>(:htmlend:)
MWF, 10:00a–10:50a, OS219

We will be using the following books:

Seven Languages in Seven Weeks:
A Pragmatic Guide to Learning Programming Languages
Bruce A. Tate
Learn You a Haskell for Great Good! (2011)
Miran Lipovača
Beyond 20-minute tutorials.Haskell—the best functional programming language around.

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:

  • Strand 1. We will learn Seven Languages in Seven Weeks, working with Bruce Tate's wonderful book by this title. The seven languages are: Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby.
  • Strand 2. During the weeks we're not learning new languages, we will build interpreters, highlighting core features of language design: interpreting expressions; implementing variables and control structures; implementing objects; implementing a functional programming language; understanding and implementing lambda calculus.

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:

  • pre-lecture reading or video viewing assignments,
  • pre-lecture quiz questions,
  • programming assignment downloads, and
  • completed/uploaded programming assignment auto-assessments.

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:

50% Assignments
10% Pre-lecture quiz questions
30% Final exam
10% Class participation

Late Policy

Assignments are due at 11:59 pm, typically the day of an associated class meeting.

If they are turned in late:

  • 33% of their value is deducted for assignments turned in up to one week late.
  • 66% of their value is deducted for assignments turned in more than one week late.

Our goal is that the course will consist of 39 assignments—approximately 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.

Discussion Group

We will be using Piazza to coordinate all discussion and announcements. Click on the link “Discussion Group” to find the site.