Select Page

PL Perspectives

Perspectives on computing and technology from and for those with an interest in programming languages.
Parametric Subtyping for Structural Parametric Polymorphism

Parametric Subtyping for Structural Parametric Polymorphism

Recursive types, generics (sometimes called parametric polymorphism), and subtyping are all essential features for modern programming languages across numerous paradigms. However, structural subtyping is undecidable in the presence of recursive types and generics. In our POPL 2024 paper and its accompanying implementation, we propose a reconstruction of the interaction between recursive types, generics, and structural subtyping from first principles. We present a notion of parametricity for type constructors that forms the basis of a suitable, decidable fragment of structural subtyping, which we call parametric subtyping.

Read more...

The Missing Mentoring Pillar

The Missing Mentoring Pillar

Read more...

Evaluating Human Factors Beyond Lines of Code

Evaluating Human Factors Beyond Lines of Code

Software systems researchers want to make human-centered claims, but don’t have the proper tools to do so. That’s how we ended up with the ubiquitous lines-of-code comparison found in evaluation sections everywhere. In this post, I explore: what can we reasonably expect researchers to do that’s higher quality than LOC but less effort than a full-blown user study?

Read more...

Evaluating the new ASPLOS review process

Evaluating the new ASPLOS review process

Read more...

Prompts are Programs

Prompts are Programs

Prompts are our way of communicating intent to AI foundation models and large language models. The PL and SE communities have great experience understanding how to build robust software that should now be applied to AI model prompts.

Read more...

Soundly Handling Linearity

Soundly Handling Linearity

Programming languages can statically ensure that certain resources are used exactly once through a linear type system based on Girard’s linear logic. Typical linear type systems track the number of times that variables are used under the assumption that continuations are always used linearly. Alas, this assumption is false in programming languages with powerful non-linear control flow features. For instance, in POSIX C the process duplication function `fork()` returns to its caller twice. More generally control operators such as Plotkin and Pretnar’s effect handlers, as in the web-programming language Links, enable the programmer to capture a continuation and then invoke it more than once or drop it altogether.

Read more...

A DSL for Implementing Math Functions

A DSL for Implementing Math Functions

Numerical code needs to carefully balance accuracy and performance. A new DSL, MegaLibm, makes this easier by checking for numerical correctness and offering flexible compilation to efficient code. By reconceptualizing classic numerical techniques like polynomial approximation and range reduction as type-theoric operations like casts and binding operators, MegaLibm makes numerical code composable, and its ability to plug in mathematical an numerical tools (like Sollya) makes it easier and safer to write such code.

Read more...

AI Software Should be More Like Plain Old Software

AI Software Should be More Like Plain Old Software

A Tale of Two Softwares: In a world where AI is revolutionizing the way we interact with technology, a new type of software emerges: AI Software (AISW). But with great power comes great responsibility, and the systems research community must rise to the challenge of ensuring AISW is as robust, secure, and safe as its predecessor, Plain Old Software (POSW).

Read more...