====== Learning Materials ====== ===== Textbook ===== The preferred textbook for this course is [[http://dcpl.mit.edu|Turbak, Gifford and Sheldon: Design Concepts in Programming Languages]]. If you don't want to [[http://www.amazon.com/Design-Concepts-Programming-Languages-Franklyn/dp/0262201755|buy it]], you can download it as a pdf file from [[https://encrypted.google.com/search?&q=design+concepts+in+programming+languages|various sites on the internet]]. The topics we will have covered fall within the first three parts of the textbook (Foundations, Dynamic Semantics and Static Semantics). These parts can then be divided into two main categories: core chapters and peripheral chapters. Core chapters are chapters that are fully covered by the course and you should read them very thoroughly. Peripheral chapters, on the other hand, are only partially covered by the course and you are expected to go through only those topics (and to the same depth) that we've actually talked about at the lectures. ==== Core Chapters ==== * Operational Semantics * Denotational Semantics * FL: A Functional Language * Simple Types * Polymorphism and Higher-order Types ==== Peripherial Chapters ==== * Syntax * Naming * State * Control * Data * Type Reconstruction * Abstract Types * Appendix A, A Metalanguage When studying from the textbook, please consult [[http://dcpl.mit.edu/bugs.html|its errata]] regularly. ===== Papers ===== The papers below can be used both as an alternative and as a supplement to the textbook. They can be roughly divided into two groups: theory and calculi. Theory papers address the fundamental issues in programming language theory, whereas calculi papers use the fundamental concepts to describe certain core languages. ==== Theory ==== * [[http://people.cis.ksu.edu/~schmidt/705s12/Lectures/chapter.pdf|David A. Schmidt: Programming language semantics]] * [[http://lucacardelli.name/Papers/TypeSystems.pdf|Luca Cardelli: Type systems]] * [[http://www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf|Christopher Strachey: Fundamental Concepts in Programming Languages]] ==== Calculi ==== * [[http://doi.acm.org/10.1145/503502.503505|Atsushi Igarashi, Benjamin C. Pierce, and Philip Wadler: Featherweight Java: A Minimal Core Calculus for Java and GJ]] * [[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.8777|Benjamin C. Pierce: Foundational Calculi for Programming Languages]] * {{courses:A4M36TPJ:ch4.pdf|Raghu Ramakrishnan, Johannes Gehrke: Database Management Systems, 2nd ed., chapter 4}} ===== Other Materials ===== * [[http://www.cis.upenn.edu/~bcpierce/tapl/|Benjamin C. Pierce: Types and Programming Languages]] - a superb textbook on types and semantics * [[http://www.cs.cmu.edu/~rwh/misc/tspl.pdf|Robert Harper: Type Systems for Programming Languages]] - electronic notes on types and semantics * [[http://mitpress.mit.edu/books/foundations-object-oriented-languages|Kim B. Bruce: Foundations of Object-Oriented Languages]] - more introductory text written from the perspective of object-oriented languages * [[http://people.cis.ksu.edu/~schmidt/text/densem.html|David Schmidt: Denotational Semantics: A Methodology for Language Development]] - textbook recommended by one of your predecessors * http://cs.stackexchange.com/ - Q&A forum focused on theoretical computer science * {{courses:A4M36TPJ:lambda.pdf|Raúl Rojas: A Tutorial Introduction to the Lambda Calculus}} * [[http://robotzeitgeist.com/2010/03/model-turing-machine.html|Real Turing Machine - video]] * [[https://www.doc.ic.ac.uk/~pg/Computation/|Computation]] - Nice course about computation and semantics * {{:courses:a4m36tpj:flow_control.pdf|Lecture about Flow Control and CPS}} /* * [[https://www.dropbox.com/sh/xajhsde956iozd3/Z5GTM4WpNa|Code examples]] */ /* ~~DISCUSSION:on~~ */