Hercules: A Compiler for Productive Programming of Heterogeneous Systems
该研究提出 Juno 语言与 Hercules 编译器,通过命令式调度和新型中间表示解耦算法与异构系统逻辑,在 CPU/GPU 上达到接近手工优化代码并大幅超越既有系统的性能。
2025-03-13 cs.PL
Modular and Didactic Compiler Design with XML Inter-Phases Communication
在汇编语言设计课程中,学生学习如何将以高级程序设计语言编写并为人类理解而设计的程序系统地转换为机器理解的低级汇编语言,通过不同的表示。本文介绍了设计,教育的特点和可能性的模块化和教学编译器的Pascal类编程的迷你语言,是超集尼克劳斯沃思的PL/0。其主要特点是,它以这样一种方式实现了编译阶段,即传递给下一个阶段的信息可以反映为XML文档,可以单独研究。它也表明,其设计是适合被列入编译器设计课程的学习工具。可以用像Python这样的高级语言实现编译器。
2022-04-13 cs.PL
Future Directions for Optimizing Compilers
随着软件变得越来越大,程序设计语言变得越来越高级,处理器的时钟持续下降,我们将越来越多地要求编译器减少代码膨胀,消除抽象损失,并利用有趣的指令集。同时,编译器的执行时间不能增加太多,编译器也不应该产生错误的输出。本文探讨了如何使优化编译器更快、更少错误、更有能力生成高质量输出的问题。
2018-09-06 cs.PL
On the Maintenance of Classic Modula-2 Compilers
经典的Modula-2语言是由N.Wirth在1978年在ETH Zürich的[Wir 78]中指定的。最后一次修订[Wir 88]发表于1988年。那个时代的许多计算机科学书籍在编程示例中使用Modula-2。其中许多在今天的计算机科学教育中仍然是宝贵的资源。为了编译和运行其中的示例,必须有遵循经典Modula-2语言定义并在现代计算机硬件和操作系统上运行的编译器。虽然那个时代的大多数Modula-2编译器已经消失,但有一些已经在开源许可证下重新发布。虽然原作者长期停止了这些编译器的工作,但新的维护人员已经介入。本文给出了经典Modula-2编译器的维护建议,同时平衡现代化的目标,需要保持以最小的努力在文献中编译编程示例的能力。尽管如此,所提出的原则、方法和结论也适用于其他语言的维护。
2018-09-19 cs.PL
Effective Extensible Programming: Unleashing Julia on GPUs
GPU和其他加速器是用于加速计算密集型可并行化应用的流行设备。然而,对这些设备进行编程是一项艰巨的任务。编写高效的设备代码是具有挑战性的,并且通常是用低级程序设计语言来完成的。高级语言很少得到支持,或者不与高级语言生态系统的其余部分集成。为了克服这一点,我们提出了编译器的基础设施,有效地增加了对新的硬件或环境的支持,现有的程序设计语言。我们通过在Julia程序设计语言中添加对NVIDIA GPU的支持来评估我们的方法。通过与现有编译器的集成,我们大大降低了实现和维护新编译器的成本,并促进了现有应用程序代码的重用。此外,使用高级Julia程序设计语言可以实现GPU编程的新的动态方法。这大大提高了程序员的工作效率,同时保持与官方NVIDIA CUDA工具包相似的应用程序性能。
2017-12-08 cs.DC cs.PL
Improving compiler support for SIMD offload using Arm Streaming SVE
本文研究如何改进编译器对 Arm SME 架构 SSVE 模式的支持,通过重新审视 LLVM 与 MLIR 的成本模型和启发式方法,实现面向核相邻 SIMD 加速器的自动且有利可图的代码生成。
2025-06-02 cs.PL
Towards Hybrid Intensional Programming with JLucid, Objective Lucid, and General Imperative Compiler Framework in the GIPSY
纯Lucid程序是并发的,粒度非常细。顺序线程(ST)是为了扩大粒度而引入的函数;它们通过通用内涵编程系统(GIPSY)中的通信过程(CP)从服务器传递到工作器。JLucid程序将用于ST的Java代码与用于并行控制的Lucid代码相结合。因此,首先,在这篇论文中,我们描述了新的JLucid编译器生成ST和CP的方式。JLucid还引入了数组支持。进一步的探索经历了Lucid语言家族所经历的额外的转换,以支持在通用内涵程序设计语言(GIPL)和索引Lucid中使用Java对象及其成员:首先,以JLucid的形式允许使用伪对象,然后通过专门设计的Objective Lucid语言。通过讨论和实例,给出了ObjectiveLucid的语法和语义定义以及Java对象在内涵程序中的含义。最后,有许多有用的科学和实用程序是用Java以外的命令式程序设计语言编写的,例如C、C++、Fortran、Perl等。因此,提供一个框架来促进将这些语言包含到GIPSY中并由Lucid程序使用是明智的。为解决这一问题,提出了一个总的强制性框架及其具体实施。
2009-12-21 cs.PL cs.SE
A Constraint and Object Oriented Fifth Generation Programming Language and its Compiler and Runtime System
自LISP语言问世以来,第五代程序设计语言已经发展了几十年。然而,与第四代程序设计语言相比,第五代程序设计语言由于语义晦涩、问题表示严谨、推理能力有限等原因,一直没有得到广泛应用。为此,本文提出的第五代程序设计语言COOL(Constraint and Object Ordered Language)克服了以往第五代程序设计语言语义直观、处理问题条件限制严格等问题,提高了其推理能力。具体改进如下:第一,COOL支持面向过程和面向对象,便于在生产项目中应用;第二,COOL支持表达式作为函数声明和函数返回,提高了对数学公式的语言亲和力,支持将函数参数嵌入函数名字符串,使函数命名更接近自然语言。使数学问题更容易描述;第三,COOL引入了加权机制,通过累积加权加速推理过程。第四,COOL在编程中引入了正向和反向函数的概念,这样计算机就可以推断和执行具有逻辑顺序约束的问题。第五,计算机可以通过回溯算法和动态规划算法,利用正解过程推导出逆解过程,从而使计算机能够推导出具有时序约束的问题。第六,引入预执行步骤,将程序的推理和函数查询过程与执行过程分离,提高程序的执行速度。
2022-06-02 cs.PL
LXG Compiler - Design and Implementation
LXG是一种简单的类Pascal语言。它是为研究编译器的设计和实现而开发的函数式程序设计语言。该语言支持过程和变量声明,但不支持类。本文介绍了一个LXG编译器的设计与实现。还提供了测试结果。
2010-01-07 cs.PL cs.SE
RISE & Shine: Language-Oriented Compiler Design
软件和硬件专业化的趋势--由摩尔定律的终结和对特定领域计算(如机器学习)的兴趣仍在加速推动--迫使我们从根本上重新思考我们的编译器设计。通用编译器框架围绕一个单一的通用中间表示(IR)构建的时代已经结束。这种认识引发了MLIR编译器框架的创建,该框架使编译器工程师能够设计和集成捕获特定抽象的IR。MLIR为基于SSA的IR提供了一个通用框架,但它并不能帮助我们决定如何设计易于开发、使用和组合成工作编译器的IR。为了解决IR设计的挑战,我们提倡面向语言的编译器设计,理解IR作为正式的程序设计语言,并通过伴随的类型系统强制其正确使用。我们认为,程序设计语言技术直接指导可扩展的IR设计,并提供了一个正式的框架,原因多个IR之间的转换。在本文中,我们讨论了设计的Shine编译器,编译的高级功能模式为基础的数据并行语言RISE通过混合函数命令式中间语言C,OpenCL和OpenMP。我们将我们的工作直接与密切相关的基于模式的Lift IR和编译器进行比较。我们表明,我们的面向语言的编译器设计结果在一个更强大的和可预测的编译器,可扩展的各种抽象级别。我们的实验评估表明,这种编译器设计是能够生成高性能的GPU代码。
2022-01-10 cs.PL
Adding Real-time Capabilities to a SML Compiler
最近人们对采用函数式和反应式编程用于实时的【形】系统设计产生了很大的兴趣。为了开发实时的【形】系统,正朝着一种更具声明性的方法发展,其目的是提高软件的保真度。为了研究实时的【形】系统的函数式和反应式编程的好处,需要实时的【形】感知的函数式编译器和语言运行时。在本文中,我们研究了对现代标准ML编译器MLton的必要更改,以提供对实时的【形】执行的基本支持。我们详细介绍了我们目前的进展,在修改MLton与线程模型,支持优先级,分块对象模型,以支持实时的【形】垃圾回收,和低级别的修改,以执行实时的【形】操作系统的顶部。我们提出了初步的数字和我们正在进行的工作原型,它能够在x86机器上启动用MLton编译的ML程序。
2016-01-13 cs.PL
A Higher-Order Abstract Syntax Approach to the Verified Compilation of Functional Programs
我们认为,功能性程序设计语言的编译器的实现和验证大大简化了采用高阶表示的语法称为高阶抽象语法或HOAS。HOAS的基本思想是使用一种元语言,它为绑定相关概念提供内置的逻辑处理。通过将元语言嵌入到更大的编程或推理框架中,可以将对象语言中的绑定结构的处理吸收到系统的元理论中,从而大大简化整体实现和推理过程。我们在这篇论文中提出并证明了上述论点的有效性的方法来验证执行的编译器转换的函数程序,利用HOAS。在这种方法中,函数程序的转换首先以基于规则的关系规范的形式表达。这些规范被渲染成语言lambda Prolog的程序。一方面,这些程序直接作为实现。另一方面,它们可以用作Abella系统的输入,该系统允许我们证明关于它们的属性,从而证明关于实现的属性。lambda Prolog和Abella都支持使用HOAS方法。因此,它们构成了一个框架,可用于在验证编译中测试HOAS方法的好处。我们用它们来实现和验证一个编译器的代表性的功能程序设计语言,体现了许多编译器的核心,这些语言的转换。在这两个编程和推理阶段,我们展示了如何使用的HOAS方法显着简化了绑定结构的表示,操作,分析和推理。
2017-02-11 cs.LO cs.PL
Grammar-Aware Literate Generative Mathematical Programming with Compiler-in-the-Loop
Business School, University of Edinburgh(爱丁堡大学商学院);Insight Centre for Data Analytics, University College Cork(科克大学数据分析研究所)
提出 SyntAGM 系统,通过迭代生成-编译-评估-修正循环,利用编译器反馈和 LLM 对齐判断,生成可读的代数建模语言优化模型,实现成本与质量的更优权衡。
2026-05-28 cs.AI cs.PL
Compiler Optimization: A Case for the Transformation Tool Contest
一种优化编译器包括:前端,将文本程序设计语言解析成中间表示(IR);中间端,对IR执行优化;以及后端,将IR降低到由目标硬件支持的操作构建的目标表示(TR)。在现代编译器构造中,采用了基于图的IR。优化和降低任务可以通过图转换规则来实现。这个案例提供了两个编译器任务来评估参与工具的性能。
2011-11-21 cs.PL
Djinnlang: Higher-Level Programming by Unambiguous Specification with an LLM in the Compiler
Harvard University(哈佛大学)
本文提出Djinnlang,一种基于无歧义规范的高级语言,利用LLM在编译器中生成代码并由验证器检查,实现规范即编程,并展示自托管能力。
2026-09-22 cs.AI cs.PL cs.SE
LazyTensor: combining eager execution with domain-specific compilers
Google Research, Brain(谷歌研究院 Brain部门);Facebook(脸书);Google, Cloud AI(谷歌云人工智能部门)
领域特定的优化编译器已经证明了显着的性能和可移植性的好处,但需要在其专门的IR表示的程序。这些编译器的现有前端受到“语言子集问题”的困扰,其中一些宿主语言功能在与特定领域编译器交互的用户程序的子集中不受支持。相比之下,按运行定义的ML框架-俗称“渴望”模式-由于其易用性和表达性而流行,其中可以使用主机程序设计语言的全部功能。LazyTensor是一种针对特定领域编译器的技术,而不会牺牲按运行定义的人体工程学。该技术最初是为了在云TPU上支持PyTorch而开发的,它与一个基本上共享的实现一起被Swift用于跨CPU、GPU和TPU的TensorFlow,证明了该方法在(1)Tensor实现、(2)硬件加速器和(3)程序设计语言中的通用性。
2021-02-26 cs.LG cs.PL
PolyBlocks: A Compiler Infrastructure for AI Chips and Programming Frameworks
Polymage Labs(Polymage实验室);Indian Institute of Science(印度科学研究院)
PolyBlocks是一种基于MLIR的编译器基础设施,通过自动代码生成和优化,实现AI编程框架到AI芯片的高效转换。
2026-03-10 cs.LG cs.PL
Investigating Compilation Errors of Students Learning Haskell
虽然函数式编程是表达复杂软件的有效方法,但函数式程序设计语言具有陡峭的学习曲线。Haskell对于那些只接触过命令式编程的学生来说是一个挑战。重要的是要寻找可以降低学习函数式编程难度的方法和工具。找到帮助学生的方法需要了解学生在学习Haskell时所犯的错误。有几个以前的研究揭示了有关Haskell编译器错误的数据,但他们没有集中在编译器错误的分析或他们只研究了某种编译器错误。本研究调查了Haskell初学者的编译错误,并对如何提高他们的学习效率提出了建议。与以往的研究不同,我们专注于通过分析学生提交的样本来揭示学生解决方案的根本问题。
2019-06-27 cs.PL
Compiler-Guided Inference-Time Adaptation: Improving GPT-5 Programming Performance in Idris
Ming Hsieh Department of Electrical and Computer Engineering(明希斯部门电子与计算机工程系);Viterbi School of Engineering, University of Southern California(维特比工程学院,南加州大学)
本文研究GPT-5通过编译器反馈提升在低资源语言Idris中的编程性能,发现结合本地编译错误的改进策略显著提高了模型表现。
2026-02-12 cs.AI cs.PL
Visualizing The Intermediate Representation of Just-in-Time Compilers
即时(JIT)编译器被许多现代编程系统用来提高性能。JIT编译器中的错误提供了可利用的安全漏洞,并且由于它们庞大,复杂和动态,因此调试它们是困难的。目前的调试和可视化工具处理静态代码,并不适合在这个领域。我们描述了一种新的方法来简化大型和复杂的中间表示,生成的JIT编译器和可视化它与地铁地图的比喻,以帮助开发人员在调试。在Google的V8 JavaScript解释器和TurboFan JIT编译器上使用我们的原型实现的实验表明,它可以帮助识别和定位错误代码。
2021-06-09 cs.PL
Exploring Aspects of Polyglot High-Performance Virtual Machine GraalVM
当代软件往往变得非常复杂,我们需要使用各种技术和不同的程序设计语言来进行开发。由于程序设计语言之间的互操作性可能会导致高开销,从而导致性能损失,因此研究当前使用高级面向对象语言编写的编译器的多语言虚拟机如何处理它非常重要。OpenJDK的Project Metropolis提出了GraalVM,这是一个开源的高性能多语言虚拟机,主要用Java编写。本文介绍了GraalVM的体系结构及其功能,并进一步研究了它如何解决常见的互操作性和性能问题。GraalVM在结合各种程序设计语言时使软件生态系统富有成效,例如Java,JavaScript,C/C++,Python,Ruby,R等。GraalVM的重要部分是用Java编写的Graal编译器,与传统的C/C++语言编译器相比,它允许开发人员更快,更简单,更高效地维护和优化代码。Graal可以用作即时(JIT)或静态提前(AOT)编译器。Graal是一个积极优化的编译器,实现了常见的编译器优化,重点是出色的内联和转义分析算法。本文将Graal与一些最专业的竞争对手进行了比较,并提出了我们在学术环境中测试的结果。
2021-12-15 cs.PL
Control Flow Duplication for Columnar Arrays in a Dynamic Compiler
列式数据库是一种加快联机分析处理(OLAP)查询的成熟方法。如今,数据处理(例如,存储、可视化和分析)通常在程序设计语言级执行,因此还希望采用用于公共语言运行时的列式数据结构。虽然有框架、库和API可以支持程序设计语言中的列式数据存储,但将它们集成到应用程序中通常需要开发人员的干预。在之前的工作中,研究人员在GraalVM JavaScript运行时中实现了一种将数组自动转换为列数组的方法。然而,这种方法在较小的工作负载以及更复杂的嵌套数据结构上存在性能问题。我们发现,优化对列数组的访问的关键是识别查询并对其应用特定的优化。在本文中,我们描述了新的编译器优化的GraalVM优化列数组上的查询。在JIT编译时,我们识别访问潜在列数组的循环,并复制它们,以便专门优化对列数组的访问。此外,我们描述了一种新的方法,通过执行 ** 多级存储转换 **,从由复杂对象组成的数组中创建列数组。我们通过JavaScript `Date`对象的实现来演示我们的方法。[完整摘要见https://doi.org/10.22152/programming-journal.org/2023/7/9]
2023-02-20 cs.PL
Visualizing JIT Compiler Graphs
即时(JIT)编译器被许多现代编程系统用来提高性能。JIT编译器中的错误提供了可利用的安全漏洞,并且由于它们庞大,复杂和动态,因此调试它们是困难的。目前的调试和可视化工具处理静态代码,并不适合在这个领域。我们描述了一种新的方法来简化大型和复杂的中间表示,生成的JIT编译器和可视化它与地铁地图的比喻,以帮助开发人员在调试。
2021-08-25 cs.PL
Using Large-Scale Anomaly Detection on Code to Improve Kotlin Compiler
JetBrains Research(JetBrains研究院);Saint Petersburg State University(圣彼得堡国立大学);JetBrains;Higher School of Economics(高等经济学院)
在这项工作中,我们应用异常检测源代码和字节码,以促进程序设计语言及其编译器的发展。我们将异常定义为与用特定程序设计语言编写的典型代码不同的代码片段。识别这些代码片段对语言开发人员和最终用户都有好处,因为异常可能表明编译器或运行时性能存在潜在问题。此外,异常可能对应于语言设计中的问题。在这项研究中,我们选择Kotlin作为目标程序设计语言。我们概述并讨论了获得源代码和字节码的向量表示以及在向量化代码片段中检测异常的方法。本文提出了一种方法,旨在检测两种类型的异常:语法树异常和所谓的编译器引起的异常,只出现在编译的字节码。我们描述了几个实验,采用不同的向量化和异常检测技术的组合,并讨论检测到的异常类型及其对语言开发人员的有用性。我们证明,提取的异常和基本的提取技术提供了额外的价值语言的发展。
2020-04-03 cs.LG cs.PL cs.SE
Experiences Building an MLIR-based SYCL Compiler
本文介绍基于MLIR框架构建SYCL编译器的实践经验,通过方言机制建模主机与设备代码,实现强大优化与分析,相比LLVM实现最高提速4.3倍,并探讨了未来挑战。
2023-12-20 cs.DC cs.PF cs.PL
AIOS Compiler: LLM as Interpreter for Natural Language Programming and Flow Programming of AI Agents
Rutgers University(罗格斯大学)
本文提出CoRE系统,利用LLM作为解释器,统一自然语言、伪代码和流程编程,构建语言智能体,并引入外部记忆和工具调用以增强执行能力。
2024-05-21 cs.AI cs.CL cs.LG
Verified VCG and Verified Compiler for Dafny
ETH Zurich Switzerland;Chalmers University of Technology\ of Gothenburg Sweden;Institute for Infocomm Research (I 2 R), A STAR Singapore;Nanyang Technological University Singapore;ETH Zurich;Chalmers University of Technology\ of Gothenburg;Institute for Infocomm Research (I 2 R), A STAR;Nanyang Technological University
本文提出通过形式化方法验证Dafny语言的VCG和编译器,确保程序的正确性并生成可执行代码。
2025-12-04 cs.LO cs.PL
Application of Case-Based Teaching and Learning in Compiler Design Course
编译器设计是一门讨论构造程序设计语言编译器的思想的课程。学生将学习如何将以高级程序设计语言编写并为人类理解而设计的程序系统地转换为机器理解的低级汇编语言。我们提出并实施了一个基于案例和基于项目的学习环境,用于教授德里大学(印度)学院的B.Tech三年级学生的重要建筑设计概念(CPLC)。案例是描述真实情况的文本,提供信息,但不是解决方案。以往的研究表明,基于案例的教学有助于学生应用课堂上讨论的原则来解决复杂的实际问题。我们将一个主项目分成子项目给学生,以提高他们设计编译器的实践经验。为了衡量基于案例的讨论的有效性,学生完成了一项关于他们对基于案例的学习的好处的看法的调查。调查结果采用频数分布和关联性卡方检验进行分析。调查结果表明,基于案例的编译器概念教学确实提高了学生的学习技能,批判性思维,参与,沟通技巧和团队合作。
2016-11-01 cs.CY cs.PL
Survey on Combinatorial Register Allocation and Instruction Scheduling
寄存器分配(将变量映射到处理器寄存器或存储器)和指令调度(重新排序指令以增加指令级并行)是在编译器中生成高效汇编代码的基本任务。在过去的三十年里,组合优化已经成为这两个任务的传统启发式算法的替代方案。组合优化方法可以根据模型提供最优解决方案,可以精确地捕获冲突决策之间的权衡,并且以增加编译时间为代价更灵活。本文提供了一个详尽的文献综述和分类的组合优化方法,寄存器分配和指令调度,重点是在这种情况下,最适用的技术:整数规划,约束规划,分区布尔二次规划,枚举。编译器和组合优化的研究人员可以从识别该领域的发展,趋势和挑战中受益;编译器从业者可以识别机会并掌握应用组合优化的潜在好处。
2019-06-07 cs.PL
Applying Type Oriented Programming to the PGAS Memory Model
分区全局地址空间内存模型已经被许多语言和应用程序所普及。然而,这种抽象通常会导致程序员不得不依赖于一些内置的选择,并且由于这种隐式并行性,在程序员很少帮助的情况下,代码的可伸缩性和性能严重依赖于编译器和应用程序的选择。我们提出了一种方法,面向类型的编程,并行性的所有方面都通过类型和类型系统编码。例如,程序员关联的类型信息将决定数组如何分配、分区和分布。有了这些丰富的高级信息,编译器就可以生成一个高效的目标可执行文件。如果程序员希望省略详细的类型信息,那么编译器将依赖于有良好文档记录的安全默认行为,这些行为可以在以后通过添加类型进行调优。提出了一种遵循PGAS存储模型的面向类型的并行程序设计语言Mesham。我们说明了如何,如果这样做的话,使用类型可以调整所有参数和选项与此PGAS模型在一个干净和一致的方式,而无需重写大部分的代码。FFT的案例研究,并考虑在可编程性和性能方面-后者,我们证明了与现有的FFT求解器的比较。
2020-09-26 cs.PL
Counting Immutable Beans: Reference Counting Optimized for Purely Functional Programming
大多数函数式语言依赖于某些垃圾回收来进行自动存储管理。它们通常避开引用计数,而使用跟踪垃圾收集器,这样在运行时的簿记开销更少。另一方面,对每个值进行精确的引用计数可以实现优化,例如破坏性更新。我们探索这些优化的机会,在一个热切的,纯功能的程序设计语言的上下文中。我们提出了一种新的机制,有效地回收内存使用的非共享值,减少压力的全局内存分配器。我们描述了一种使用借用引用来最大限度地减少引用计数更新数量的方法和一种自动推断借用注释的启发式方法。我们实现了所有这些技术在一个新的编译器的渴望和纯功能的程序设计语言支持多线程。我们的初步实验结果表明,我们的方法是有竞争力的,往往优于国家的最先进的编译器。
2020-03-05 cs.PL
langcc: A Next-Generation Compiler Compiler
传统上,解析一直是编译器开发中一个费力且容易出错的组件,而且大多数工业程序设计语言的解析器仍然是手工编写的。作者[Zim22]表明,自动解析器生成可以是实用的,通过一些新的创新,在标准LR范式的Knuth等人。有了这种方法,我们可以自动生成有效的解析器,几乎所有的语言,直观上是“容易解析”。这包括Golang 1.17.8和Python 3.9.12,我们生成的解析器分别比标准解析器快1.2倍和4.3倍。本文档是一份附带的技术报告,描述了该工作的软件实现,可在https://github.com/jzimmerman/langcc上获得开源。
2022-09-17 cs.FL cs.PL
Sharing Analysis in the Pawns Compiler
本文提出 Pawns 编译器中的共享分析技术,通过处理显式指针、破坏性更新、高阶函数与闭包及共享前后置条件,使不纯效果可被安全封装在纯函数中。
2024-09-04 cs.PL
Transparent Compiler and Runtime Specializations for Accelerating Managed Languages on FPGAs
近年来,异构计算已经成为增加计算机数量的重要途径。通过结合图形处理单元(GPU)和现场可编程门阵列(FPGA)等各种硬件设备,提高性能和能效。这种趋势背后的原理是,应用程序的不同部分可以从主CPU卸载到不同的设备,这些设备可以作为协处理器有效地执行这些部分。FPGA是最广泛使用的协处理器的子集,由于其灵活的硬件和节能特性,通常用于加速特定的工作负载。这些特性使它们在从低功耗嵌入式系统到高端数据中心和云基础设施的广泛计算系统中普遍存在。然而,这些硬件特性是以可编程性为代价的。使用高级程序设计语言(例如,Java、Python等)需要熟悉硬件描述语言(例如,VHDL、Verilog)或最近的异构编程模型(例如,OpenCL,HLS),以利用协处理器?容量并调整其应用程序的性能。目前,上述异构编程模型仅支持从编译语言(如C和C++)编译。因此,异构协处理器到托管程序设计语言(例如Java、Python)的软件生态系统的透明集成不是无缝的。在本文中,我们重新考虑了我们遇到的工程权衡,在透明度和编译开销方面,同时将FPGA集成到高级托管程序设计语言中。我们提出了一种新的方法,使运行时代码专业化技术的无缝和高性能的Java程序在FPGA上执行。所提出的解决方案是原型的Java程序设计语言和TornadoVM的上下文中,一个开源的Java执行异构硬件的编程框架。最后,我们评估了针对FPGA执行的…
2020-10-30 cs.PL
Using Cognitive Computing for Learning Parallel Programming: An IBM Watson Solution
虽然现代并行计算系统提供高性能资源,但最大程度地利用它们需要高级编程专业知识。并行计算系统的编程比顺序系统的编程要困难得多。OpenMP是C++程序设计语言的扩展,它支持使用编译器指令来表示并行性。虽然OpenMP通过减少程序员需要编写的代码行来简化并行编程,但决定如何以及何时使用这些编译器指令取决于程序员。新手程序员可能会犯错误,导致性能下降或意外的程序行为。认知计算在健康或营销等各个领域都取得了令人印象深刻的成果。在本文中,我们描述了使用IBM沃森认知系统的教育新手并行程序员。使用IBM Watson的对话服务,我们开发了一种解决方案,可帮助程序员避免常见的OpenMP错误。为了评估我们的方法,我们进行了一项调查,一些新手并行程序员在林奈大学,并获得了令人鼓舞的结果,我们的方法的实用性。
2017-04-05 cs.PL
OpenQL : A Portable Quantum Programming Framework for Quantum Accelerators
随着量子算法解决棘手的经典问题的潜力,量子计算正在迅速发展,更多的算法正在开发和优化。使用高级语言表达这些量子算法,并使其在量子处理器上可执行,同时抽象出硬件细节是一项具有挑战性的任务。首先,量子编程语言应该提供一个直观的编程接口来描述这些算法。然后,编译器必须将程序转换为量子线路,优化它并将其映射到目标量子处理器,以考虑硬件约束,例如支持的量子操作,量子位连接性和控制电子器件限制。在本文中,我们提出了一个名为OpenQL的量子编程框架,它包括一个高级量子编程语言及其相关的量子编译器。我们介绍了OpenQL的编程接口,我们描述了编译器的不同层,以及我们如何在不同的量子位技术上提供可移植性。我们的实验表明,OpenQL允许在两种不同的量子比特技术上执行相同的高级算法,即超导量子比特和Si-Spin量子比特。除了可执行代码外,OpenQL还生成一个中间量子汇编代码(cQASM),它与技术无关,可以使用QX模拟器进行模拟。
2020-05-27 cs.PL cs.SE quant-ph
Hexcute: A Compiler Framework for Automating Layout Synthesis in GPU Programs
University of Toronto(多伦多大学);NVIDIA(英伟达);Vector Institute(向量研究所)
Hexcute是一种自动布局合成的编译器框架,通过类型推断算法实现高效GPU程序编译,显著提升性能并减少代码量。
2026-01-28 cs.AI cs.LG cs.PL
Implementing Support for Pointers to Private Data in a General-Purpose Secure Multi-Party Compiler
最近的编译器允许将处理私有数据的通用程序(以传统的程序设计语言编写)翻译成相应功能的安全分布式实现。由此产生的程序,然后保证可证明保护私人数据使用安全的多方计算技术。这种编译器的目标是通用性、可用性和效率,但是现有的编译器迄今为止还不支持现代程序设计语言的完整特征集。特别是,最近的编译器PICCO和两方ANSI C编译器努力将任何C程序翻译成其安全的多方实现,但目前缺乏对指针和动态内存分配的支持,这是许多C程序的重要组成部分。在这项工作中,我们减轻了限制,并增加了对私有数据的指针的支持,从而为PICCO编译器提供动态内存分配,使其能够处理私有数据上更多样化的程序集。因为这样做开辟了一个新的设计空间,我们调查使用指针的私有数据(与已知以及存储在他们的私人位置)在程序中,并报告我们的发现。除了动态内存分配,我们研究其他重要的主题与常见的指针使用,如指针/地址引用,铸造,并建立各种数据结构的安全多方计算的上下文中。这使得编译器能够自动将使用指向私有数据的指针的用户程序转换为其分布式实现,从而在整个计算过程中可证明地保护私有数据。我们经验评估的建设和报告的代表性方案的性能。
2017-06-30 cs.CR cs.PL
Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System
上下文:编译时间是软件项目适应性的一个重要因素。快速重新编译可以对项目的更改进行廉价的实验,因为这些更改可以快速测试。长期以来,单独和增量编译一直是人们感兴趣的主题,以促进快速重新编译。Inquiry:尽管增量编译器有很多好处,但这种编译器通常不是默认的。这是因为增量化需要横切的、复杂的和容易出错的技术,比如依赖跟踪、缓存、缓存失效和更改检测。特别是在具有跨模块定义和集成的语言的编译器中,正确有效地实现增量编译器可能是一个挑战。在编译器中改进增量就更难了。我们解决这个问题,通过开发一个编译器的设计方法,重用现有的非增量编译器的部分,以降低构建增量编译器的成本。它还提供了一种通过分期编译难以增量化的语言功能的直观方法。方法:我们使用本文中提出的编译器设计方法来开发一个增量编译器的Replego项重写语言。这种语言有一组乍一看与增量编译不兼容的特性。因此,我们把Cubergo作为我们的关键案例来演示这种方法。我们展示了这种方法是如何分解原始编译器的,并有一个增量编译Cubergo的解决方案。我们构建增量编译器的关键思想是在内部使用增量构建系统将我们从原始编译器中提取的组件连接在一起。知识:生成的编译器已经在使用中,作为原来的全程序编译器的替代品。我们发现编译器内部的增量构建系统是我们方法的重要组成部分。这允许编译器编写者考虑编译的多个步骤,并几乎毫不费力地将其组合到增量编译器中。通常情…
2020-02-14 cs.PL
CompilerGPT: Leveraging Large Language Models for Analyzing and Acting on Compiler Optimization Reports
针对编译器优化报告难解读难落地的问题,本文提出CompilerGPT框架,自动化实现编译器、大语言模型与用户测试工具的交互,实验显示最高可获6.5倍加速,有望提升编译器可用性、优化软件流程。
2025-06-12 cs.PL
Fuel: A Compiler Framework for Safe Memory Management
流敏感类型系统提供了一种优雅的方式来确保程序设计语言中的内存安全。不幸的是,它们在新的或现有的语言中的采用往往受到实现或将它们集成到编译器中的痛苦努力的阻碍。本文介绍了我们的努力,以减轻这一任务的早期结果。我们引入了Fuel,这是一个基于类型能力的库,可以插入到编译器工具链中来检查内存安全属性。Fuel建立在基于能力的系统领域的成熟思想基础上,并添加了一种利用动态检查的机制,以恢复静态推理太困难或不可能的能力。这种方法允许分析潜在地覆盖典型类型系统可能没有足够的表达能力来静态地推理内存安全的情况。
2021-06-23 cs.PL
Verified Self-Explaining Computation
常见的编程工具,如编译器,调试器和IDE,主要依赖于分析程序代码的能力,以推断其行为和属性。在验证编译器和静态分析方面已经做了大量的工作,但是在验证诸如程序切片之类的动态分析方面的工作却少得多。最近,一个新的数学框架切片介绍,其中向前和向后切片是双重的意义上说,他们构成了伽罗瓦连接。本文形式化了一种简单命令式程序设计语言的前向和后向动态切片算法,并使用Coq证明助手形式化地验证了它们的对偶性。
2019-07-12 cs.PL
$Q|SI\rangle$: A Quantum Programming Environment
介绍了一个量子程序设计环境$Q|SI\rangle$。它是一个嵌入.Net语言的平台,支持使用$\mathbf{while}$语言的量子扩展进行量子编程。该平台的框架包括一个量子$\mathbf{while}$语言的编译器和一套用于模拟量子计算、优化量子线路以及分析和验证量子程序的工具。在整个文件中,使用$Q|SI\rangle$模拟量子行为的经典平台与组件的组合进行了演示。可扩展的框架允许用户在平台上编程定制功能。编译器是$Q|SI\rangle$的核心,它在量子硬件和量子软件之间架起了一座桥梁。内置的分解算法使通用的量子计算在现有的量子硬件上。
2017-10-26 cs.PL quant-ph
An Open-Source, Industrial-Strength Optimizing Compiler for Quantum Programs
Quilc是一个开源的优化编译器,用于使用Quil或QASM(两种流行的量子编程语言)编写的基于门的量子程序。编译器的设计关注了NISQ时代的量子计算机,特别是认识到每个量子门对程序的成功执行都有不可忽略且通常不可恢复的成本。Quilc的主要目标是通过减少架构细节对作者的负担,使量子软件的创作变得更简单。使用Quilc可以让你更快地编写程序,同时通常不会损害-甚至有时会提高-它们在给定硬件架构上的执行保真度。在本文中,我们描述了Quilc设计背后的许多原则,并通过各种示例演示了编译器。
2020-03-31 cs.PL quant-ph
Dependent Types for Multi-Rate Flows in Synchronous Programming
同步程序设计语言出现于20世纪80年代,作为实现反应式系统的工具,它与来自物理环境的事件交互,并且通常必须在严格的时间约束下进行。在这份报告中,我们在ATS内部编码各种实时原语的实验同步语言称为前奏曲,其中ATS是一个静态类型的语言与ML类似的功能核心,支持依赖类型(的DML风格)和线性类型。我们表明,这些原语上施加的验证要求可以正式表示在ATS中的依赖类型。此外,我们修改了Prelude编译器,自动生成ATS代码从Prelude源。这个修改后的编译器允许我们仅仅依靠ATS中的类型检查来履行源于对Prelude代码进行类型检查的需要的证明义务。而ATS通常被用作通用程序设计语言,我们在此证明,它也可以方便地用于支持某些形式的高级静态检查的语言配备了较少的表达类型。
2017-02-08 cs.PL
HTCC: Haskell to Handel-C Compiler
函数式程序设计语言(如Haskell)支持简单、简洁和按结构正确的硬件开发。HTCC将Haskell的一个子集编译为Handel-C语言,并提供硬件输出。此外,HTCC生成VHDL,Verilog,EDIF和SystemC程序。HTCC编译器的设计包括词法分析器、语法分析器和语义分析器。HTCC自动化了转换派生方法,以快速生产映射到现场可编程门阵列(FPGA)的硬件。HTCC使用ANTLR编译器-编译器工具生成,并支持有效的集成开发环境。本文介绍了HTCC的设计原理和实现方法。给出了一阶和高阶函数的几个样本生成。最后给出了XTEA密码的编译实例。调查包括彻底的评价和业绩分析。目标FPGA包括Altera和Xilinx的Cyclone II、Stratix IV和Virtex-6。
2019-07-10 cs.PL
The CoCompiler: DSL Lifting via Relational Compilation
本研究提出CoCompiler双向工具,通过关系编译思路改写Vélus编译器,结合规范化处理,实现真实反应式C代码到Lustre DSL的提升,为复用现有编译器构建DSL提升器提供实用基础。
2025-10-28 cs.PL
C-lisp and Flexible Macro Programming with S-expressions
本文介绍 Llama$.$lisp 编译器框架中基于 S 表达式的宏系统,并以 FFI 绑定实现为例展示其灵活编程能力。
2024-10-23 cs.PL
The Improved GP 2 Compiler
GP 2是一种基于规则的程序设计语言,它基于图变换规则,旨在方便程序分析和验证。用这种语言编写高效的程序是一个挑战,因为图匹配是昂贵的。GP 2通过提供根规则来解决这个问题,在温和的条件下,这些根规则可以在恒定的时间内匹配。最近,我们对Bak的GP 2-to-C编译器进行了一些更改,以加快图形程序的速度。一个关键的改进是一个新的动态数组数据结构,称为BigArray。这是一个指向条目数组的指针数组,大小依次加倍。为了证明新的实现可实现的速度,我们提出了一个减少程序,用于识别二进制DAG,以前运行在二次时间,但现在运行在线性时间与新的编译器编译时。
2021-01-05 cs.PL
Comparative Studies of Six Programming Languages
比较程序设计语言是软件工程师讨论的一个常见话题。为了跟上不断变化的编程范式、硬件发展等,每年都有多种程序设计语言被设计、指定和实现。本文对六种程序设计语言:C++、PHP、C#、Java、Python、VB进行了比较研究;从可重用性、可靠性、可移植性、编译器和工具的可用性、可读性效率、熟悉度和表现力。
2015-04-02 cs.PL
Programming Bare-Metal Accelerators with Heterogeneous Threading Models: A Case Study of Matrix-3000
随着硬件行业转向使用专门的异构众核来避免功率墙的影响,软件开发人员发现很难处理这些系统的复杂性。本文分享了我们为Matrix-3000开发编程模型及其支持编译器和库的经验,Matrix-3000是为下一代百亿亿次超级计算机设计的,但具有复杂的存储层次结构和处理器组织。为了帮助其软件开发,我们从头开始开发了一个软件堆栈,其中包括一个低级编程接口和一个高级OpenCL编译器。我们的低级编程模型为使用Matrix-3000的裸金属加速器提供本机编程支持,而高级模型允许程序员使用OpenCL编程标准。我们详细介绍了我们的设计选择,并强调了从开发系统软件中吸取的经验教训,以实现对裸机加速器的编程。我们的编程模型已部署到兆级原型系统的生产环境中。
2022-10-21 cs.DC cs.PF cs.PL
ReduKtor: How We Stopped Worrying About Bugs in Kotlin Compiler
众所周知,缺陷定位是软件工程中的一个难题,特别是在编译器开发中,将输入程序减少到最小的复制示例是有益的;这种技术通常称为delta调试。另一个问题是,每种新的程序设计语言都有自己独特的怪癖和弱点,这使得完全有效地重用现有的工具和方法几乎是不可能的。在这篇经验论文中,我们解决了delta调试问题w.r.t. Kotlin,一种来自JetBrains的相对较新的程序设计语言。我们的方法是基于程序切片,分层增量调试和Kotlin特定转换的新组合,它们相互协同。我们在一个名为ReduKtor的原型中实现了它,并对合成和真实的Kotlin程序进行了广泛的评估;我们还将其性能与经典的delta调试技术进行了比较。评估结果支持我们的Kotlin delta调试方法的实际可用性,也表明了使用语言无关和语言特定技术来实现最佳还原效率和性能的重要性。
2019-09-16 cs.PL cs.SE
Coexponential Exploration in the Clef Programming Language
Braidpoint
该研究在并发编程语言Clef中开发有状态服务的共指数解释,证明相关转换的状态所有权与回复保留,实现分布式工作示例,将自动结构分析等关联,支持有状态服务的跨目标正确组合。
2026-10-16 cs.DC cs.LO cs.PL
A FORTRAN coded regular expression Compiler for IBM 1130 Computing System
Escuela Superior de Física y Matemáticas, Instituto Politécnico Nacional(墨西哥国立理工学院高等物理与数学学院)
REC(正则表达式编译器)是一种简洁的程序设计语言,它允许学生编写程序,而不需要了解像FORTRAN和ALGOL这样的语言的复杂语法。该语言是递归的,只包含四个控制元素。本文介绍一个用FORTRAN语言编写的REC解释程序。
2009-05-06 cs.CL cs.PL