Winter Quarter 2004: January 5, 2004 - March 12, 2004
| Less: | Basics | Coordinates | Books | Schedule | Project | Assessment | | | More: | Scores | Policies |
Catalog Description: Principles of programming language design. Study and comparison of several programming languages, their features, and their implementations.
Prerequisite(s): CS 061: Machine Organization and Assembly Language Programming, CS 141: Intermediate Data Structures and Algorithms (may be taken concurrently), CS 150: The Theory of Automata and Formal Languages. You should be reasonably comfortable with algebraic structures and simple inductive proofs.
Time Requirements: Four units (12-16 hours/week): lecture (3 hours/week), laboratory (3 hours/week), individual study (6-10 hours/week; includes reading, writing, and hacking).
Instructor:
Peter H. Fröhlich
Office Hours:
Monday, Wednesday, Friday, 2:10 pm - 3:00 pm
(email for additional appointments)
Location:
Surge,
Room 341
Lectures:
Monday, Wednesday, Friday, 5:10 pm - 6:00 pm
Location:
Spieth Hall,
Room 2200
Assistant:
Ashish Sharma
Office Hours:
Wednesday, 3:10 pm - 5:00 pm
(email for additional appointments)
Location:
Surge,
Room 356
Lab:
Thursday, Friday, 11:10 am - 2:00 pm
Location:
Surge,
Room 170
Mailing List: cs181@lists.cs.ucr.edu (Archive)
John C. Mitchell: Concepts in Programming Languages. Cambridge University Press, 2003. Recent text, written by an active researcher in the area. Emphasizes functional programming and type systems, but covers object-oriented programming and logical programming as well. A little more theoretical than other texts. The course does not cover everything in the book, and the book does not cover everything in the course. An errata is available.
Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages. MIT Press, 2nd edition, 2001. Classic text studying a range of programming language concepts through interpreters implemented in Scheme. Somewhat advanced, so grab this after the course if you were bored too often. An errata is available.
Robert W. Sebesta: Concepts of Programming Languages. Addison-Wesley, 6th edition, 2004. Popular alternative text, frequently used at UC Irvine for example.
Carlo Ghezzi, Mehdi Jazayeri: Programming Language Concepts. John Wiley & Sons, 3rd edition, 1998. Popular alternative text, frequently used at UC Riverside for example.
Michael L. Scott: Programming Language Pragmatics. Morgan Kaufmann, 2000. Interesting combination of programming languages, computer architecture, and compiler construction. If you are looking for a single text covering all three areas to some extent, give this one a try. An errata is available.
Note the word tentative above. Things seldom go according to plan, and I expect changes here and there as we go along. Please also read the notes below.
| Week | Lecture | Lab | Assignment | Exam | Reading |
|---|---|---|---|---|---|
| 1 | Welcome [Lecture 1], Introduction & Computability (M 1&2) [Lecture 2], Lisp and Scheme (M 3) [Lecture 3] | Compilers and Syntax (M 4.1), LaTeX [The Not So Short Introduction to LaTeX] | [Assignment 1] [Solution] |
[Entrance]
[Solution] |
M 1, 2, 3, 4.1 |
| 2 | Lisp and Scheme (M 3) [Lecture 4] [Lecture 5], Lambda Calculus (M 4.2) [Lecture 6] | Pure Lisp and Side Effects (M 3.4.9), Scheme Hacking | [Assignment 2] [Solution] | - | M 3, 4.2 |
| 3 | Lambda Calculus (M 4.2), Prolog (M 15) [Lecture 7] [Lecture 8] | Arithmetic in Prolog (M 15.6), Prolog Hacking | [Assignment 3] [Solution] |
[Quiz 1]
[Solution] |
M 4.2, 15 |
| 4 | Prolog (M 15) [Lecture 9], Denotational Semantics (M 4.3) [Lecture 10], ML (M 5.3-5.4) [Lecture 11] | Algol and C (M 5.1-5.2), Functional vs. Imperative (M 4.4), Prolog Hacking | [Assignment 4] [Solution] | - | M 4.3, 4.4, 5, 15 |
| 5 | ML (M 5.3-5.4) [Lecture 12], Midterm Review | Open Lab: Midterm Review | - |
[Midterm]
[Solution] |
M 1-5, 15 |
| 6 | ML (M 5.3-5.4), [Lecture 13] Types (M 6) [Lecture 14] [Lecture 16] | Type Inference (M 6), ML Hacking | [Assignment 5] [Solution] | - | M 5, 6 |
| 7 | Type Inference (M 6) [Lecture 17], Scope (M 7) [Lecture 18] | Design Patterns (M 10.4), ML Hacking | [Assignment 6] [Solution] | - | M 7 |
| 8 | Control (M 8) [Lecture 19], Modularity (M 9) [Lecture 20], Objects (M 10) [Lecture 21] | Smalltalk (M 11), ML Hacking | [Assignment 7] [Solution] |
[Quiz 2]
[Solution] |
M 8, 9, 10, 11 |
| 9 | Objects (M 10) [Lecture 22], Java (M 13) [Lecture 23] [Lecture 24] | Java Virtual Machine (M 13), Smalltalk Hacking | [Assignment 8] [Solution] | - | M 10, 13 |
| 10 | C++ (M 12) [Lecture 25], Comprehensive Review | Open Lab: Comprehensive Review | - |
[Comprehensive]
[Solution] |
M 1-13, 15 |
Open Lab means you can attend any lab section offered that week: You don't have to attend the one you're enrolled in, and you can even attend all of them if you want to.
The terms "M c" and "M c.s" refer to the required text by Mitchell; for example, "M 1" refers to chapter 1, while "M 4.1" refers to section 1 in chapter 4. When sections are assigned, it's a good idea to skim the material "around" those sections as well.
Bold chapters and sections are not discussed in lecture or lab (unless you ask about them), but the material is relevant. Some topics we go over in lecture or lab are not covered in the text; I will try to provide additional references for those.
You are expected to do the assigned reading before a topic is covered in lecture or lab. Reading assigned in the week of an exam is part of the exam (except for the entrance exam of course).
You can do two kinds of projects for this course: tutorials or interpreters. The former requires decent writing skills (using English, not C++) while the latter requires decent hacking skills (using C++, not swords).
For both kinds of projects, you define the particulars on your own, subject to approval by the instructor. Tutorials can be on almost any programming language, provided there is a free, working implementation your readers can use. Interpreters should focus on two or three central language features you want to explore, except of course "trivial" things like arithmetic expressions. You can check the Fall 2003 course for project ideas, but I prefer to approve new topics, not rehashed ones.
Projects run for the whole quarter. Your topic has to be approved by the end of week 2, but whether you hand in week 3 or week 10 is up to you.
For tutorials, we expect 6-10 pages of well-written text sprinkled with useful examples that readers can try out as they work through the material. If you want, and if the language warrants it, you can write up to 20 pages, but we will not grade on quantity. Instead we will focus on the quality of your writing, the clarity of your exposition, and the correctness of the statements you make.
For interpreters, we expect a 1-2 page(s) summary of your project, stating your goals, the approach you took, and your conclusions. We also expect a 1-2 page(s) manual describing how to use your interpreter. Finally, we obviously expect a working interpreter. Your interpreter can be written in just about any language, but it must run on Unix systems and use standard input and output (no GUIs please).
All your documents should be written in LaTeX, and all your sources must be provided in the final archive you hand in.
Here is a list of all projects that are currently approved and the students working on them. If your name is not here, you do not have a project. If you don't get a project approved, you will not get any points, even if you turn something in. If your project is listed pending then there are still some open questions we need to resolve in email.
Assignments (8): 40%, Project (1): 10%, Quizzes (2): 10%, Midterm (1): 15%, Comprehensive (1): 25%. See my policies for more information.
|
Copyright © 2003-2004
Peter H. Fröhlich.
All rights reserved.
$Id: index.html,v 1.25 2004/03/16 02:24:29 phf Exp $ |
|