CSE 230 Homepage
Principles of Programming Languages
Winter 2003

Notices

From now on, we meet in APM 5218 instead of WHL 2114 (or APM 4218).

There is no final exam for this class; instead, a final project is required, a written report on which is due on the last day of this class. The class is small enough to be run in seminar style; therefore students will be responsible for presenting some material in the class, and homework will be discussed in class.

Please read the Integrity of Scholarship Agreement maintained by Scott Baden and the offical UCSD policies on Plagariasm; you are expected to abide by these rules.


Synopsis

Some general features, history and comparison of programming languages. Abstract and concrete syntax; induction. Semantics of imperative languages. Types and modules; type systems and module systems. Functional programming and the lambda calculus; ML; logic programming. Denotational semantics; term rewriting; program specification and verification. The course will conclude with a brief discussion of "internet languages" like HTML, Java, JavaScript, Perl, and XML.

In addition to the usual topics, this course will include some formal methods and a little on social and historical aspects. We consider what languages are, how they are used, what they mean, and how and why they differ, rather than focus exclusively on programming.


Meetings
M W 5:00 - 6:20, APM 5218
Section A00, ID 456347
My office hours are right after class, or by appointment, in 3131 APM.
Required Books You should bring the required books to class, because I will not always copy material that is in the books onto the board during lectures. These books should be available at the UCSD Bookstore, and on reserve at the Science and Engineering Library. (Of course you can get these books with probably less trouble from amazon.com or some other online bookseller).

Recommended Books

Stansifer is close to the spirit of this course. Pratt and Zelkowitz is good on the connection between languages and machines. McLennan is particularly good for background information on syntactic and historical issues. Ullman gives an exemplary exposition of the ML language. In addition, the following may be of interest:
Additional Information

Note: Some links below point to pages that do not yet exist; these links will be gradually updated as the quarter progresses.

  1. Reading assignments
  2. Homework assignments
  3. Notes on the readings
Be sure to reload these pages frequently, because sometimes they are updated frequently (though it should happen automatically due to meta tags on pages). If you can find a Java applet on the web, or write one, that I actually use to illustrate some aspect of the class, you will get some extra credit.

Grades will be based on your project, and your class presentation and homework. You must submit a detailed outline of your project by the end of the fourth week of classes; suggestions for some projects are given on the projects page.

Prerequesites for this class are CSE 130, CSE 100, CSE 20, CSE 12, and one of the basic programming courses. If you are not familiar with the discrete mathematics in CSE 20, you should review it; a good CSE 20 textbook is Discrete Mathematics with Applications, by Susanna Epp (Brooks/Cole 1999).

If you are not a CSE graduate student, you should fill out the form at www.cs.ucsd.edu/csehelp/request_help/class_acc.php to request a CSE student account; then give me the form.

If you find bugs in the lecture notes or textbooks, please send me email; I want to include a comprehensive bug list for the texts in the class notes.

You may wish to look at last year's version of this class, including its final exam and its midterm exam.


Programming Resources

ML (Standard ML of New Jersey, version 110.0.6) is available on all CSE Unix machines at /net/cs/class/development/elkan/cse230/sml-110/bin/sml, which you can either define as an alias for sml, or else you can add the path for its directory to the PATH variable of your environment.

Binary for BinProlog 4.00 for Solaris machines (such as the CSE instructional machines beowulf, bintijua, kongo, or the machines in the APE lab) can be found at /net/cs/class/wi99/cse230/prolog/bp, and also as a backup, at /net/cat/disk1/prolog/bp; the latter directory also contains many other files, including some relevant to exercises, so that you don't have to do all the typing yourself. Some basic notes on using BinProlog 4.00 are at binpro.html, where you will also find some examples.

The programming language semantics code, including the number definition ZZ, is collected in the file obj/ZZetc.obj.html, and without the html wrappings in the file obj/ZZetc.obj.

OBJ3 binary is on the CSE network at /net/cs/class/wi99/cse230/obj on the machine butinja, and also at /net/cat/disk1/goguen/obj on cat, but the cat is an older slower machine, so please don't run it there. If you can't access the CSE local network, you can get binary for Sun machines, source code, and documentation at ftp://ftp.cs.ucsd.edu/pub/fac/goguen/obj3, and you can get the latest (June 2000) open source release, OBJ3 version 2.06, cleaned up from version 2.04 (from 1992), engineered by Joseph Kiniry and Sula Ma, and built and supported by Joseph Kiniry; this runs under GCL 2.2.2. The OBJ3 Survival Guide. should be consulted for help getting started, and of course the OBJ3 Manual (there is also a pdf version) provides many details, including the OBJ3 standard prelude, which is the code that provides the builtin modules; from this you should be able to guess what each builtin module does. All this information and more is also available via the OBJ homepage.

If you have troubles with OBJ3, an alternative is the BOBJ system, which has nearly all of OBJ3 as a sublanguage, with fewer bugs, several some more advanced features. You can get it running with

    java -cp /net/cat/disk1/bobj0.9/bobj.jar bobj.BOBJ
from CSE unix machines on campus, and you can also download the system using the ftp link on the BOBJ homepage.


To my courses homepage
Maintained by Joseph Goguen
2000, 2001, 2002, 2003 Joseph Goguen
Last modified: Sat Jan 25 16:14:01 PST 2003