CSE 431/531
Programming Languages

Fall 2003



An introduction to modern computing concepts and computational models as embodied in a number of different classes of languages. These include  (1)function-based languages such as Lisp, Schema, SASL, ML; (2) logic based languages such as Prolog, Parlog, Strand, OPS; (3) object oriented languages such as Smalltalk, C++.




Course Topics

References

News

Homeworks
-> HW1
HW2
Answer key
HW3
Answer key
HW4
Answer key
HW5
Answer key


 Faculty-in-Charge
P. M. Kogge       kogge@nd.edu
 TA
Xiaorong Xiang       xxiang1@nd.edu   206 Cushing Hall

Lecture
Tuesday, Thursday 09:30-10:45   119 Debartolo Hall

Text Book
Peter M. Kogge, The Architecture of Symbolic Computers, McGraw Hill, 1991

Course Goals
The von Neumann model of computing has formed the basis of virtually all of the "traditional" programming languages such as Fortran, C, Pascal, Cobol, Ada, etc. The goal of the course is to introduce the student to a number of the latest developments in alternatives to the von Neumman model, and describe some of the more significant languages which have been derived from them. Understanding these developments will involve a four step process. First, the fundamental mathematics behind the computational models will be reviewed. Then we will introduce the key abstract machines that mechanize this mathematics into a computational model, and provide the common semantics for languages of each class. Third, we will introduce the "prototypical" programming language fro that class (Lisp, Prolog, and Smalltalk), and how the syntax of these languages permit direct specification of the kinds of computational steps provided in the abstract machines. This includes compilers and interpreters, especially self-interpreters. Finally, we will survey other common languages in each class, architectures of real machines that were optimized for them, and unique capabilities offered by them, such as true and very natural parallelism.

Although much of the discussion  and many of the assignments will involve snippets of code, this is not a course in programming per se; instead the emphasis on acquiring a deep understanding on why different classes of computational models are useful, and how these models very naturally lead to new programming languages.