一句话:将 TRMc 推广为 TRMC,从规约等式推导通用算法,并在 Koka 实现支持非线性控制的混合版本。
论文将尾递归模 cons(TRMc)推广为尾递归模上下文(TRMC),并从规范计算通用变换算法:抽象上下文需实现应用与复合且满足上下文律。该框架可实例化为 CPS、结合运算、monoid、semiring 与 cons 乘积等;作者用 Minamide 洞演算证明 cons 实例可靠,并基于 Perceus 堆语义论证原地更新。针对 call/cc、shift/reset、代数效应处理器等非线性控制使既有 TRMc 失效的问题,论文扩展堆语义为混合方法以动态适应非线性控制流,并在 Koka 中实现;基准显示 TRMC 变换后的函数不慢于手工替代方案。
The tail-recursion modulo cons transformation can rewrite functions that are not quite tail-recursive into a tail-recursive form that can be executed efficiently. In this article we generalize tail recursion modulo cons (TRMc) to modulo contexts (TRMC), and calculate a general TRMC algorithm from its specification. We can instantiate our general algorithm by providing an implementation of application and composition on abstract contexts, and showing that our context laws_ hold. We provide some known instantiations of TRMC, namely modulo evaluation contexts (CPS), and associative operations , and further instantiantions not so commonly associated with TRMC, such as defunctionalized evaluation contexts, monoids , semirings , exponents , and cons products . We study the modulo cons instantiation in particular and prove that an instantiation using Minamide’s hole calculus is sound. We also calculate a second instantiation in terms of the Perceus heap semantics to precisely reason about the soundness of in-place update. While all previous approaches to TRMc fail in the presence of non-linear control (for example induced by call/cc, shift/reset or algebraic effect handlers), we can elegantly extend the heap semantics to a hybrid approach which dynamically adapts to non-linear control flow. We have a full implementation of hybrid TRMc in the Koka language and our benchmark shows the TRMc transformed functions are always as fast or faster than using manual alternatives.