Typing Strictness
Strictness analysis is critical to efficient implementation of languages with non-strict evaluation, mitigating much of the performance overhead of laziness. However, reasoning about strictness at the source level can be challenging and unintuitive. We propose a new definition of strictness that refines the traditional one by describing variable usage more precisely. We lay type-theoretic foundations for this definition in both call-by-name and call-by-push-value settings, drawing inspiration from the literature on type systems tracking effects and coeffects. We prove via a logical relation that the strictness attributes computed by our type systems accurately describe the use of variables at runtime, and we offer a strictness-annotation-preserving translation from the call-by-name system to the call-by-push-value one. All our results are mechanized in Rocq.
Authors
- Daniel Sainati
- BENJAMIN C. PIERCE
- Joseph W. Cutler (ORCID: https://orcid.org/0000-0001-9399-9308)
Institutions
- University of Pennsylvania (US)
- Philadelphia University (US)
Publication Details
- Journal
- Proceedings of the ACM on Programming Languages
- Published
- 2026-01-08
- DOI
- https://doi.org/10.1145/3776657
- Primary Topic
- Logic, programming, and type systems
- Type
- article
- Field-Weighted Citation Impact
- 0.00