CSE 230 Homepage
Principles of Programming Languages
Winter 2002


The final exam for this class was on Friday, 22 March, in Center Hall 218, from 3:00 pm to 5:59 pm; here is an online copy . For those doing projects instead of the exam, the paper was due on the last day of class.

The midterm of 7 February is on the class website, in postscript, and a solution page for the second problem is available. The average was 60.2 and the variance was 43.42. (Here is a link to the ML code that produced these numbers; let me know if you find a bug!)


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 Java, HTML, JavaCC, 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. Here is a link to the website of my previous CSE 230.
TuTh 3:55 - 5:15, Center 218
Section A00, ID 424464

Required Books You should bring all three 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

Sethi 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. In addition, the following may be of interest:
Additional Information

Note: Some linked material may point to pages from the last time I taught this class; this 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! If you can find on the web a Java applet that I actually use to illustrate some aspect of the class, you will get some extra credit.

Grades will be based on the larger of: 60% for the final, 20% for the homework, and 20% for the midterm; or else 40% for the final, 30% for the homework, and 30% for the midterm. The grader is a volunteer, Monica Marcus, so please do not ask too much of her. The final exam can possibly be replaced by a final project in some cases; to exercise this option, you must obtain my permission, based on a detailed outline of the project given to me by the end of the fourth week of classes; some suggestions 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 student, you can email csehelp@cs.ucsd.edu to request a CSE student account.

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.

My office hours are right after class, or by appointment.

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, plus 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 Joseph Goguen
Last modified: Wed Apr 3 11:33:53 PST 2002