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.
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.
Recommended Books
Note: Some links below point to pages that do not yet exist; these links will be gradually updated as the quarter progresses.
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.
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.BOBJfrom CSE unix machines on campus, and you can also download the system using the ftp link on the BOBJ homepage.