CS105 -- Programming Languages

Spring 2012

Overview

This course is not about programming.
However, you will become a significantly better programmer for having completed it.
The course introduces the issues surrounding the design and implementation
of programming languages rather than their use.
Mostly, we will use Racket to implement interpreters for a variety of languages
(including various subsets of Racket itself).
Because you will be writing interpreters that support the various features,
you will come to intimately understand issues such as
scope, lazy and eager evaluation, recursion, mutation, continuations,
types, polymorphism, and much more.

As with most courses that are worth taking,
this course requires your engagement with and participation in the learning process.
Plan for it.
This engagement will primarily take the form of reading about language issues
that will be unfamiliar and abstract for most of you.
That is, you will be required to read the text;
start your readings and assignments early.
If you are unfamiliar with Racket, you may find the exercises challenging.
I encourage you to spend the necessary effort during the first two weeks
to become proficient with the Racket programming language.
If you work the examples as you go through the text,
your assignments will be manageable.
You will typically be completing one small programming assignment each week.

Course Materials

Required textbook: Programming Languages: Application and Interpretation,
(v.2007-04-26) Shriram Krishnamurthi. (2007).
[The full text of the book is available at the given link. We will use version 2007-04-26.
I am grateful (as you should be) to Professor Krishnamurthi for writing this excellent text,
making it available electronically,
and for the other extensive coures materials from which I have borrowed extensively.]

Supplemental textbook:
How To Design Programs: An Introduction to Programming and Computing,
by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi.
MIT Press (2001). ISBN: 0262062186
[If you did not take CS010 with me or if you lack confidence in your Racket or Scheme programming skills,
I strongly recommend that you obtain a copy of this book
and work through all of Parts I, II, and IV over the Christmas break.
You should be very comfortable with lambda and the abstract functions; otherwise, you will suffer in CS105.
If you have not used Scheme or Racket in a long time, you should review these parts anyway.
As a reminder, the full text is available at the given link.]

Programming environment: Download and install the
Racket programming language.
You will probably want to use their IDE, DrRacket, which is included.