CS422 - Programming Language Design (Spring 2019)
Students enrolled in this class are expected to check this web page regularly. Complete lecture notes will be posted here.
CS422 is an advanced course on principles of programming language design. Major semantic approaches to programming languages will be discussed, such as structural operational semantics (various kinds), denotational semantics, and rewriting-based semantics. Programming language paradigms will be investigated and rigorously defined, including: imperative, functional, object-oriented, and logic programming languages; parameter binding and evaluation strategies; type checking and type inference; concurrency. Since the definitional framework used in this class will be executable, interpreters for the designed languages will be obtained for free. Software analysis tools reasoning about programs in these languages will also arise naturally. Major theoretical models will be discussed.
- Meetings: W/F 14:00 - 15:15, 1304 Siebel Center
- Credit: 3 or 4 credits
- Professor: Grigore Rosu (Office: SC 2110)
- Office hours: Held by Grigore Rosu in SC 2110; by appointment.
Lecture Notes, Useful Material
The links below provide you with useful material for this class, including complete lecture notes. These materials will be added by need.
- Introduction slides
- Structural Operational Semantics slides
- Book lecture notes on the IMP language, big-step SOS, and small-step SOS (you can skip the rewriting logic and Maude parts; comments welcome!): IMP-BigStep-SmallStep
- K Framework (Official website: http://kframework.org)
- K Tutorial, Part 1: Defining LAMBDA (see the provided video and textual documentation)
- K Tutorial, Part 2: Defining IMP (see the provided video and textual documentation)
- K Tutorial, Part 3: Defining LAMBDA++ (see the provided video and textual documentation)
- K Tutorial, Part 4: Defining IMP++ (see the provided video and textual documentation)
- K Overview paper to learn more about K. Sections 1 and 2 (the other sections are optional now; they are covered below)
- SIMPLE: Designing Imperative Programming Languages
- SIMPLE untyped, statically typed, and dynamically typed (Part 7 of the K Tutorial)
- K Tutorial, Part 5: Defining type systems (this is optional at this stage, but instructive for better understanding the static semantics; read at least Lesson 1, and skim Lesson 6)
- K Overview paper, which also defines and explains SIMPLE. Sections 3 and 4 (the other sections were covered above)
- KOOL: Designing Object-Oriented Programming Languages
- KOOL untyped, statically typed, and dynamically typed (Part 8 of the K Tutorial)
- FUN: Designing Functional Programming Languages
- LOGIK: Designing Logic Programming Languages
- Logik (Part 10 of the K Tutorial)