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.
Recommended Book
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.
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.