CS 43: Principles of Programming Languages

Fall Semester 1999
Swarthmore College
Professor Jim Marshall

Course Description

This course provides a thorough introduction to fundamental concepts involved
in the design of programming languages. It is not a survey course of
existing languages; rather, it explores general issues in programming
language methodology through the study and implementation of interpreters.
We will see how a very high-level, almost mathematical, specification of the
semantics of a language can be used to systematically derive a low-level
implementation for it, almost at the assembly-language level, through the
application of a series of correctness-preserving program transformations.
Along the way, we will become acquainted with the lambda calculus (the
mathematical basis of modern programming language theory), representation
independence, syntactic abstraction, continuations and continuation-passing
style, lazy evaluation, nondeterministic evaluation, and, if time permits,
compiler derivation and logic programming. Throughout the course, we will
use the Scheme programming language as our meta-language for exploring these
issues in a precise, analytical fashion---in much the same way that the
language of mathematics is used to precisely describe and analyze phenomena
in the natural sciences. Our great advantage over mathematics, however, will
be the ability to directly test out our ideas about languages, expressed
clearly and unambiguously in the form of Scheme programs, by running them on
the computer and observing the results.

Contact Info

Office Hours: Tuesdays and Thursdays 2:45-4:30pm, and by appointment.
Office: Sproul Observatory Room 6
Office Phone and Voice Mail: 328-8665
E-mail: marshall@cs.swarthmore.edu
(or jmarsha1@swarthmore.edu)
If you need to see me but can't make it to my office hours, please contact me
by e-mail or leave a message on my voice mail.

Textbook

Grading

We will be using the SCM Scheme Interpreter
on the Computer Science Suns. Assignments will generally be due every week.
You should submit both hardcopy and electronic versions of your code. Your
grade will be strongly influenced by the legibility of your code, so it is
very important to use a clear and aesthetically-pleasing programming style.
Late homework is not accepted. You are strongly encouraged to do the
assignments, even if you miss the deadline, since this is really the only way
to learn the material.

Weekly Course Schedule and Reading Assignments

Note: You will get the most out of the class time if you do all of the week's
reading PRIOR to the first class meeting of that week.