CSE 230 Homepage
Principles of Programming Languages
Winter 2001


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 my previous CSE 230 website.
MW 12:45 - 1:40, APM 3218
Section A00, ID 292711

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.

Recommended Book

All three required books should be available at the UCSD Bookstore, and all four books should be 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). McLennan is particularly good for background information on syntactic and historical issues.
Additional Information

  1. Reading assignments
  2. Homework assignments
  3. Some notes on readings
Be sure to reload these pages frequently, because sometimes they are updated frequently!

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, Kai Lin, so please do not ask too much of him. 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.

The midterm exam, which was held on 21 February 2001 (the grader Kai Lin says the average grade was 65.6 with standard deviation 15), and the final exam, held Tuesday, 20 March 2001, are now online. The midterm and final from the previous time I taught CSE 230 (Winter 1999) are also online, but are not representative for the current class.

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.

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.

Binary for OBJ3 is at /net/cs/class/wi99/cse230/obj on the CSE network, and also at /net/cat/disk1/goguen/obj, but this is a slower, older machine. An OBJ3 Survival Guide is available, and of course the OBJ3 Manual. See also the "standard prelude," which is the code that generates the OBJ3 builtin modules (it is also listed in the OBJ3 Manual); with this information you should be able to guess what each builtin module does.

To my courses homepage
Maintained by Joseph Goguen
© 2000, 2001 Joseph Goguen
Last modified: Wed Sep 19 16:16:07 PDT 2001