Classical (Co)Recursion: Mechanics
在编程理论和实践中,原语递归是一个成熟的、易于理解的主题。然而,它的对偶,原始的共递归,被低估,仍然被视为外来的。我们的目标是把它们都放在平等的基础上,给原始corecursion计算的基础上,给一个终止演算类似于原来的计算基础的递归。我们展示了如何在一个抽象的机器的实现细节加强他们的联系,语法推导corecursion递归通过逻辑对偶。我们还观察到的原始(共)递归组合子的计算复杂性的评价策略的影响:调用的名称允许更有效的递归,但调用的值允许更有效的corecursion。
2021-03-15 cs.LO cs.PL
Copy-and-Patch Compilation: A fast compilation algorithm for high-level languages and bytecode
当编译发生在运行时时,快速编译是很重要的,例如现代数据库系统中的查询编译器和现代浏览器中的WebAssembly虚拟机。我们提出了复制和补丁,一个非常快速的编译技术,也产生高质量的代码。它能够将高级语言和低级字节码程序降低到二进制代码,通过将来自二进制实现变体的大型库的代码拼接在一起。我们称这些二进制实现为stendable,因为它们有漏洞,在代码生成过程中必须插入缺失值。我们展示了如何构建一个模板库,并描述了复制和补丁算法,生成优化的二进制代码。我们演示了两个使用情况下的复制和补丁:一个编译器的高级C语言的元编程和WebAssembly的编译器。我们的高级语言编译器的编译成本可以忽略不计:它从AST生成代码所用的时间比构造AST所用的时间要少。我们已经实现了一个SQL数据库查询编译器上的元编程系统,并表明,在TPC-H数据库基准测试,复制和补丁生成的代码比LLVM -O 0快两个数量级,比更高的优化水平快三个数量级。生成的代码比解释快一个数量级,比LLVM -O 0快14%。我们的WebAssembly编译器生成代码的速度比Liftoff快4.9 - 6.5倍,Liftoff是Google Chrome中的WebAssembly基线编译器。生成的代码在Coremark和PolyBenchC WebAssembly基准测试中的性能也超过了Liftoff的39%-63%。
2021-09-15 cs.PL
Type Stability in Julia: Avoiding Performance Pathologies in JIT Compilation (Extended Version)
作为一种科学的程序设计语言,Julia在追求性能的同时也提供了高水平的生产力特性。为了避免性能问题,Julia用户应该遵守一个编码规则,以实现所谓的类型稳定性。非正式地说,如果输出的类型仅取决于输入的类型,而不是它们的值,则函数是类型稳定的。本文给出了类型稳定性的形式化定义以及类型可扩展性的一个更强的性质,说明了可扩展性使编译器能够进行优化,并证明了编译器的正确性。我们还进行了语料库分析,以揭示这些类型相关的属性在实践中的表现。
2021-11-17 cs.PL
Towards a Fully Abstract Compiler Using Micro-Policies: Secure Compilation for Mutually Distrustful Components
安全编译可以防止对编译代码的所有低级攻击,并允许对源语言的安全性进行合理的推理。在这项工作中,我们提出了一个新的攻击者模型的安全编译,扩展了众所周知的概念,充分的抽象,以确保保护相互不信任的组件。我们设计了一个编译器链(编译器,链接器和加载器)和一个新的安全监视器,共同抵御这种强大的攻击模型。该监视器是使用最近提出的,通用的基于标签的保护框架,称为微策略,它配备了硬件支持高效缓存和形式化验证方法。我们的监视器保护抽象的一个简单的面向对象的语言-类隔离,方法调用的纪律,和类型安全-对任意低级别的攻击者。
2015-10-02 cs.CR cs.PL
Transforming while/do/for/foreach-Loops into Recursive Methods
在软件工程中,在递归和迭代之间进行良好的选择是至关重要的,因为它们的效率和维护是不同的。事实上,开发人员经常需要将迭代转换为递归(例如,在调试中,将调用图分解为迭代);因此,非常令人惊讶的是,不存在从循环到递归的公共转换来处理所有类型的循环。本文描述了一种能够将迭代循环转换为等价递归方法的转换。这种转换是针对程序设计语言Java描述的,但它足够通用,可以适用于许多其他允许迭代和递归的语言。我们描述了将while/do/for/foreach类型的循环转换为递归所需的更改。每一种循环都需要一种特殊的处理方法,并对此进行了描述和举例说明。
2014-10-21 cs.PL
Tail recursion transformation for invertible functions
针对可逆编程中CPS转换的局限性,提出一种专门针对可逆函数的尾递归转换算法,通过定制数据类型将可逆递归函数转换为一对尾递归函数,从而实现尾递归逆函数的直接提取。
2023-02-28 cs.PL
Contextual Equivalence for a Probabilistic Language with Continuous Random Variables and Recursion
我们提出了一个完整的推理原则,上下文等价的非类型化概率语言。该语言包括连续(实值)随机变量,条件和评分。它还包括递归,因为标准的按值调用定点组合子是可表达的。我们证明了几个等价模式,包括熟悉的事实,从λ演算以及特定的概率编程的结果,我们的表征的可用性。特别是,我们用它来证明,重新排序的随机抽取概率程序保持上下文等价。例如,这使我们能够证明,(let x = $e_1$ in let y = $e_2$ in $e_0$)等价于(let y = $e_2$ in let x = $e_1$ in $e_0$)(假设$x$在$e_2$中不游离,$y$在$e_1$中不游离),尽管$e_1$和$e_2$可能具有采样和评分效应。
2018-07-08 cs.PL
Nanopass Back-Translation of Call-Return Trees for Mechanized Secure Compilation Proofs
针对安全编译链证明中回译步骤复杂的挑战,提出一种基于调用-返回树、分多步进行的 nanopass 回译技术,利用幽灵状态和前向模拟简化证明,并在 Rocq 证明器中实现了机械化验证。
2025-07-16 cs.CR cs.PL
Denotational Correctness of Forward-Mode Automatic Differentiation for Iteration and Recursion
本文为含部分操作、惰性条件、迭代及项和类型递归的语言,基于微分空间与部分性单子,通过子余构造的语义逻辑关系,给出了前向模式自动微分宏的指称正确性证明,并引入带ωcpo结构的空间扩展至递归情形。
2024-05-27 cs.PL
Robust Hyperproperty Preservation for Secure Compilation (Extended Abstract)
我们映射的空间的可靠性标准的安全编译的基础上,在任意对抗性的情况下,我们称之为强大的超属性保存的超属性保存。为此,我们研究了几类超属性的保留,并为每个类提出了安全编译的等效“无属性”特征,通常更适合于证明。即使是我们最强的健全性标准,所有超属性的鲁棒保存,似乎可以实现简单的转换和证明使用上下文回翻译技术以前开发的显示完全抽象的编译。虽然证明不安全的超属性的鲁棒保存需要这种强大的上下文反向翻译技术,但为了鲁棒地保存安全超属性,将每个有限迹前缀翻译回源上下文似乎就足够了。
2017-12-20 cs.CR cs.PL
Recursion and Sequentiality in Categories of Sheaves
我们提出了一个完全抽象的模型调用值的语言与高阶函数,递归和自然数,作为一个指数理想的拓扑。我们的模型受到O'Hearn、Riecke和Sandholm以及Marz和Streicher的完全抽象模型的启发。与基于cpo的语义相反,我们将递归视为通过组合模块化组件的选择而构建的模型中的一个特性。
2021-05-05 cs.LO cs.PL math.CT
Partial Cross-Compilation and Mixed Execution for Accelerating Dynamic Binary Translation
Sun Yat-sen University(中山大学)
该研究提出一种结合编译与模拟的混合执行系统,通过选择性函数卸载减少动态二进制翻译的开销,实现高达13倍的加速效果。
2025-11-29 cs.AR cs.PL
Classical (Co)Recursion: Programming
我们在这里的目的是说明如何在比以前认为的更广泛的编程领域中发现结构协递归的好处。从一个教程结构共递归的总,纯函数语言Agda开始,我们展示了这些相同的想法是如何映射到熟悉的概念,在各种不同的语言。我们展示了如何在Scheme等严格的函数式语言中实现协递归,甚至完全摆脱函数式范式,在Python和Java等语言中常见的面向对象特性的自然表达中表现出来。将结构协递归开放给更广泛的语言和范式选择--因此,也开放给更大的程序员受众--让我们也可以问协递归如何与计算效果相互作用。值得注意的是,我们证明了结构协同递归与效果相结合可以增加其表达能力。我们展示了一个经典版本的corecursion -使用Scheme的经典调用/cc实现的一流控制-使我们能够编写一些新的流处理算法,这些算法在无效果语言中是不可能的。
2021-03-11 cs.PL
Super-Linear Speedup by Generalizing Runtime Repeated Recursion Unfolding in Prolog
本文将运行时重复递归展开从CHR中的单一线性直接递归规则推广到Prolog中的多重递归与多重递归规则,并用十个子句实现展开器、元解释器和轮转规则处理器,通过基准测试验证超线性加速的可行性。
2025-03-13 cs.DS cs.PF cs.PL
Concrete categories and higher-order recursion (With applications including probability, differentiability, and full abstraction)
我们研究具体层模型的调用值高阶语言递归。我们的家庭层模型是一个推广的许多例子,从文献中,如模型的概率和可微规划,完全抽象的逻辑关系模型。我们以综合域理论的精神来对待递归。我们提供了一个一般的建设提升单子从一类允许的单态在现场的层范畴。这样,我们得到了一个家庭的模型参数化的具体网站和一类单态,我们证明了一个一般的计算充分性定理。
2022-05-31 cs.LO cs.PL math.CT
Pointers in Recursion: Exploring the Tropics
我们将通常的部分/原始递归函数类转换为指针递归框架,通过指针读取单位成本函数访问实际输入值。这些指针递归函数类被证明等价于通常的部分/原始递归函数。从复杂性方面来说,这个框架以一种简化的方式捕获了大多数相关的子多项式类。使用Bellantoni和Cook的安全/正常分层规则的指针递归对应于多对数时间计算。我们引入了一种新的非大小递增分层规则,称为热带分层。Tropical分层和指针递归与一些最常见的递归方案一起使用,捕获类logspace、logspace/polylogtime、ptime和NC。最后,以一种让人想起安全递归函数的方式,热带分层直接在函数代数的语法中表达,产生热带递归函数代数。
2019-08-14 cs.CC cs.LO cs.PL
A Compilation Target for Probabilistic Programming Languages
University of Oxford(牛津大学)
通过创造性地使用标准化的操作系统功能,包括进程、分叉、互斥和共享存储器,可以用任何程序设计语言来实现诸如用于概率编程的顺序蒙特卡罗和粒子马尔可夫链蒙特卡罗的前向推理技术。利用这一点,我们已经定义,开发和测试的概率程序设计语言中间表示语言,我们称之为概率C,它本身可以被编译成机器码的标准编译器和链接到操作系统库产生一个有效的,可扩展的,便携式的概率编程编译目标。这为优化概率编程系统开辟了一条新的硬件和系统研究路径。
2014-07-10 cs.AI cs.PL stat.ML
Fixing Rust Compilation Errors using LLMs
本文提出 RustAssistant 工具,利用大语言模型的提示技术与迭代机制自动修复 Rust 编译错误,在真实开源仓库中达到约 74% 的峰值准确率,并计划公开数据集以推动后续研究。
2023-08-09 cs.PL cs.SE
Programming and Reasoning with Guarded Recursion for Coinductive Types
我们提出了守护的Alguda演算,简单类型的Alguda演算与守护递归和共归纳类型的扩展。保护递归类型的使用确保了良好类型程序的生产力。受模态逻辑和Atkey-McBride时钟量化启发的类型生成器可以将受保护的递归类型转换为共归纳类型,从而允许非因果函数的类型化。我们给出了演算的按名调用操作语义,并在树的拓扑中定义了适当的指称语义。充分性证明意味着程序的评估总是终止的。我们展示了表现力的演算显示的可定义性的解决方案Rutten的行为微分方程。我们介绍了一个程序逻辑与Löb归纳推理的上下文等价的程序。
2015-01-15 cs.LO cs.PL
Non-Cartesian Guarded Recursion with Daggers
University of Edinburgh(爱丁堡大学)
本文将对合范畴中的保护递归框架扩展到非笛卡尔环境,通过构造合适的范畴并研究其与对合范畴结构的交互,为高阶可逆编程语言添加保护递归特性。
2026-11-04 cs.LO cs.PL math.CT
Verified Compilation of Quantum Oracles
量子算法通常在经典数据的量子叠加上应用经典操作,如算术或谓词检查;这些所谓的预言通常是量子程序的最大组件。为了简化高效、正确的Oracle函数的构造,本文提出了VQO,一个使用Coq证明助手实现的高保证框架。VQO的核心是Oracle量子汇编语言OQASM。OQASM操作通过量子傅立叶变换在两个不同的基之间移动量子位,因此允许重要的优化,但不会引起纠缠和随之而来的指数爆破。OQASM的设计使我们能够证明正确的VQO编译器-从一个简单的命令式语言OQIMP到OQASM,从OQASM到SQIR,一种通用的量子汇编语言--并允许我们使用QuickChick基于属性的测试框架有效地测试OQASM程序的属性。我们已经使用VQO实现了各种算术和几何运算符,这些运算符是重要预言机的构建块,包括Shor和Grover算法中使用的运算符。我们发现,VQO的基于QFT的算术神谕需要更少的量子位,有时甚至比使用“经典”门构建的更少; VQO的后者版本仍然与Quipper(一个最先进但未经验证的量子编程平台)生产的神谕相当或更好(在量子位和门数方面)。
2022-04-20 cs.PL quant-ph
Runtime Repeated Recursion Unfolding in CHR: A Just-In-Time Online Program Optimization Strategy That Can Achieve Super-Linear Speedup
Ulm University(乌尔姆大学)
提出一种基于重复递归展开的即时在线程序优化策略,通过运行时生成特化规则将递归调用次数降至对数级别,在CHR中实现并证明了其正确性及超线性加速条件。
2025-10-30 cs.CC cs.PF cs.PL
The Guarded Lambda-Calculus: Programming and Reasoning with Guarded Recursion for Coinductive Types
我们提出了守护的Alguda演算,简单类型的Alguda演算与守护递归和共归纳类型的扩展。保护递归类型的使用确保了良好类型程序的生产力。受模态逻辑和Atkey-McBride时钟量化启发的类型生成器可以将受保护的递归类型转换为共归纳类型,从而允许非因果函数的类型化。我们给出了演算的按名调用操作语义,并在树的拓扑中定义了适当的指称语义。充分性证明意味着程序的评估总是终止的。我们介绍了一个程序逻辑与Löb归纳推理的上下文等价的程序。我们展示了表现力的演算显示的可定义性的解决方案Rutten的行为微分方程。
2016-09-05 cs.LO cs.PL
The Semantics of Effects: Centrality, Quantum Control and Reversible Recursion
本文研究程序语义学,通过单子中心刻画效应交换性,为可逆量子语言建立完备指称语义,并利用范畴论为可逆递归提供语义基础,同时探讨高阶量子控制的局限与前景。
2024-06-05 cs.LO cs.PL math.CT