TTh, 1:30 pm - 2:50 pm

Ryerson 276

IndexAnnouncements

Instructor Contact Info

Course Description

Course Textbooks

Programming Exercises

Course Policies

Course Mailing List

Course Schedule

Homework Assignments

Homework Solutions

Handouts

Sample Code

Additional Useful Links

Programming in SML

SML/NJ FAQ

## The first class will be on Tuesday, Sept. 30, 2008 at 1:30pm in Ry 276.

Announcements/UpdatesThe first homework submission on October 7 will not be graded for contents. The set of questions gets re-assigned as homework 2.

The Final Exam will take place from 1:30pm to 3:30pm on Thursday, December 11, in Ryerson 276.

Instructor Contact Info

NameRoleOfficeOffice hoursPhoneWeb or e-mailMatthias Blume Instructor UofC Press building, #257 By appointment 4-7494 http://www.tti-c.org/blume/ Siwei Wang TA Ry 177 Tue 4-5pm, Thu 4-5pm siweiw [at] cs [dot] uchicago [dot] edu Wonseok Chae Volunteer TA UofC Press building 4-2621 http://people.cs.uchicago.edu/~wchae/ ## Programming languages are the most fundamental tools involved in the creation of software, and thus play a key role in computing. This is a foundational course exploring the principles and concepts underlying the design of programming languages. We use a formal approach based on operational semantics to give clear and precise descriptions of language concepts, such as flow of control, data structures and types, modularity and abstraction, and concurrency. The major paradigms of imperative, functional, and object-oriented paradigms will be covered, though the functional paradigm will be the main focus because of its simplicity.

Course DescriptionStudents should have experience programming in one or more programming languages, and familiarity with basic concepts of naive set theory and logic would be helpful. Inductive definitions and inductive proofs will play a central role.

The course is being taught as a combinded graduate/undergraduate course this year. There will be additional reading and assignments for the graduate students.

## The main textbook for the course is

Course TextbookProgramming Languages: Theory and Practiceby Robert Harper. This is available in two versions as pdf files: online.pdf suitable for online viewing, or offline.pdf suitable for printing. Note that this is a different (and older) version of the book than the one you find at the author's home page.A supplementary text for the graduate students taking CMSC 32100 is

Programming Languages and Lambda Calculiby Matthias Felleisen and Matthew Flatt.Other references that are useful for background material or further study are:

Types and Programming Languages, by Benjamin Pierce, MIT Press, 2002, ISBN 0-262-16209-1. A thorough and readable reference on type systems.Discrete Structures, Logic, and Computabilityby James Hein. Covers relevant topics in set theory, logic, and discrete math. Used as a textbook in CMSC 15300, Foundations of Software.Naive Set Theoryby Paul Halmos, Springer, 2001, ISBN 3540900926. A republished edition of a classic introductory text on the basics of set theory.

Programming ExercisesThis is not a course centered on programming projects, but programming examples and exercises that show how to implement the ideas expressed in operational semantics will be given using the language Standard ML. There are several good sources of documentation and tutorials for SML/NJ available online, and some of these are given in the course SML/NJ page.

Course Policies

Gradingwill be based on the following:

- Homework exercises and projects: 55%
- Midterm exam: 20%
- Final exam: 25%
Assigments:Homework assignments will normally be given on Tuesdays and will be due as anelectronic submission(e-mail to the instructor and to both TAs) at 10:00 pm on the following Tuesday.In addition, you need to submit a hard copy of your solution by handing it in during class on the Thursday following the Tuesday when the electronic submission is due.

Late homework can be submitted electronically until the Thursday class with a 30% penalty.Collaboration:As in most courses, we encourage students to discuss course material among themselves. Discussions of assignment problems is also permitted to an extent, but submitted assignments should be your own work, and collaborative discussions should be acknowledged.Final Examination:The final examination will be a two hour in-class exam given at 1:30pm on Dec 11 (time/date to be confirmed).## A mailing list has been created for the course. The address is cmsc32100@mailman.cs.uchicago.edu. The web page for the mailing list is at a https://mailman.cs.uchicago.edu/mailman/listinfo/cmsc32100.

Course Mailing List

Please send your subscription request to

cmsc32100-request@mailman.cs.uchicago.edu

(A subscription request consists of an e-mail with the single wordsubscribein the body or theSubject:line.)## A (tentative) schedule of the lectures will be posted later. (Watch this space.)

Course Schedule

Homework AssignmentsHere are links to PDF files of the homework assignments.

Homework 1 (due Tuesday, Oct 7); Sample solution

Homework 2 (due Tuesday, Oct 14) is identical to Homework 1;

Homework 3 (due Tuesday, Oct 21);

Homework 4 - part 1 (due Tuesday, Oct 28);

Homework 4 - part 2: programming exercise (due Tuesday, Oct 28);

Homework 5 - part 1 (due Tuesday, Nov 4);

Homework 5 - part 2: programming exercise (due Tuesday, Nov 4);

Homework 6 - part 1 (due Tuesday, Nov 11);

Homework 6 - part 2: programming exercise (due Tuesday, Nov 11);

Homework 7 - part 1 (due Tuesday, Nov 18);

Homework 7 - part 2: programming exercise (due Tuesday, Nov 18);

Homework 8 - part 1 (due Tuesday, Nov 25);

HandoutsLinks to PDF files of the handouts will be posted here:

Lecture notes: continuously updated to cover material of past lectures.

lec0.pdf: Offline course description

lec-sml.pdf: Standard ML crash-course

hw1-a.tex: LaTeX source for homework 1 (serving as sample LaTeX code)

mathpartir.sty: Didier Rémy's style file for typesetting inference rules and for a "mathematical" paragraph environment (mathpar); see hw1-a.tex above for an example how to use it

Comments on Homework 1

Final exam (with solutions)

Sample CodeLinks to sample code will be posted here:

let-language, small-step semantics

let-language, big-step semantics

co-routines in SML/NJ using callcc

Meta-circular interpreter(Reynolds)

De-functionalized interpreter (Reynolds)

Simple (non-polymorpmic) type-inference for MinML

Papers and PresentationsThe Mechanical Evaluation of Expressionsby Peter Landin (Computer Journal, 1964)

The Next 700 Programming Languagesby Peter Landin (CACM, 1966)

Definitional Interpreters for Higher-Order Progamming Languagesby John Reynolds (1972)

A Structural Approach to Operational Semanticsby Gordon Plotkin.

The Discoveries of Continuationsby John Reynolds.

Structure and Abstraction in HOT Languages(Marktoberdorf Summer School Notes, 2000).

## Frank Pfenning at CMU has a web site for his version of a course 15-312 Foundations of Programming Languages based on Harpers draft book. This web site has some very useful supplementary lecture notes, as well as assignments, software, and other resources. You may find it useful to browse through this site and download some of the material.

Additional Useful Links

Matthias Blume

(This page was created by adapting the page of a previously held course by David MacQueen.) Last modified: Wed Sep 30 11:25:41 CST 2008