Prototyping Programming Languages Logo

17-396/17-696/17-960: Language Design and Prototyping

Tue/Thu 3:00-4:20pm in Wean 5302
Spring 2020
12 units

Professor Jonathan Aldrich
Office: Wean 4216
Office hour: Fridays 1-2pm





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 (, 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