Instructor: Cormac Flanagan
Lectures: Tu/Th, 10:00am-11:45am, Engineering 2 building, room 194
Office Hours: After class, and Tuesdays 1:30-2:30pm, in Engineering 2 building, room 367
If you have trouble installing Ocaml on your own computer, you can use sundance.cse.ucsc.edu, where it is pre-installed.
NEW: homeworkcode
NEW: Project and Presentation Schedule
Newsgroup: Please subscribe to the class email list: http://groups.google.com/group/ucsc-cmps203-fall07
Helpful links: Some code snippets and the Ocaml release
A sample induction proof by Faron Moller.
| Day | Date | Lecture | Topic | Due |
|---|---|---|---|---|
| Thurs | 9/27 | 1 | Course Overview and Motivation 1pp 6pp | |
| Tues | 10/2 | 2 | Operational Semantics of ARITH 1pp 6pp | Hw 1 & Read Winskel Ch 1,2 |
| Thurs | 10/4 | 3 | Operational Semantics of IMP 1pp 6pp | |
| Tues | 10/9 | 4 | Proof Techniques: Induction 1pp 6pp and Course Project 1pp 6pp | Hw 2 & Read Winskel Ch 3 |
| Thurs | 10/11 | 5 | Induction continued | Winskel Ch 6 |
| Tues | 10/16 | 6 | Axiomatic Semantics 1pp 6pp | Hw 3 |
| Thurs | 10/18 | 7 | Axiomatic Semantics continued | Project Proposals Due |
| Tues | 10/23 | 8 | Extended Static Checking for Java 1pp 6pp | Guarded commands, non-determinacy and formal derivation of programs, Edsger W. Dijkstra Extended Static Checking for Java |
| Thurs | 10/25 | 9 | Lambda Calculus 1pp 6pp | Conception, evolution, and application of functional programming languages (to end section 1.5)Hw 4 |
| Tues | 10/30 | 10 | Lambda Calculus continued | Quicksort homework and a sample Solution |
| Thurs | 11/1 | 11 | Lambda Calculus continued | |
| Tues | 11/6 | 12 | Type Systems 1pp 6pp | Cardelli's Type systems (sections 1, 2, and 3) Alternatively, if you have (access to) the Pierce book “Types and Programming Languages”, read chapters 8 and 9 (previous chapters 1, 3, and 5 give good background on material already covered in the course). |
| Thurs | 11/8 | 13 | Type Systems continued | Cardelli's Type systems (sections 4 and 5) |
| Tues | 11/13 | 14 | Type Systems continued | |
| Thurs | 11/15 | 15 | Kenn Knowles on Hybrid Type Checking | Hybrid Type Checking slides.pdf |
| Tues | 11/20 | 16 | Andreas Gal on Trace-Based JIT Compilation | HotpathVM: An Effective JIT Compiler for Resource-constrained Devices |
| Thurs | 11/22 | Thanksgiving – no class | ||
| Tues | 11/27 | 17 | Project presentations | |
| Thurs | 11/29 | 18 | Project presentations | |
| Tues | 12/4 | 19 | Project presentations | |
| Thurs | 12/6 | 20 | Project presentations |
CS203 is designed to acquaint graduate students with basic ideas behind modern programming language design.
The first part of this graduate-level course focuses on the study of the semantics of a variety of programming language constructs. We will study operational semantics, which are a way to formalize the intended execution and implementation of languages, and axiomatic semantics, which is useful in developing as well as verifying programs. We will apply these techniques to imperative, functional and object-oriented languages. For this part of the course we will follow the presentation of these topics from Glynn Winskel's “The Formal Semantics of Programming Languages”.
The second part of this course covers the basic techniques used in the study of type systems for programming languages. We will start our study with the simply typed lambda calculus and continue with more advanced features such as types for imperative features and exceptions, parametric polymorphism, existential types for use in abstraction and module systems, and dependent types. A good reference for this part of the course is John Mitchell's “Foundations for Programming Languages”.
The last part of the course covers special topics, occasionally presented by expert invited speakers, drawn from recent research in the semantics of object-oriented languages, abstract interpretation and applications of program semantics in program analysis and verification. This part of the course will also cover several novel applications of ideas from language semantics to system security in the presence of untrusted code, such as perhaps type systems for securing the flow of information.
In addition to the topics studies in class, students will have the opportunity to consider other related topics of interest in the form of a course project.
The prerequisites for this course are programming and mathematical experience. The ideal programming experience is practical exposure to several different programming languages, such as C, ML, Prolog and Java. The ideal mathematical experience is knowledge of mathematical logic and ability to construct rigorous proofs (in particular by structural induction). None of these prerequisites are strict. However, your desire to be exposed to this material is very important. In the past a small number of undergraduates have been able to complete the course.
As mentioned in the course description above a number of textbooks will be used in this course. All of these textbooks will be placed on reserve at the library. Copies of the lecture notes will also be made available on the course home page.
There will be some homework assignments, often mathematical in nature. Collaboration in pairs on the homework is ok, as long as you clearly identify on your submitted homework whom you worked with.
The final project is intended to give you hands on experience with the material taught in the course and also to allow you to explore in more depth a topic of your own interest. Acceptable projects can be a programming project, a survey of recent research on some relevant topic, or a small research paper. Everybody must select a project and write a very short (one to two pages) proposal arguing what is expected to be learned from the project (why is it interesting to you) and giving a work schedule. Make sure to budget time for writing a short paper describing the project and for preparing a short (10-15 minute) presentation during the last week or two of classes. Projects can be individual or in small groups.
NEW: Project Proposals
The main goal of the project is to allow you to customize the content of the course to your own interests. The goal is not to force you all to produce novel results in one semester.
More details about the expected scale of the project and the various kinds of projects (survey, implementation, research) will be discussed in class.
The project report should have an Introduction describing the tackled problem, its motivation and a very brief summary of the accomplishment. Then you should write a description of your notations if they are different from what we used in class. Then you continue with the body of the material. The paper should end with a Conclusion putting the perspective the accomplishment of the project and mentioning the open problems and with a Bibliography of cited papers. Research papers should also have a Related Work section in which they compare the work with previous research results. The paper should be typeset and made available in electronic form.
An example project report.
The presentation should be short (10-15 minutes) and should describe in few details what the problem was, what the difficulties were and what was accomplished or learned. You will find it much easier to prepare the talk using slides (perhaps 4-6 slides excluding the title, depending on your speed). While preparing the talk keep in mind who your audience is: your colleagues who are eager to find out (1) about new exciting facets of programming languages and (2) how much fun you had. Plan to motivate the project (why is it important) and to describe what you learned from it. Keep in mind that your colleagues have not read all the papers that you have read to do the project.
You will need to have a “buddy” for your presentation, who listens to a full-length dry run of your presentation before your class presentation, and gives you detailed, constructive feedback on how to improve your presentation. Please remember to thank your buddy by name as part of your presentation.