| Jan 14 |
Course introduction |
| Jan 16 |
Concepts for Language Design |
| Jan 21 |
Project proposals |
| Jan 23,28 |
Formalism, e.g. Featherweight Java (paper), Evaluation and Typing Derivations (.txt) (view in fixed-width font) |
| Jan 30 |
Soundness; Assembly-like IR (see sections 2.2 and 3.1.3 of my program analysis book) |
| February 4 |
JavaScript; calculator example (calc.zip, web page) |
| February 6 |
Implementing an Interpreter in JavaScript (coverage of Assignment 6 constructs was deferred to Feb 11) |
| February 11 |
Big-step environment semantics |
| February 13 |
Introduction to User-Centered Programming Language Design |
| February 18 |
User-Centered Programming Language Design, part 2 |
| February 20 |
User-Centered Programming Language Design, part 3 |
| February 25 |
User-Centered Programming Language Design, part 4 |
| February 27 |
Internal Domain-Specific Languages |
| March 3 |
Case Study: The Design of the Obsidian Language |
| March 5 |
Parsing |
| March 19 |
Pure OO PLs and Transpilation |
| March 24 |
Transpilation Demo (
txt notes,
manual c translation,
generated c,
transpiler impl)
|
| March 26 |
Corpus Studies for Programming Languages |
| March 31 |
Case Studies on Programming Languages |
| April 2 |
Language Expressiveness |
| April 7 |
Truffle: Partially Evaluating Interpreters |
| April 9 |
Glacier: Usable Enforcement of Transitive Immutability |
| April 14 |
Penrose: From Mathematical Notation to Beautiful Diagrams |
| April 16 |
Discussion: User Study results |
| April 21 |
Wyvern: Designing a Language for Security |
| April 23 |
The History and Impact of OO: Simula and Smalltalk |
| April 28 |
Programming Language Design and Performance. See also this lecture in my program analysis course for an example of getting high performance from using a DSL. |
| April 30 |
Perspectives on PL Design and Course Conclusion. |
| May 7 |
Final project presentations |