|
|||
|
MATH 384: "Giving lambda its legs since the year 2000." |
|||
|
|
Programming Language Theory, Design, and Implementation This course is a study of modern systems for expressing and executing computer programs. We will explore a number of advanced computer language features, beyond those available in imperative languages such as C. We will survey key programming language paradigms--- functional (Scheme, Standard ML, Haskell), object-oriented (Smalltalk), and logic (Prolog). We will take a formal approach to understanding the concepts underlying these paradigms--- considering their concrete and abstract syntax, their semantics, and their type systems, and also the lambda calculus of Church. We will also cover selected topics in the implementation of language systems such as interpreters, compilers, and memory managers. We'll be using Scala, a language that enables a hybrid of object-oriented and functional programming, learning Scala in the first weeks, and using it all semester as our interpreter implementation language. Your practical goal is to go beyond languages like Python and Java, to gain insight into the connections between programming language design and mathematical logic, and to develop the skills and knowledge needed to build programming language systems. Prerequisites: MATH 121; familiarity with an imperative programming language (e.g. Java, Python, C, C++, Ruby).
Meets: 2:10pm MWF in Library 389. |
||
| Topics |
|
Schedule of Topics and Lecture Materials:
|
|
| Work |
|
Homework, Programming Projects:
|
|
| Texts |
|
Scala Resources: Programming in Scala by Odersky et al. This is a fast-moving introduction and overview of the features and syntax of Scala. Scala web the official site for the language; includes installation download links, white papers, reference documents, tutorials, code examples, and full documentation of the language and its API. General: Programming Languages: Application and Interpretation by Krishnamurthi. This is available on-line as a PDF. This text is most like this semester's course; there is considerable overlap, except its use of the Scheme programming language. I will put copies of the text in Library 382 and also on library reserve. Structure and Interpretation of Computer Programs by Abelson and Sussman. Used by some schools as an intro text, it introduces a lot of program design ideas that hint at many advanced language features. Uses the functional language Scheme, a clean dialect of LISP. Check out the "metacircular evaluator" project; we'll be doing something similar in the first weeks. Now free, on-line. Concepts in Programming Languages by John Mitchell. Standard undergraduate text for a programming language survey course. Programming Languages Concepts and Constructs by Sethi. Similar to the above. Essentials of Programming Languages by Friedman et al. Similar to the above. Uses Scheme.
Theory:
Foundations for Programming Languages by John Mitchell. an advanced text covering the theory of programming languages using typed lambda calculi. Programming Languages: Theory and Practice by Bob Harper. These are an on-line draft of a book that provides tighter, more accessible discussion of the topics in Mitchell's book. Some chapters are not complete. There are two PDF files, one a hyperlinked version ("online") and the other not ("offline"). Types and Programming Languages by Benjamin C. Pierce. a careful, comprehensive introduction to programming language type systems.
|
|
| Work |
|
There will be weekly short programming assignments and problem sets,
and a take-home final. Throughout the semester we will be implementing
interpreters for functional languages similar to those prescribed
by the PLAI text above.
|
|
| List |
|
I will use the mailing list math384-s@lists.reed.edu
to post announcements about the course.
Feel free to use this list for discussion of the course.
|
|