CSE 130 Homepage
Principles of Programming Languages
Winter 2006


From March 2006, this course was taught by Ranjit Jhala, focusing on the ML language; see CSE 130 Winter 06 website.

The midterm was held 16 Febuary.

There is a WebBoard for the class.

The future homework that was on the homework page was copied from last year's course and is not valid for this year; it is now deleted to avoid confusion.

Here is a link to the previous version of this class, which you may find useful for exams, etc., though this year differs in some ways.

Prerequesites for this class are 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 drop the course, or else learn the material (which is likely to be very difficult if you don't already know it); one good textbook is Discrete Mathematics with Applications, by Susanna Epp (Brooks/Cole 1999 or 2004). Some of this material is essential for certain parts of the class.

Please do not ask the TAs, grader, or professor for help doing your homework; this is not fair to other students. Of course, it is acceptable - indeed, it is encouraged! - to ask questions about the content of the course, which may include topics related to homework problems. And naturally you can ask about bugs in the homework questions (we really want to know if there are any). Also please check the website before asking administrative questions; many answers will already be here.

Past classes have seen some homework answers with strongly overlapping content. In this class, a grade of zero will be assigned for such answers, and there will be more drastic consequences for repeat offenders. You can talk with other students about how to approach homework problems, but you are not allowed to work together on solutions. See the Integrity of Scholarship Agreement, by Scott Baden, and the policies on Plagariasm in UCSD Policy on Integrity of Scholarship (sorry, it's in MS Word - the original is at www-senate.ucsd.edu/manual/appendices/app2.htm).


Some general features, history and comparison of programming languages. Abstract and concrete syntax; induction. Types and modules; type systems and module systems. Functional programming and polymorphism; logic programming and Prolog. If time permits, the course will conclude with a brief discussion of internet languages like HTML, JavaScript, Perl, XML, OWL.

Click here for an outline of the class.
Warning: This is subject to change as I get a better feeling for this particular class.

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; this is not a class on programming, nor even on programming languages as such; it is a class on principles of programming languages.

TuTh 5:00 - 6:20 pm, HSS 1330
ID 549471, Section A00
Discussion Section Friday 10:00 - 10:50 pm, Center 113
Instructor office hours are right after class, in EBU3B 3234 - but this is subject to change


The following is required:

You should bring this book to class, because I will not always copy material that is in it onto the board during lectures.

The following books are recommended:

The required book should be available at the UCSD Bookstore, and the other books should be on reserve at the Science and Engineering Library. (You can likely buy these books more easily and even cheaply from amazon.com or some other online bookseller). Stansifer is close to the spirit of this course. Pratt and Zelkowitz are 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
  1. Reading assignments
  2. Homework assignments
  3. Class notes
You may need to reload pages frequently, because sometimes they are updated frequently!

If you write, or find on the web, a Java applet that I actually use to illustrate some aspect of the class, you will get extra credit towards the homework, the amount depending on the difficulty and value of the code.

Grades will be based on 50% for the final, 25% for the homework, and 25% for the midterm (subject to modification as I get to know the class better).

The class TAs are Dana Dahlstrom (office hours: Wednesday 9:30 - 10:30 AM in CSE B225) and William Matthews (office hours: Monday 3:00-4:00 PM in CSE B225).

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

Other Resources

Supplemental material showing how Java could have been integrated with Sethi's book, by Abigail Gray.

A pdf poster of the history of programming languages, on the O'Reilly site.

A very detailed (perhaps too detailed, and also not always accurate) graphical history of programming languages, by Eric Levenez, who also has other interesting resources on his website.

An applet to help visulalize and manipulate BNF.

An applet for regualar expression pattern matching.

A graphical depiction of depth first search, including code to implement the applet.

Standard ML of New Jersey is available on ACS machines such as ieng9.ucsd.edu; to update your environment to access sml, type prep smlnj, and then to actually run it, just type sml. For graduate students, version 110.0.6 of sml is available on 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; however, this may not work from all machines, and may not work for undergraduates. If none of this works for you, you can download the latest version of ML (version 110.0.7) over the web from www.smlnj.org/software.html or cm.bell-labs.com/cm/cs/what/smlnj; another alternative is the OCAML variant of ML.

Sun workstation Binary for BinProlog 4.00 is at prolog/bp on this website, as well as at /net/cs/class/wi99/cse230/prolog/bp and /net/cat/disk1/prolog/bp. Some basic notes on using BinProlog 4.00 are at binpro.html. GNU Prolog for Linux is available at http://pauillac.inria.fr/~diaz/gnu-prolog. If anyone knows a free Prolog for Windows, please let us know about it.

To my courses page
Maintained by Joseph Goguen
© 2000 - 2006 Joseph Goguen
Last modified: Wed Mar 29 04:49:09 PST 2006