CSE 514 - Programming Language Design
||This course uses a detailed examination of the Java and ML programming languages as a basis for studying fundamental principles underlying the design and implementation of modern programming languages. The course addresses a wide range of programming language concepts and issues from both a practical and a theoretical perspective. Some attention is given to such traditional topics as control constructs, type systems and type checking, since these are the foundations for all subsequent developments. The bulk of the course, however, is devoted to more contemporary language features such as object orientation, modularity, polymorphism and concurrency. Our study of both traditional topics and contemporary features is driven by first exploring their realization in Java and ML, then comparing and contrasting with the realizations found in other modern languages such as C++, C#, Ada 95 and Modula-3. In addition, we consider some emerging concepts and directions for programming languages such as orthogonal persistence, reflection, interoperability and open implementation. While the predominant paradigm for contemporary programming languages -- the imperative, object-oriented paradigm -- is our primary focus, and the functional paradigm is our secondary focus, other paradigms such as the logic programming paradigm are also discussed. Homework problems, programming exercises and projects reinforce the material covered in lectures and readings.
[Credit Hours: 3]