Linear Types for Low-level Languages

In this talk, we covered early papers (primarily, by Girard, Lafont, and Abramsky) on linear logic and its reflections into computation. The goal was to understand why linearity is often turned to as a principled way to control resource usage, as shows up in a language like Rust. From the very beginning, researchers realized the implications for “low-level” languages - that linear resources would eliminate the need for garbage collection, allow in-place mutation, and enable safe parallel computation. However, pure implementations of linearity incur lots of copying, doing away with any efficiency gained, and we covered a survey of papers that attempted to reconcile this contradiction by weakening linearity in controlled ways.

Notes:

Just after the talk, over lunch, we had a lab discussion about the phrase “low level”. Here are some thoughts:

the phrase is relative, both over time and depending on the programming task at hand

a “low level” task is “one that you shouldn’t need to worry about” while solving your current task

And here are some example “low-level” tasks: