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