COMP 105—Programming Languages
Tufts University
Spring 2011

Time and Place: MWF 1:30–2:20, Halligan 111A (room is tentative)
Email: comp105-staff@cs.tufts.edu
Home page: http://www.cs.tufts.edu/comp/105/
Instructor: Norman Ramsey, Halligan Extension 006
Office hours Monday 4:15–4:45, Wednesday 4:00–5:00, Thursday 2:00–3:00, and by appointment.
Teaching Assistants: Andrew Gallant
Engineering Fellows: Lise Brodzik, TripAdvisor
Bill McKeeman, The MathWorks
Joe Stoy, Bluespec
Mike Rieker, VMware
Tucker Taft, SofCheck
Recitation sections: Monday 3:00-4:15 (Rieker, Halligan 111A)
Monday 4:30-5:45 (Stoy, Halligan 111B)
Wednesday 10:30-11:45 (Brodzik, Miner Hall Room 110)
Friday 10:30-11:45 (McKeeman, Halligan 111B)
Friday 2:30-3:45 (Taft, Halligan 127)
Friday 3:00-4:15 (Ramsey, Halligan 111A)

Synopsis

COMP 105 is a survey course in programming languages. The goal of the course is to give you intellectual tools that will help you use, evaluate, choose, and design programming languages. You will learn to ask questions about language safety and classification of errors, type systems, formal semantics, and abstraction mechanisms for both functions and data.

COMP 105 provides an introduction to the study of programming languages as an intellectual discipline. The elements of this discipline include specifications based on abstract syntax, lambda calculus, type systems, and dynamic semantics. You must be comfortable with recursion and with basic mathematical ideas and notations for sets, functions, etc.

COMP 105 uses the case-study method to give you experience with languages that go beyond the simple imperative paradigm. Case studies will cover languages from the functional, logic, and object-oriented families. Example languages may include Standard ML, Smalltalk, CLU, Scheme, and Prolog.

Case studies are reinforced by suitable programming exercises. COMP 105 assumes previous experience programming in imperative languages like C, C++, or Java. Good programming skills are essential, and we assume some knowledge of C. Plan to complete ten or twelve programming assignments over the course of the term. The more interesting or amusing assignments include Hindley-Milner type inference, arbitrary-precision arithmetic, and some game-playing programs.

COMP 105 is suitable for graduate students, especially those whose primary research interests lie in related fields such as compilers, software systems, or artificial intelligence. Graduate students whose primary interests lie in programming languages may find that COMP 105 overemphasizes programming practice and underemphasizes foundations.

Note: COMP 105 does not cover implementation of conventional, imperative programming languages, which are covered in COMP 181 (Compilers).

COMP 105 and COMP 80

Students who have already taken COMP 80 are not eligible to take COMP 105 for credit. However, they may enroll in COMP 194-21 (Advanced Topics in Programming Languages).

For more information

  • Grading standards
  • Other details for which you are responsible
  • Information about readings
  • Style guide for Standard ML
  • If you need an ML Compiler, use Moscow ML (/usr/sup/bin/mosml), Standard ML of New Jersey (/usr/sup/bin/sml), or MLton (/usr/sup/bin/mlton).

    We're using a version of Moscow ML that is deemed unready for release to the public, but if you want to run it on your own machine, I have put a tarball online.

  • If you want to write homework using LaTeX, you might find it useful use mathpartir. You can download it directly or install it as a Debian package. You can also find out about many other useful LaTeX packages from the LaTeX Companion. There is a second edition, but I've linked to the first edition because it's almost as useful and a lot cheaper. You can read what other students have said about Norman Ramsey teaching this material.