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 |