Open Access
- 8 January 2026
- journal article
- Published by Association for Computing Machinery (ACM) in Proceedings of the ACM on Programming Languages
- Vol. 10 (POPL) , 413-443
Abstract
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.Keywords
Funding Information
- National Science Foundation (2313998)
- National Science Foundation (2402449)
This publication has 65 references indexed in Scilit:
- Extended Call-by-Push-Value: Reasoning About Effectful Programs and Evaluation Order2019
- A Core Quantitative Coeffect Calculus2014
- Bounded Linear Types in a Resource Semiring2014
- Coeffects: Unified Static Analysis of Context-Dependence2013
- Lightweight Polymorphic EffectsLecture Notes in Computer Science, 2012
- Strictness Meets Data FlowLecture Notes in Computer Science, 2010
- Call-by-push-value: Decomposing call-by-value and call-by-nameHigher-Order and Symbolic Computation, 2006
- Call-By-Push-Value2003
- Implementing Projection-based Strictness Analysis1992
- Linear logicTheoretical Computer Science, 1987