LLVM Static Analysis for Program Characterization and Memory Reuse Profile Estimation
本文提出一种基于LLVM的概率静态分析方法,通过分析LLVM IR常数时间内预测程序特征并估计重用距离剖面,实验证明其预测准确度可媲美动态分析工具Byfl。
2023-11-20 cs.PF cs.PL cs.SE
Coarsening Optimization for Differentiable Programming
North Carolina State University(北卡罗来纳州立大学);CoCoPIE LLC(CoCoPIE有限责任公司);Facebook Inc.(脸书公司)
提出了一种新的可微规划优化方法-粗化优化。它提供了一种系统的方法来协同符号微分和算法微分(AD)。通过它,AD中每个步骤所区分的计算粒度可以变得比单个操作大得多,从而大大减少了AD中的运行时计算和数据分配。为了规避控制流在粗化中对符号微分造成的困难,这项工作引入了一种新的方法,允许符号推理和涉及分支和循环的计算的微分。通过以重用为中心的兴趣段标识设计,进一步避免符号分化中的“表情膨胀”,平衡重用和粗化。在一组实际应用程序上的实验表明,粗化优化在加速AD方面是有效的,可以产生几倍到两个数量级的加速比。
2021-10-05 cs.AI cs.LG cs.PL
Code Reuse With Transformation Objects
我们提出了一个轻量级的数据类型泛型编程的ObjectiveCaml程序设计语言,旨在更好的代码重用的方法。我们表明,通常通过递归函数与模式匹配表示的一大类变换可以使用单个每类型遍历函数和一组对象编码的变换来实现,我们称之为变换对象。对象编码允许以传统的面向对象方式修改、继承和扩展转换。然而,数据表示保持不变,这保留了以通常方式构造和模式匹配它的能力。我们的方法同样适用于常规和多态变体类型,这使得它可以结合数据类型和它们的转换从静态类型和单独编译的组件。我们还提出了一个实现,它允许我们自动派生的大部分功能,从一个稍微增强的类型描述。
2018-02-06 cs.PL
Live Multi-language Development and Runtime Environments
内容:软件开发工具应该在不同的程序设计语言之间保持一致的工作和行为,这样开发人员就不必熟悉新语言的新工具。此外,能够在程序中组合多种程序设计语言增加了可重用性,因为开发人员不必以他们开发的语言重新创建软件框架和库,而是可以重用现有软件。询问:然而,开发人员通常有广泛的工具选择,其中一些工具仅为一种特定的程序设计语言设计。各种集成开发环境支持多种语言,但由于不同的语言特定的运行时功能,通常无法提供一致的编程体验。关于语言集成,通用机制通常使用抽象层,例如操作系统或网络连接,这些抽象层通常是工具的边界,因此对编程体验产生负面影响。方法:在本文中,我们提出了一种新的工具重用方法,旨在提高与多个高层次的动态,面向对象的程序设计语言的工作经验。作为其中的一部分,我们构建了一个多语言虚拟执行环境,并将Smalltalk的实时编程工具重用于其他语言。知识:我们的方法的一个重要部分是为不同的语言改造和调整运行时功能,因为这是提供一致的工具的要求。此外,它提供了方便的手段来重用甚至混合用不同语言编写的软件库和框架,而不破坏工具支持。接地:原型系统Squimera是我们的方法的实现,并表明,它是可以重用的开发工具,从一个活的编程系统,以改善开发经验,以及从不同的语言,以提高生产力的软件工件。重要性:在多语言编程系统领域,大多数研究都集中在不同语言的集成和相应的性能优化。另一方面,我们的工作侧重于工具和…
2018-03-27 cs.PL
AutoLALA: Automatic Loop Algebraic Locality Analysis for AI and HPC Kernels
University of Rochester(罗切斯特大学)
本文提出AutoLALA工具,通过符号方法分析循环程序的数据局部性,计算重用距离和数据移动复杂度,支持任意仿射循环嵌套,适用于张量收缩、einsum等计算。
2026-04-06 cs.AI cs.PF cs.PL
Parallel Prefix Polymorphism Permits Parallelization, Presentation & Proof
程序设计语言中的多态性允许代码重用。在这里,我们表明,多态性具有广泛的适用性远远超出计算技术计算:并行分布式计算,呈现可视化的运行时数据流,并证明正确性的形式化验证。为所有这些目的重用单个代码库的能力为理解和验证并行程序提供了新的方法。
2014-11-06 cs.PL
Borrowing Dirty Qubits in Quantum Programs
本文针对量子计算中洁净量子比特稀缺问题,定义脏量子比特借用的语义与安全逆计算概念,提出高效算法并验证其在特定量子电路中对脏量子比特安全逆计算的有效性,实现量子比特复用。
2025-08-24 cs.PL quant-ph
A Swiss Pocket Knife for Computability
这项研究是关于可计算性理论的经典基础的面向操作和复杂性的方面。方法是重新检查一些经典的定理和结构,但从程序设计语言的角度来看,新的标准是自然的成功。可计算性理论的三个基石是S-m-n定理;图灵的“通用机器”;和Kleene的第二递归定理。在今天的程序设计语言的说法中,这些分别是部分评估,自我解释和反射。回想起来,Kleene在1938年的证明是有建设性的,并且在本质上建立了一个自我复制的程序,这是很吸引人的。可计算性理论起源于20世纪30年代,远在计算机和程序发明之前。它的重点是划定可计算性的界限。一些里程碑包括1936年(图灵),1938年(Kleene),1967年(程序设计语言的同构),1985年(部分求值),1989年(理论实现),1993年(有效的自解释)和2006年(术语寄存器机器)。标题中的“瑞士小刀”是一种程序设计语言,它允许所有三个可计算性基石的有效计算机实现,强调第三个:Kleene第二递归定理。我们描述了一个基于树的计算模型的实验,旨在快速程序生成和生成的程序的快速执行。
2013-09-20 cs.CC cs.PL
Scalable Memory Recycling for Large Quantum Programs
本文提出一种针对大型量子程序的可扩展内存回收编译算法,通过将高级量子代码建模为控制流图并搜索拓扑排序以最大化量子比特重用,同时利用启发式方法平衡电路宽度与深度,并通过电路结构分析识别可独立解决的子问题以缓解编译瓶颈。
2025-03-02 cs.PL quant-ph
Modular Composition of Inductive Types Using Lean Meta-programming
Qualgebra
本文提出基于元编程的归纳类型与函数实现组合算法及Lean语法扩展,实现模块化重用与扩展,并通过三子语言组合案例验证其特性与局限。
2026-09-23 cs.LO cs.PL cs.SE
Traits for Correct-by-Construction Programming
我们证明,性状是一种自然的方式来支持正确的建设(CbC)在现有的程序设计语言在传统的事后验证(PhV)的存在。通过构造正确性,程序是随着内在保证满足的规范而递增地构造的。在没有专门工具支持的情况下使用CbC是复杂的,因为它需要一组固定粒度的细化规则,这些规则是程序设计语言之上的附加规则。在这项工作中,我们提出了TraitCbC,一个增量的程序建设过程,实现正确的基础上,通过使用性状的PhV建设。TraitCbC允许通过特征组合而不是细化规则来构建程序。它提供了一个编程指南,类似于CbC应该导致结构良好的程序,并允许灵活地重用已验证的程序构建块。我们正式介绍TraitCbC和证明我们的验证策略的合理性。此外,我们实现TraitCbC作为概念验证。
2022-04-12 cs.PL
Creating modular and reusable DSL textual syntax definitions with Grammatic/ANTLR
在本文中,我们提出了语法-一个工具的文本语法定义。Grammatic充当解析器生成器(和其他工具)的前端,并为它们的开发工件带来模块化和重用。它适应了从面向Apsect编程到语法的关注点分离技术,并使用模板进行语法重用。我们通过描述一个案例研究来说明语法的使用:将关注点分离到ANTLR解析器生成器,这是在没有构建AST以将语义动作与语法定义分离的常见耗时和内存消耗技术的情况下实现的。
2009-02-16 cs.PL cs.SE
Forward slicing of functional logic programs by partial evaluation
程序切片主要是在命令式语言的背景下研究的,它已被应用到各种各样的软件工程任务,如程序理解,维护,调试,测试,代码重用等。这项工作介绍了第一个前向切片技术的声明性多范式程序,集成功能和逻辑编程的功能。基本上,给定一个程序和一个切片标准(在我们的设置中是一个函数调用),计算出的前向切片包含了原始程序中从切片标准可以到达的那些部分。我们的程序切片方法是基于(在线)部分评估的扩展。因此,它提供了一个简单的方法来开发程序切片工具,从现有的部分评估器,并有助于澄清这两种方法之间的关系。一个切片工具的多范式语言咖喱,这表明了我们的方法的有用性,已经实现了咖喱本身。
2006-01-06 cs.LO cs.PL
Engaging, Large-Scale Functional Programming Education in Physical and Virtual Space
在世界范围内,计算机科学系的入学人数急剧增加。此外,持续的COVID-19疫情要求机构从根本上取代传统的现场教学方式,将互动从物理空间转移到虚拟空间。我们报告我们的策略和经验,解决这些问题的一部分,基于Haskell的功能编程和验证课程,容纳超过2000名学生在两个学期的课程。除此之外,我们还通过每周的编程比赛和创造性的家庭作业项目、与行业合作伙伴的研讨会以及协作的成对编程教程来促进参与。为了向数百名学生提供如此广泛的课程,我们自动化了编程反馈以及归纳证明练习。我们解释并分享我们的工具和练习,以便其他教育工作者可以重复使用。
2022-07-26 cs.CY cs.PL
What is it like to program with artificial intelligence?
Microsoft Research(微软研究院);University of Cambridge(剑桥大学);University of Edinburgh(爱丁堡大学)
大语言模型,如OpenAI的codex和Deepmind的AlphaCode,可以生成代码来解决用自然语言表达的各种问题。这项技术已经在至少一个广泛使用的编程编辑器扩展中商业化:GitHub Copilot。在本文中,我们将探讨如何编程与大语言模型(法学硕士辅助编程)是类似的,并不同于,以前的概念化的程序员援助。我们借鉴了LLM辅助编程的公开经验报告,以及之前的可用性和设计研究。我们发现,虽然法学硕士辅助编程共享一些属性的编译,配对编程,并通过搜索和重用编程,有根本的差异,无论是在技术上的可能性,以及实践经验。因此,法学硕士辅助编程应该被视为一种新的编程方式,具有其独特的属性和挑战。最后,我们从用户研究中观察到,非专家最终用户程序员使用LLM辅助工具来解决电子表格中的数据任务。我们讨论了可能出现的问题,并开放的研究挑战,在应用大语言模型的最终用户编程,特别是与用户谁很少或根本没有编程专业知识。
2022-10-17 cs.AI cs.HC cs.PL
LitterBox: A Linter for Scratch Programs
使用基于块的程序设计语言(如Scratch)创建程序既简单又有趣。然而,基于块的程序可能包含错误,特别是当学习者对编程有误解时。即使没有,Scratch代码通常质量很低,并且包含代码气味,进一步抑制了理解,重用和乐趣。为了解决这个问题,在本文中,我们介绍了LitterBox,一个用于Scratch程序的Linter。给定一个程序或其公共项目ID,LitterBox会根据已知错误和代码气味的模式检查程序。对于每一个发现的问题,LitterBox不仅提供了代码中的位置,还提供了潜在原因和可能的误解的有用解释。学习者可以通过一个易于使用的Web界面访问LitterBox,其中包含有关块代码中错误的可视信息,而对于研究人员来说,LitterBox为Scratch程序的静态分析提供了一个通用的,开源的和可扩展的框架。
2021-02-15 cs.PL cs.SE
HasChor: Functional Choreographic Programming for All (Functional Pearl)
本研究提出一种基于单子的函数式编排编程新模型,支持高阶与位置多态编排特性,并在Haskell库HasChor中实现,让普通Haskell开发者可便捷使用编排编程,且库实现简洁精炼。
2023-07-19 cs.PL