Programming Language Concepts
Model Syllabus
 
Carlo Ghezzi
Politecnico di Milano
Mehdi Jazayeri
Technical University of Vienna

Course contents

The course covers concepts underlying the development of programming languages. It assumes that the students are fluent in at least one programming language, preferably C++. The course starts with an emphasis on imperative languages, including object-oriented languages but it also covers the fundamental concepts of functional and logic languages and contrasts the three different paradigms. The goal of the course is to enable the student to evaluate the inherent strengths and weaknesses of a programming language and the best ways to exploit a given language. The language used in most examples is C++ with references to Java, Ada 95, ML, Prolog, and other languages as necessary.

Topics covered

Syntax and semantics; Data types; Control structures; Modularity and programming in the large; Generic programming; Object-oriented programming languages; Functional programming languages; Logic and rule based languages;

Textbook

Programming language concepts, 3rd edition, John Wiley & Sons, 1998.
 
Lecture topics and reading assignments 
Chapter  Topic  # of hours 
1 Introduction & Overview  2
2 Syntax and semantics  8
3 Data types  8
4 Control structures  6
5 Modularity  6
6 Object-oriented programming languages  6
7 Functional programming languages  6
8 Logic and rule-based programming languages  6
9 Conclusions  2

Notes

We believe that every course should cover Chapters 1 through 5. These are the basics that every computer scientist must know. We spend considerable lecture time on Chapter 2, going through Simplesem examples. Here, the students really begin to appreciate the semantics and costs of language features. We also highly recommend covering Chapter 6. It may be argued that object orientation should be required knowledge for all computer scientists; but even if not, the chapter provides an opportunity to show how the concepts learned earlier can be used to understand and analyze the important concepts of object orientation. A full, or more advanced, course that deals with languages and paradigms should cover Chapters 7 and 8 as well. Each of these chapters is based heavily on concepts of Chapters 1-5. Covering these paradigms helps integrate the student's knowledge. The chapters, however, are independent. If the instructor is more inclined to one of these paradigms, it is possible to emphasize the appropriate chapter and skip the other one. We, however, believe that in a general course on programming languages, it is better to cover several paradigms.

The simplesem interpreter, available on this site, can be used as a tool for exercises that bring the semantics of language features to life.