General Information
Instructor: Matthew Fluet E-mail: fluet at cs.uchicago.edu Office hours: W 10:00am – noon (or by apt.); TTI-C #521 (6045 S. Kenwood) TA: Adam Shaw E-mail: ams at cs.uchicago.edu Office hours: F 10:00am – noon; CS Linux Lab (Regenstein Library) TA: Yingqi Xiao E-mail: xiaoyq at cs.uchicago.edu Office hours: W 3:00pm – 5:00pm; Ryerson 177-c2 Lectures: TuTh 1:30pm – 2:50pm; Ryerson 251 Home page: www.classes.cs.uchicago.edu/archive/2009/winter/22610-1 Mailing list: cmsc22610@mailman.cs.uchicago.edu mailman.cs.uchicago.edu/mailman/listinfo/cmsc22610 GForge server: cs22610.cs.uchicago.edu
Overview
The course covers principles and techniques for implementing computer languages, such as programming languages, query languages, specification languages and domain-specific languages. Topics include lexical analysis, parsing, tree representations of programs (both parse trees and abstract syntax trees), types and type checking, interpreters, abstract machines, and run-time systems. This is a project-based course involving the implementation of a small language using Standard ML.
This course is the first in a sequence of two courses that cover the implementation of computer languages. The second course (CMSC 22620; Spring 2009) covers more advanced issues related specifically to the translation of general purpose programming languages.
Text Books
Required: Title: Modern Compiler Implementation in ML Author: Andrew Appel Publisher: Cambridge University Press ISBN: 978-0521607643 Errata: www.cs.princeton.edu/~appel/modern/ml/errata.html Strongly recommended: Title: ML for the Working Programmer Author: Lawrence Paulson Publisher: Cambridge University Press ISBN: 978-0521565431 Optional: Title: The Standard ML Basis Library Editors: Emden Gasner and John Reppy Publisher: Cambridge University Press ISBN: 978-0521794787
Assignments, Exams, and Grades
There will be both homework assignments and programming projects. Homework assignments should be submitted at the beginning of class (1:30pm) on the due date. Programming projects will be automatically collected from the course GForge server at 10:00pm on the due date. Late homework assignments and programming projects will not be accepted, unless special circumstances have been discussed with the course staff in advance of the due date and/or other arrangements have been made.
There will be both a midterm exam (in class) and a final exam; see below for dates.
Grades will be assigned based on the following grading scheme:
Homework: 20% Midterm exam: 20% Project: 40% Final exam: 20%
Course Project
The project for the course is to implement a small functional programming language, called LangF. (Students who have taken CMSC 22100 should recognize the language as an enrichment of System F, the polymorphic λ-calculus.) The project will be divided into four parts, each requiring a significant programming effort. The implementation will be undertaken using the Standard ML programming language and submission of the project milestones will be managed using the course GForge server. Programming projects will be individual efforts (no group submissions).
Important Dates
January 23: First project milestone (scanner) February 9: Second project milestone (parser) [Moved from February 6.] February 12: Midterm exam (in class: 1:30pm – 2:50pm; Ryerson 251) February 27: Third project milestone (type-checker) March 15: Fourth project milestone (code-generator) March 17: Final exam (1:30pm – 3:30pm; Ryerson 251)
Academic Honesty
As with all courses, the University of Chicago's policy on Academic Honesty and Plagiarism applies.
In this course, all submitted work must be your own work (i.e., written up or programmed by you alone) and must include acknowledgments of any collaborators or sources (other than course text books or handouts) used to produce your submission.
You are encouraged to discuss course material with other students. Discussion of homework assignments and programming projects is also allowed, but sharing solutions or code is not allowed.
Disclaimer
I reserve the right to make any changes to the syllabus as I deem necessary throughout the course. Minor changes, such as programming project due dates, will be announced orally during class and posted on the course mailing list and home page. Major changes, such as grading percentages, will additionally be provided in writing.