Rudiments
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.
Grading
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).
- Programs
-
Expect five to ten programming assignments in the semester.
This portion of your grade covers those programs
not graded in codewalks.
- 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.
- Essays
-
You will write one to three brief essays, each no more than
about a page in length. Language matters.
- Designs
-
You may design one or two little programming languages.
We will weight these instruments
roughly as follows:
Midterm exam | 20% |
Final exam | 20% |
Programs | 20% |
Codewalks | 20% |
Essays | 10% |
Designs | 10% |
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.
Topics
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