一句话:提出一种模块化高阶基数分析,可识别单次使用的 thunk 与 lambda,并证明其相对 call-by-need 语义的可靠性。
自20世纪80年代中期以来,函数式语言编译器一直在尝试识别并利用只使用一次的 thunk 和 lambda,但在实践中兼顾分析能力与简洁性并不容易。本文针对高阶语言提出一种模块化的基数分析,可发现 single-entry thunk 与 one-shot lambda。作者证明该分析相对于标准 call-by-need 语义是可靠的,并在一个完整的最先进优化编译器中实现和测量。结果显示,该分析能识别大量单次使用的对象,并支撑多种程序优化。本文扩展了 POPL 2014 会议论文,补充了证明、更详细的评估,并深入考察导致分析精度损失的因素。
Abstract Since the mid '80s, compiler writers for functional languages (especially lazy ones) have been writing papers about identifying and exploiting thunks and lambdas that are used only once. However, it has proved difficult to achieve both power and simplicity in practice. In this paper, we describe a new, modular analysis for a higher order language, which is both simple and effective. We prove the analysis sound with respect to a standard call-by-need semantics, and present measurements of its use in a full-scale, state-of-the-art optimising compiler. The analysis finds many single-entry thunks and one-shot lambdas and enables a number of program optimisations. This paper extends our preceding conference publication (Sergey et al. 2014 Proceedings of the 41st Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL 2014) . ACM, pp. 335–348) with proofs, expanded report on evaluation and a detailed examination of the factors causing the loss of precision in the analysis.
@article{paperbot73,
title = {Modular, higher order cardinality analysis in theory and practice},
author = {ILYA SERGEY and DIMITRIOS VYTINIOTIS and SIMON L. PEYTON JONES and JOACHIM BREITNER},
journal = {Journal of Functional Programming},
volume = {27},
year = {2017},
doi = {10.1017/s0956796817000016}
}