CS 536: Programming Language Design (Fall 2003)

General Information

Materials and Notes

Policies and Procedures


A language that doesn't affect the way you think about programming is not worth knowing
Alan Perlis
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
The Revised5 Report on the
Algorithmic Language Scheme
Civilization advances by extending the number of important operations which we can perform without thinking of them.
—Alfred North Whitehead

Course Description and Objectives

Programming languages are everywhere in computer science. Beyond the large, mainstream languages we use regularly, computing abounds with small, domain-specific languages. While few of us will design a large mainstream language during our careers, most of us will design and implement at least one small language (even if we don't realize we're doing so!).

This course prepares you to understand the design behind large languages, and to design and implement small ones. We will explore a range of language topics by implementing them for small to medium size languages. Specifically, we will implement various forms of each of the following:

The course will not teach you how to program in a variety of languages. We will use one language to implement the features of many different languages. Hopefully, this will help you see the real differences between these features more clearly.

Who Should Take This Course?

Programming languages background is useful for anyone who programs! The computing world is full of small, poorly designed languages that grew into larger, poorly designed languages. Poor design decisions make life difficult for programmers (the course will demonstrate a few concrete examples of this). Most software packages contain small languages. If you expect to implement a software package for work or for thesis research, a languages background could make your package easier to use down the road. This background also helps you understand what languages actually do "under the hood", which may in turn help you think more deeply about programming.

In general, languages are a crucial technology in software construction. If you are interested in software engineering, you should have a basic background in languages.

Recommended background: Students should be comfortable writing programs of a few hundred lines in some higher-level language (such as C, C++, Java, Scheme, etc) before taking 536. Ideally, you should be able to do this in more than one language, so that you've seen some variety in what features different languages provide. If your programming skills are weak, do not attempt this class. If you have questions about your background, contact the instructor before the course begins.

This page maintained by Kathi Fisler
Department of Computer Science Worcester Polytechnic Institute