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.
The following is required:
The following books are recommended:
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.
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.