The Programming Languages Qualifying Exam centers around material in the course 91.531, DESIGN OF PROGRAMMING LANGUAGES, and its prerequisite 91.301, ORGANIZATION OF PROGRAMMING LANGUAGES. 91.502, FOUNDATIONS OF COMPUTER SCIENCE, is also a prerequisite for 91.531, but except for the material in 91.502 that is explicitly covered in 91.531, material from 91.502 will be incorporated into the Foundations Qualifying Exam and not into the Programming Languages Qualifying Exam. See the files ~rgumb/91.531/README for additional information on the contents of 91.531 and 91.301. 1. Concepts of Programming Language Texts R. Stansifer, THE STUDY OF PROGRAMMING LANGUAGES, Prentice-Hall, 1995. R. Sethi, PROGRAMMING LANGUAGES: CONCEPTS AND CONSTRUCTS, 2-nd edition, Addison-Wesley, 1996. B. MacLennan, PRINCIPLES OF PROGRAMMING LANGUAGES, second edition, Holt, Rinehart, and Winston, 1987. H. Ledgard and M. Marcotty, THE PROGRAMMING LANGUAGE LANDSCAPE, second Ed., SRA, 1986. 2. Scheme Textbooks. V. Manis and J. Little, THE SCHEMATICS OF COMPUTATION, Prentice-Hall, 1995. H. Abelson et. al., STRUCTURE AND INTERPRETATION OF COMPUTER PROGRAMS, second edition, MIT Press, 1996. 3. SML Textbooks. L. Paulson, ML FOR THE WORKING PROGRAMMER, second edition, Cambridge University Press, 1996. J. D. Ullman, ELEMENTS OF ML PROGRAMMING, ML 97 edition, Prentice-Hall, 1998. 4. Supplemental References on Scheme and SML. R. Dybvig, THE SCHEME PROGRAMMING LANGUAGE, ANSI SCHEME, second edition, Prentice-Hall, 1996. R. Milner et al., THE DEFINITION OF STANDARD ML (Revised), MIT Press, 1997. 5. Other texts: M. Covington et al, PROLOG PROGRAMMING IN DEPTH, Prentice-Hall, 1997. R. D. Gumb, PROGRAMMING LOGICS: AN INTRODUCTION TO VERIFICATION AND SEMANTICS, Wiley, 1989. H. Lewis and C. Papadimitriou, ELEMENTS OF THE THEORY OF COMPUTATION, Prentice-Hall, 1981. Z. Manna, MATHEMATICAL THEORY OF COMPUTATION, Mc Graw-Hill, 1974. TOPICS 1. History of programming languages. Introduction to the paradigms of programming. 2. Scheme and SML as executable metalanguages. Programming in Scheme. Programming in SML. 3. Syntax. Locations and references. Expressions. Syntactic sugar. 4. Types Basic types. Homogeneous and heterogeneous types. Parametric, ad hoc, and other forms of polymorphism. Type inference. 5. Abstraction. Compound statements and blocks. Scope rules. Parameter passing mechanisms. Structures and Modules. Abstract data types. 6. The paradigms of programming 1: Imperative programming. For programs. While programs. The fundamental theorem of structured programming. Extending structured programming. 7. The paradigms of programming 2: Functional programming. Functions as first-class objects. Recursion elimination and tail recursion. Proving functions: fixed-points and induction. Streams. 8. The paradigms of programming 3: Object-oriented programming. Message passing. Generic operators. Single vs multiple inheritance. 9. The paradigms of programming 4: Logic Programming. Normal forms. Unification. Resolution. Horn Clauses. Definite Horn clauses. Backtracking. 10. The /\-Calculus. Reduction rules. Eager and normal-order evaluation. Combinators. The Church-Rosser Theorem. The /\-value calculus. 11. Semantics. Environments and states. Extensionality, compositionality, and referential transparency. Denotational semantics. Operational semantics. Translational and other semantics. 12. Hoare-style Axiomatizations. Formal specifications. Partial and total correctness. Loop invariants. Termination. Program verification.