Programming language design and analysis
Fall semester 2013/2014. previous: Fall 2012
Instructor: Marius Minea
marius@cs.upt.ro
Course information
Lectures: Mon 18-20h, A 204
Lab: Tue 8-10h, B528
Office hours: on request
Evaluation:
Homeworks / lab / projects: 50%.
Exam: 50%
Grades
Lecture notes
- Introduction. Functional Programming.
- Lambda Calculus
Readings: Lambda calculus (course notes, Jeff Foster)
Principles of Programming Languages, Uday Reddy, U. Birmingham (handouts 1-4)
- Type systems.
Readings: Luca Cardelli: Type Systems (p.1-7)
L. Cardelli, P. Wegner. On Understanding Types, Data Abstraction, and Polymorphism (sec. 1-1.5, 2.1-2.2)
- Typed lambda calculus and type inference. lecture slides by Jeff Foster, U. of Maryland (slides 1-17, 37-48, 58-63)
-
Eager and lazy evaluation. sieve of Eratosthenes. See also streams as delayed lists (from Abelson and Sussman)
Continuations. slides, TU Darmstadt (w/o simulation of web programs, implementation of continuations)
ML example for factorial
- Garbage collection. slides by Vladimir Shmatikov, U. Texas, Ina Schaefer, U. Kaiserslautern
- The Java virtual machine slides from Aarhus University
- Dynamic compilation slides by Michael Hind (IBM) (w/o details
of particular JVMs for sec. 3 and 4)
- Language support for concurrency. More details: Ted Leung's A Survey of Concurrent Constructs
See also: concept of persistent data structures in Clojure (J. Hickey)
further reading: Concurrency in other languages (D. Aspinall, Edinburgh); paper on STM
- Java Concurrency. v. J. Manson, W. Pugh, S. Adve, The Java Memory Model (sec. 1-4)
- Constraint logic programming. slides by Thom Frühwirth (terms, unification, resolution, comparison between search/solving in LP and CLP, p. 107-123, 129-135)
further reading: CLP in ECLiPSE (esp. Ch. 4)
- The Design of Scala. overview, tutorial (classes, traits, type system)
- Domain-specific languages. See also Martin Fowler's book (archived draft) (patterns for building internal DSLs)
Homeworks
- Homework 1. Functional program interpreter. Due Oct. 8, 2013.
- Homework 2. Lambda calculus evaluator. Due Nov. 19, 2013.
- Homework 3. Type inference. Due Dec 10, 2013
- Homework 4. Prolog interpreter. Due Jan 12, 2013
Resources
Books
- Abelson and Sussman, Structure and Interpretation of Computer Programs. The classic introductory programming course at MIT, now online.
You should be able to use it as reference for the notions in the first
three chapters
- Friedmann, Wand and Haynes, Essentials of Programming Languages.
Perhaps more heavily interpreter-oriented, but also very well explained. Available in the free ebook library
- van Roy and Haridi, Concepts, Techniques and Models of Computer Programming.
Well structured and very readable. An essentially complete draft is available.
- S. Krishnamurthi, Programming Languages: Application and Interpretation. Made available for free by the author.
Also very well structured and readable, with a few special topics (see e.g. continuations for web programming)
Online Courses
Martin Odersky. Functional Programming Principles in Scala
Software
- the OCaml implementation and documentation
- the OCaIDE development environment (Eclipse plugin)
- a short introductio to OCaml (Scott Smith, Johns Hopkins U.)
Marius Minea
Last modified: Mon Feb 24 13:00:00 EEST 2014