PL DiRP Spring 2023 Reading List
Week 1: Types and Programming Languages
Skim Chapter 1
I think that this provides a good high-level overview for generally what type systems are in programming languages, why they are useful, and what their shortcomings can be.
I think skimming this gives some good context for a kind of tool that is available to the programming languages researcher.
Skim Chapter 8
Gives a super simple introduction to how to go about defining a type system. Understand the notion of a program being "stuck", and how proving progress and preservation, let's you prove "safety". Don't get to bogged down in understanding all the proofs. Learn how to read typing rules.
Read Chapter 9.1-9.3
If you are unfamiliar with lambda calculus, skim Chapter 5. Understand basically how the simply typed lambda calculus's type system works. Don't spend too much time on it though, we'll go over it together if it's confusing. Think about what safety means for simply typed lambda calculus. How does the type system let us prove properties about non-terminating programs? If we implemented a checker for this type system, why would it not run forever on non-terminating programs?
Week 2: Linear types can change the world (1990)
A paper oft cited as the source of the practical use of linear types in programming languages. It builds up a basic linear type system and shows how you can unify this into a nonlinear world and build some non-trivial programs out of it. It also deals with how to allow having many read references alive to something, while still keeping write references linear.
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.55.5439&rep=rep1&type=pdf
Sub-structural types systems
Linear types can change the world! (1990)
A paper oft cited as the source of the practical use of linear types in programming languages. It builds up a basic linear type system and shows how you can unify this into a nonlinear world and build some non-trivial programs out of it. It also deals with how to allow having many read references alive to something, while still keeping write references linear.
Cyclone Paper
Linear Regions are all you need (2006)
Seems like an interesting re-framing of an early rust type system
Original Rust paper
Rustbelt (2018)
Dahlia Paper (time-sensitive affine types)
Space time paper (Aetherling)
Effect Systems
A good bibliography: link
Polymorphic Effect Systems (1988)
Type and Effect Systems
A short text-book / course notes describing types and effects. Chapter 10 on look pretty good.
Philosophical Foundations
Natural Deduction
Sketches out this difference between a "judgement" and a "proposition".
Ah and now we get to Martin Löf.
https://ncatlab.org/nlab/files/MartinLofOnTheMeaning96.pdf
Goes into great depth about the history of the terms "judgement" and "proposition". He begins on highlighting how they are ambiguous.
History of verificationism? I haven't read this yet. but it looks good!
https://michaelt.github.io/martin-lof/Martin-Lof-Verificationism-Then-and-Now-2013.pdf
Databases
Relational Databases
The paper that introduced the idea of relational databases.