This course meets MWF, 11-11:50, in CIT 506. You must have completed cs16 or cs18, cs22 and cs31; I also recommend taking cs51. If you don't meet these requirements, please talk with me before taking the course. You may find the early going easy enough, but may suddenly hit a wall later in the semester.

Notification of Work

You are responsible for all material posted to the course newsgroup and to the Web site.


We will assess your performance through several means:

Midterm and Final Exams
What you think. The final is cumulative (though weighted in favor of later topics).
Expect five to ten programming assignments in the semester. This portion of your grade covers those programs not graded in codewalks.
We will grade two or three of your programs in person, in the form of a codewalk. We will provide more information about codewalks as the semester progresses.
You will write one to three brief essays, each no more than about a page in length. Language matters.
You may design one or two little programming languages.
We will weight these instruments roughly as follows:
Midterm exam20%
Final exam20%
The allocation will vary somewhat if we adopt a different ratio of assignments; for instance, if we drop one category entirely, we will naturally divide its grades between the remaining categories. If you are concerned about the precise allocation of grades, please discuss this with me.

Regular attendance and productive classroom participation may slightly ameliorate some weaknesses elsewhere; the converse is also true.

Late Homework

We will not accept late assignments. Assignments are often timed to be due for a classroom discussion on the assigned material, because you can better follow a difficult topic if you have your struggles fresh in your head. The class will sometimes even discuss solutions to the homework problems. Once we do this, we can no longer accept your solution.

If you really need or want to turn an assignment in late, you must get the professor's permission to do this before the assignment deadline.

When we do accept a late submission, we will use this formula to compute your net grade:

  (define (net-grade gross-grade number-of-penalty-units)
    (* gross-grade (expt 0.9 number-of-penalty-units)))
Because assignments are due a few hours before class, you might be tempted to work all night. This often means you won't attend class at all, or will be too sleepy to participate effectively in it. As a disincentive, we make assignments due at 2am. A penalty unit is a 24 hour period or part thereof after the due time. Even a minute past 2am incurs one penalty unit. So if you're late, relax; sleep; attend class; and submit something polished later in the day.

Question Posting Policy

Mail questions intended for the course staff to cs173tas. This will get you the promptest responses. It also ensures you don't need to figure out the right audience for a question.


We will cover topics from:

  • Dynamic Semantics:
    • simple call-by-value language
    • lexical binding and closures
    • recursion
    • data constructors
    • mutation
    • advanced control
  • Types and Safety: all the above topics in the context of
    • typing judgements
    • safety
    • type soundness
    • various forms of polymorphism
  • Compilation and Run-Time Systems:
    • tail recursion
    • CPS
    • representation independence
    • register machines
    • allocation versus mutation
    • manual memory management
    • garbage collection
  • Very brief discussions of Program Organization and Theoretical Topics

Last modified Tuesday, October 30th, 2001 0:09:55amPowered by PLT