CS 181: Programming Languages

Fall Quarter 2003: September 25, 2003 - December 5, 2003


Less: Basics Coordinates Books Schedule Project Assessment   |   More: Scores Policies

Basics

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, hacking, and homework).


Coordinates

Instructor: Peter H. Fröhlich
Office Hours: Monday, Wednesday, Friday, 11:00 am - 12:00 pm, Surge 341 (email for additional appointments)

Lectures: Monday, Wednesday, Friday, 9:10 am - 10:00 am
Location: Watkins Hall, Room 2240

Assistant: Serdar Bozdag
Office Hours: Wednesday, 11:00 am - 12:00 pm, Surge 282

Lab: Tuesday, 11:10 am - 2:00 pm
Location: Surge, Room 170

Assistant: Anna Majkowska
Office Hours: Thursday, 5:10 pm - 6:00 pm, Surge 282 (email for additional appointments)

Lab: Thursday, 6:10 pm - 9:00 pm
Location: Surge, Room 172

Mailing List: cs181@lists.cs.ucr.edu (Archive)


Books

Required

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.

Recommended

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.

Also Running

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.


Schedule (Tentative!)

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
0 Welcome [Lecture 1] Open Lab: Accounts, Basics - - M 1
1 Introduction (M 1), Computability (M 2), Lisp and Scheme (M 3) [Lecture 2] [Lecture 3] [Lecture 4] Compilers and Syntax (M 4.1), LaTeX [The Not So Short Introduction to LaTeX] [Assignment 1] [Solution 1] - M 1, 2, 3, 4.1
2 Lisp and Scheme (M 3), Lambda Calculus (M 4.2), Prolog (M 15) [Lecture 5] [Lecture 6] [Lecture 7] Pure Lisp and Side Effects (M 3.4.9), Scheme Hacking [Assignment 2] [Solution 2] - M 3, 4.2, 15
3 Prolog (M 15), Denotational Semantics (M 4.3), ML (M 5.3-5.4) [Lecture 8] [Lecture 9] [Lecture 10] Arithmetic in Prolog (M 15.6), Prolog Hacking [Assignment 3] - M 4.3, 5, 15
4 ML (M 5.3-5.4), Axiomatic Semantics, Types (M 6) [Lecture 11] [Lecture 12] [Lecture 13] Algol and C (M 5.1-5.2), Functional vs. Imperative (M 4.4), ML Hacking [Assignment 4] - M 4.4, 5, 6
5 Types (M 6), Review [Lecture 14] Open Lab: Review - [Midterm]
[Solution]
M 1-6, 15
6 Scope (M 7), Control (M 8) [Lecture 15] [Lecture 16] [Lecture 17] ML Hacking [Assignment 5] - M 7, 8
7 Modularity (M 9), Oberon-2 and Modula-3 Objects (M 10) [Lecture 18] [Lecture 19] [Lecture 20] Open Lab: Design Patterns (M 10.4), ML Hacking [Assignment 6] - M 9, 10, [The Programming Language Oberon-2, Modula-3: Language Definition],
8 Simula and Smalltalk (M 11) Oberon-2 and Modula-3 Hacking [Assignment 7] - M 11
9 Java (M 13) Open Lab: Simula and Smalltalk (M 11) [Assignment 8] [Growing a Language] - M 11, 13
10 C++ (M 12), Review Open Lab: Review - [Final]
[Solution]
M 1-13, 15

Notes

Week 0 refers to the September 25-26 pseudo-week. 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 attend all of them as well.

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.

Some topics we go over in lecture or lab are not covered in the text; I will try to provide additional references for those. Also, some parts of the book are assigned as reading only and are not covered in lecture or lab (unless you ask about what you have read).

You are expected to do the assigned reading before a topic is covered in class or lab; reading assigned in the week of an exam is part of the exam.


Project (Tentative!)

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.

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.

Approved Projects

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.

Interpreters

Tutorials


Assessment

Assignments 45% (8), Project 10% (1), Midterm 15% (1), Final 30% (1). See my policies for more information.


Copyright © 2003 Peter H. Fröhlich. All rights reserved.
$Id: index.html,v 1.54 2003/11/21 21:52:05 phf Exp $
Valid XHTML 1.1!