Pragmatics of Formally Verified Yet Efficient Static Analysis, in particular for Formally Verified Compilers
本文针对形式化验证编译器所需的静态分析,探讨其正确性证明与效能平衡的难点、解决方案、设计选择及树/映射/集合形式分析结果的相关权衡。
2024-07-11 cs.LO cs.PL
The Trusted Computing Base of the CompCert Verified Compiler
CompCert是第一个现实的正式验证编译器:它提供了一个机器检查的数学证明,证明它生成的代码与源代码匹配。然而,这种做法可能存在漏洞。我们全面分析了CompCert的错误可能导致生成错误代码的方面。可能的问题包括从源语言和目标语言的建模到用于从编译器内部调用外部算法的某些技术。
2022-10-10 cs.LO cs.PL
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
Visualizing The Intermediate Representation of Just-in-Time Compilers
即时(JIT)编译器被许多现代编程系统用来提高性能。JIT编译器中的错误提供了可利用的安全漏洞,并且由于它们庞大,复杂和动态,因此调试它们是困难的。目前的调试和可视化工具处理静态代码,并不适合在这个领域。我们描述了一种新的方法来简化大型和复杂的中间表示,生成的JIT编译器和可视化它与地铁地图的比喻,以帮助开发人员在调试。在Google的V8 JavaScript解释器和TurboFan JIT编译器上使用我们的原型实现的实验表明,它可以帮助识别和定位错误代码。
2021-06-09 cs.PL
Quantitative Comparison of Credible Compilation and Verification In Coding Agent Compiler Development
National University of Singapore(新加坡国立大学);Massachusetts Institute of Technology(麻省理工学院)
本文通过首个由人类监督的验证编译器,比较了可信编译与验证两种编译验证方法的效率,发现验证需要更多开发工作量,且验证优化选择更不高效的算法,证书检查时间占主导。
2026-05-09 cs.PL
Memory Simulations, Security and Optimization in a Verified Compiler
针对编译器安全特性与优化需跨内存布局模拟原程序的问题,本文通过内存扩展、注入及未定义值细节,在CompCert验证编译器中实现并证明了两项安全特性和一项尾递归消除优化的正确性。
2023-12-13 cs.LO cs.PL
A Verified Compiler for Probability Density Functions
Bhat等人开发了一个归纳编译器,它可以用简单的概率函数语言计算概率空间的密度函数。在这项工作中,我们实现了这样一个编译器的修改后的版本,这种语言的定理证明器伊莎贝尔,并给出了一个正式的证明其可靠性w.r.t.源语言和目标语言的语义。与Isabelle的归纳谓词代码生成一起,这产生了一个完全验证的、可执行的密度编译器。使用标准的精化方法,证明分两步完成:首先,定义一个抽象编译器,使用直接在定理证明器的逻辑中建模的抽象函数,并证明其正确性。然后,这个编译器被细化为返回目标语言表达式的具体版本。
2017-07-21 cs.LO cs.PL math.PR
Simple, Light, Yet Formally Verified, Global Common Subexpression Elimination and Loop-Invariant Code Motion
我们提出了一种方法,通过组合展开通道和正式认证但有效的全局子表达式消除来实现正式认证的循环不变代码运动优化。这种方法是轻量级的:每一遍都有一个简单而独立的正确性证明。实验表明,该方法显着缩小了CompCert认证编译器和国家之间的性能差距。艺术优化编译器。我们的静态分析采用了一个有效的,但验证哈希集结构,导致快速编译。
2021-05-04 cs.PL
Fully Composable and Adequate Verified Compilation with Direct Refinements between Open Modules (Technical Report)
提出一种基于CompCert内存模型和带内存保护的Kripke关系的开放模块可信组合编译方法,实现直接精化,支持完整编译链的端到端验证,降低验证复杂度。
2023-11-18 cs.PL
Pyrosome: Verified Compilation for Modular Metatheory
Pyrosome 是一个 Coq 实现的模块化元理论框架,通过归纳等价保持实现可扩展的验证编译,支持特性扩展和编译器垂直组合,并展示了从 System F 到 CPS 及闭包转换的多遍编译案例。
2025-07-08 cs.PL
RVSDG: An Intermediate Representation for Optimizing Compilers
中间表示(IR)是优化编译器的核心,因为程序的表示方式可能会增强或限制分析和转换。合适的IR专注于暴露最相关的信息,并建立不同编译器传递可以依赖的不变量。虽然以控制流为中心的IR似乎是命令式程序设计语言的天然选择,但编译器所需的分析越来越多地转向理解数据依赖关系,并同时在多个抽象层上工作。这在最近的发展中得到了部分证明,例如谷歌提出的MLIR。然而,在通用编译器中严格使用以数据流为中心的IR的可行性和可用性尚未进行评估,因为以前的作品没有提供实际的实现。提出了一种用于优化编译器的区域化值状态依赖图IR。RVSDG是以数据流为中心的IR,其中节点表示计算,边表示计算依赖性,并且区域捕获程序的分层结构。它代表了需求依赖形式的程序,隐式地支持结构化控制流,并在一个单一的IR模型的整个程序。我们提供了一个完整的规范的RVSDG,建设和破坏的方法,以及通过提出死节点和公共节点消除优化的实用程序。我们实现了一个原型编译器,并评估它的性能,代码大小,编译时间和代表性开销。我们的研究结果表明,RVSDG可以作为一个有竞争力的IR优化编译器,同时降低复杂性。
2020-03-17 cs.PL
Verified Self-Explaining Computation
常见的编程工具,如编译器,调试器和IDE,主要依赖于分析程序代码的能力,以推断其行为和属性。在验证编译器和静态分析方面已经做了大量的工作,但是在验证诸如程序切片之类的动态分析方面的工作却少得多。最近,一个新的数学框架切片介绍,其中向前和向后切片是双重的意义上说,他们构成了伽罗瓦连接。本文形式化了一种简单命令式程序设计语言的前向和后向动态切片算法,并使用Coq证明助手形式化地验证了它们的对偶性。
2019-07-12 cs.PL
Macro-embedding Compiler Intermediate Languages in Racket
本文提出在Racket中宏嵌入编译器中间语言家族(类Scheme至x86-64),用于编译器课程测试框架推导解释器,展示面向语言技术实现多语言家族及高低级语言互操作性,提升代码复用与开发效率。
2025-09-23 cs.PL
A Verified Compiler for Quantum Simulation
针对现有哈密顿量模拟编译器缺乏形式化保证的问题,提出基于二次量子化的高层验证框架QBlue,含类型系统并支持数字/模拟电路编译,在Rocq中完全机械化,实现端到端验证。
2025-09-26 cs.PL quant-ph
CertiQ: A Mostly-automated Verification of a Realistic Quantum Compiler
我们提出了CertiQ,一个验证框架,用于编写和验证Qiskit,最广泛使用的量子编译器的编译器通行证。据我们所知,CertiQ是第一个以最自动化的方式验证真实世界量子编译器通过的努力。在CertiQ接口中编写的带有注释的验证器通道可用于生成验证条件,以及可集成到Qiskit中的可执行代码。CertiQ引入了量子电路演算,通过将这种检查过程编码到SMT问题中来实现量子线路的等效性的有效检查。CertiQ还提供了一个经过验证的广泛使用的数据结构库、电路转换函数以及不同量子数据表示的转换函数。这个经过验证的库不仅可以进行模块化验证,而且还可以为未来的量子编译器设计提供指导。我们已经在CertiQ中重新实现并验证了26个(共30个)Qiskit编译器通道,在此期间,在Qiskit实现中检测到三个错误。我们验证的编译器通过实现通过了所有Qiskit的回归测试,没有显示出明显的性能损失。
2020-11-26 cs.ET cs.PL quant-ph
Tenspiler: A Verified Lifting-Based Compiler for Tensor Operations (Extended Version)
针对张量处理基础设施遗留代码迁移成本高的问题,提出基于提升的验证编译器Tenspiler,通过中间语言TensIR将通用语言顺序程序转为张量运算,支持多后端,实现显著性能提升。
2024-12-14 cs.PL
Coqlex: Generating Formally Verified Lexers
Coqlex 是一个类似 OCamllex 的生成器,用于生成带有 Coq 正确性证明的词法分析器,采用 Brzozowski 导数实现,兼顾简单性与性能,比 Verbatim++ 快两个数量级,并在工业 Ada 项目中验证了其实用性。
2023-06-21 cs.PL
Glow: Graph Lowering Compiler Techniques for Neural Networks
本文介绍了Glow的设计,一个机器学习编译器的异构硬件。这是一种实用的编译方法,可以为多个目标生成高度优化的代码。Glow将传统的神经网络拓扑图简化为两阶段的强类型中间表示。高级中间表示允许优化器执行特定于域的优化。低层的基于编译的仅地址中间表示允许编译器执行与存储器相关的优化,例如指令调度、静态存储器分配和副本消除。在最底层,优化器执行特定于计算机的代码生成,以利用专门的硬件功能。Glow具有一个降低阶段,使编译器能够支持大量的输入运算符以及大量的硬件目标,无需在所有目标上实现所有运算符。降低阶段旨在减少输入空间,并允许新的硬件后端专注于少量的线性代数基元。
2019-04-03 cs.PL
Formally Verified Samplers From Probabilistic Programs With Loops and Conditioning
本文提出 Zar 编译器流水线,将含无界循环和条件化的 cpGCL 程序经 choice-fix 树与交互树转换为随机位模型中的可执行采样器,并在 Coq 中完整验证其等分布正确性。
2023-04-20 cs.PL
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
Quantum Circuit Transformations with a Multi-Level Intermediate Representation Compiler
量子计算承诺处理信息的显着方法,但需要新的工具来将程序表示编译为量子计算机所需的物理指令。在这里,我们提出了一种新的适应的多级中间表示(MLIR)集成到一个量子编译器,可用于检查程序执行。我们首先介绍了MLIR如何使量子线路转换在量子计算设备上高效执行,然后给出了一个基于所谓的镜像电路的编译器转换的例子。我们证明,在编译过程中插入的镜像电路可以通过评估几个超导和离子阱硬件平台上的量子线路精度来测试硬件性能。我们的研究结果验证MLIR作为一种高效和有效的方法,收集硬件相关的诊断,通过自动化的量子线路的转换。
2021-12-20 cs.PL quant-ph
Petit programming language and compiler
Petit 是一种面向编译器学习的教育性编程语言,通过 6 个涵盖词法分析到代码生成的系列教程,引导学生掌握 lex、yacc 工具及 LLVM 中间表示生成。
2023-11-24 cs.PL
A Comparison of Quantum Compilers using a DAG-based or phase polynomial-based Intermediate Representation
本研究比较了基于相位多项式和DAG的量子编译器,发现前者速度快但短电路效率低,长电路CNOT门更少,辅助算法改善有限,需更复杂合成算法。
2024-09-19 cs.PL quant-ph
Mechanized semantics for the Clight subset of the C language
本文介绍了C语言的一个大子集Clight的形式语义。Clight包括指针算术、“struct”和“union”类型、C循环和结构化“switch”语句。Clight是CompCert验证编译器的源语言。Clight的形式语义是一个大步骤的操作语义,它观察终止和发散执行,并产生输入/输出事件的跟踪。Clight的形式语义是使用Coq证明助手机械化的。除了Clight的语义之外,本文还描述了它在CompCert验证编译器中的集成以及验证语义的几种方法。
2009-01-23 cs.PL
Formalization of Quantum Intermediate Representations for Code Safety
量子中间表示(QIR)是微软开发的,基于LLVM的量子程序编译器中间表示。QIR旨在为量子程序编译器提供一个独立于前端语言和后端硬件的通用解决方案,从而避免中间表示和编译器的重复开发。由于QIR仍在开发中,它是用自然语言描述的,缺乏正式的定义,导致其解释模糊不清,实现量子功能时缺乏严谨性。本文给出了QIR的数据类型和指令集的形式化定义,旨在为QIR中的操作和中间代码转换提供正确性和安全性保证。为了验证我们的设计,我们展示了一些不安全的QIR代码样本,其中错误可以通过我们的正式方法检测到。
2023-03-25 cs.PL quant-ph
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
Grokking the Sequent Calculus (Functional Pearl)
本文面向编译器黑客与编程语言爱好者,通过编写将小型表层语言转换为 λμμ-calculus 的编译器,首次以非逻辑学家的视角介绍了 sequent calculus 及其作为编译器中间语言的优势。
2024-06-20 cs.PL
LLM Translation of Compiler Intermediate Representation
Barcelona Supercomputing Center, Universitat Politècnica de Catalunya(巴塞罗那超级计算中心,加泰罗尼亚理工大学);Barcelona Supercomputing Center(巴塞罗那超级计算中心)
本文提出IRIS-14B模型,通过训练实现GIMPLE到LLVM IR的翻译,展示了大型语言模型在编译器中间表示转换中的高效性与准确性。
2026-05-07 cs.AI cs.PL
JCoffee: Using Compiler Feedback to Make Partial Code Snippets Compilable
静态程序分析工具通常只需要处理程序源代码的一小部分,这要么是由于整个程序不可用,要么是由于不需要分析完整的代码。这使得使用需要完整和类型化的中间表示(IR)的静态分析工具具有挑战性。我们提出了JCoffee,一个工具,利用编译器的反馈转换部分Java程序到他们的可编译的同行通过模拟缺少周围的代码的存在。它可以处理任何类型良好的代码片段(类、函数,甚至是一组未封闭的语句),同时对输入代码片段进行最小的更改。该工具的演示可在此处获得:https://youtu.be/O4h2g_n2Qls
2020-09-10 cs.PL
MimIR: An Extensible and Type-Safe Intermediate Representation for the DSL Age
本文提出可扩展高阶中间表示 MimIR,通过类型化 axiom 和插件机制让 DSL 开发者无需重写编译器基础设施即可扩展优化与代码生成,并在底层、正则匹配、线性代数与自动微分三个案例中验证其生成代码达到最先进性能。
2024-11-20 cs.PL
End-to-end Compositional Verification of Program Safety through Verified and Verifying Compilation
针对 Rust 等现代安全语言混合安全与不安全模块导致的端到端验证难题,提出基于开放标记迁移系统的开放安全性定义,实现经验证与验证性编译的协同组合,保障异构模块在目标层面的安全性组合验证。
2025-10-11 cs.PL
Formal Verification of a C Value Analysis Based on Abstract Interpretation
基于抽象解释的静态分析器是实现精细算法的复杂软件。即使静态分析技术已经被很好地理解,它们在真实语言上的实现仍然容易出错。本文提出了一个使用Coq证明助手的形式化验证:一个基于抽象解释的价值分析的形式化,以及价值分析的可靠性证明。形式化依赖于泛型接口。机械化的证明是由一个布尔东克莱不动点迭代器的翻译验证。这项工作已被集成到CompCert验证的C编译器。我们的验证分析直接操作的编译器的中间语言具有相同的表达能力为C。我们的价值分析到OCaml的自动提取产生了一个具有竞争力的结果的程序,从实验中获得的一些基准和比较的框架-C工具。
2013-04-12 cs.PL
Noise-Adaptive Compiler Mappings for Noisy Intermediate-Scale Quantum Computers
当前的量子计算(QC)原型与许多提出的QC算法所需的大小和规模之间存在巨大差距。目前的QC实现容易受到影响其可靠性的噪声和可变性的影响,但由于总共不到80个量子位(qubit),它们的资源过于有限,无法实现纠错。噪声中尺度量子(Noisy Intermediate-Scale Quantum,NISQ)一词指的是当前和近期的1000量子比特或更少的系统。由于NISQ的资源限制严重,可靠性低,物理特性(如相干时间或错误率)变化大,因此将计算映射到它们上以有效利用资源并最大化成功运行的可能性是非常重要的。本文提出并评估后端编译器的方法来映射和优化高层次的QC程序执行高可靠性NISQ系统具有不同的硬件特性。我们的技术都从量子程序的LLVM中间表示开始(例如从Scaffold等高级QC语言生成),并生成可在IBM Q公共QC机器上运行的QC可执行文件。然后,我们使用这个框架来实现和评估几个最佳的和启发式的映射方法。这些方法在如何解释动态机器校准数据的可用性、各种噪声参数的相对重要性、不同的可能路由策略以及编译时可扩展性与运行时成功的相对重要性方面有所不同。使用真实系统的测量,我们表明,细粒度的空间和时间变化的硬件参数可以利用,以获得一个平均的$2.9$ x(和高达$18$ x)的程序成功率提高了行业标准的IBM Qiskit编译器。
2019-01-30 cs.PL quant-ph
Formal Performance and Compile Time Guarantees for Compiler Optimization Heuristics
Cornell University(康奈尔大学)
该研究针对编译器启发式算法的性能与编译时间缺陷,提出在Rocq中验证编译器 passes 的性能与编译时间属性,通过内联展开的概念验证实现语义保留及相关界的验证,为编译器优化的形式化保证提供方案。
2026-08-21 cs.PF cs.PL
MISO: An intermediate language to express parallel and dependable programs
编写快速程序的一种方法是探索潜在的并行性,并利用微处理器中可用的大量内核。这可以通过手动指定哪些代码在哪个线程上执行、使用编译器并行化提示(如OpenMP或Cilk)或使用并行程序设计语言(如X10、Chapel或Aeminium)来实现。无论采用哪种方法,所有这些程序都被编译成一种中间的低级语言,这种语言是顺序的,从而防止后端编译器优化程序并观察其并行特性。本文介绍了MISO,一个中间语言,表示程序的并行性,可以针对前端编译器。该语言定义了“单元格”,由状态和从一个状态到下一个状态的转换函数组成。该语言既能表示串行程序,也能表示并行程序,为后端编译器生成高效的并行程序提供了信息。此外,MISO可用于通过复制状态或通过利用不同的处理器核心来自动地向程序添加冗余,以便为在不可靠的硬件上运行的程序提供容错。
2016-08-22 cs.DC cs.PL
Compilation as Multi-Language Semantics
该研究提出一种将编译器统一建模为多语言语义中开放项归约系统的方法,以解决现有模型中编译与互操作性建模重复的问题,同时提供语义见解并简化正确性证明。
2025-09-23 cs.PL
Towards Verified Compilation of Floating-point Optimization in Scientific Computing Programs
本文利用Rocq定理证明器中的Verified LLVM框架,初步验证了LLVM IR层面快速数学浮点优化中FMA变换的正确性,并提出了扩展方案。
2025-09-10 cs.PL
Equality Saturation: A New Approach to Optimization
传统编译器中的优化是顺序应用的,每个优化都破坏性地修改程序以产生转换后的程序,然后将其传递到下一个优化。我们提出了一种新的方法来构造编译器的优化阶段。在我们的方法中,优化采用相等分析的形式,将相等信息添加到公共中间表示中。优化器通过重复应用这些分析来推断程序片段之间的等价性,从而使中间表示充满等式。一旦饱和,中间表示编码输入程序的多个优化版本。在这一点上,盈利性启发式从饱和表示中表示的各种程序中挑选最终优化的程序。我们提出的结构优化器的方法比以前的方法有各种好处:我们的方法避免了需要担心优化排序,使使用一个全局优化启发式,选择完全优化的程序,并可用于执行翻译验证,即使在编译器比我们自己的。我们提出了我们的方法,形式化,并描述了我们选择的中间表示。我们还提出了实验结果表明,我们的方法是实用的时间和空间开销方面,是有效的发现复杂的优化机会,并有效地执行翻译验证一个现实的优化。
2011-03-25 cs.PL
Verified Secure Compilation for Mixed-Sensitivity Concurrent Programs
该研究使用Isabelle/HOL验证了一个单遍编译器能够保持混合敏感并发程序的非干扰性,通过引入分解原则简化安全精化证明,并在真实用例上自动保留安全属性。
2022-02-28 cs.CR cs.LO cs.PL
Unifying Static and Dynamic Intermediate Languages for Accelerator Generators
Piezo通过单一中间语言统一加速器设计中的静态与动态控制,实现优化并支持从动态到静态的转换,作为Calyx扩展验证其有效性。
2023-12-26 cs.AR cs.PL
Albert, an intermediate smart-contract language for the Tezos blockchain
Tezos是一个智能合约区块链。Tezos的智能合约是用一种名为Michelson的底层堆栈语言编写的。在本文中,我们介绍了Albert,这是Tezos智能合约的中间语言,它将Michelson堆栈抽象为线性类型的记录。我们还描述了它的编译器,以迈克尔逊,写在Coq,目标Mi-Cho-Coq,迈克尔逊在Coq实现的正式规范。
2020-01-07 cs.PL
The CoCompiler: DSL Lifting via Relational Compilation
本研究提出CoCompiler双向工具,通过关系编译思路改写Vélus编译器,结合规范化处理,实现真实反应式C代码到Lustre DSL的提升,为复用现有编译器构建DSL提升器提供实用基础。
2025-10-28 cs.PL
Demonstrating a Future for MLIR-native DSL Compilers on a NumPy-like Example
TU Dresden(德累斯顿工业大学)
本文介绍了一个面向NumPy的DSL,完全基于MLIR构建,通过新的MLIR类型检查器实现前端动作和语义分析,展示了其在天气建模和计算流体动力学领域的应用效果。
2026-04-27 cs.PL
Foundational Verification of Smart Contracts through Verified Compilation
针对智能合约的高正确性需求,研究提出面向以太坊的DeepSEA基础验证系统,含适配验证的DeepSEA语言与经验证的编译器,可实现端到端验证,并通过DeFi、众筹两个案例验证了可用性。
2024-05-14 cs.PL
Experiences Building an MLIR-based SYCL Compiler
本文介绍基于MLIR框架构建SYCL编译器的实践经验,通过方言机制建模主机与设备代码,实现强大优化与分析,相比LLVM实现最高提速4.3倍,并探讨了未来挑战。
2023-12-20 cs.DC cs.PF cs.PL
Bringing Iris into the Verified Software Toolchain
Verified Software Toolchain(VST)是一个使用分离逻辑证明C程序正确性的系统。通过连接到经过验证的编译器CompCert,它为我们可以编译和运行的真实C代码提供了最强的正确性保证。VST从一开始就以锁不变量的推理形式包含了并发性,但并发分离逻辑(CSL)从那时起就有了飞跃式的发展。在本文中,我们描述了努力整合的进步,从虹膜,一个国家的最先进的机械化CSL,到VST。Iris的一些特性(幽灵状态和不变量)在VST中从头开始重新实现;其他特性(Iris证明模式)是从Iris开发中导入的;还有一些特性(原子操作的证明规则)是公理化的,希望它们在未来的版本中成为基础。其结果是一个系统,可以证明在C中实现的复杂的并发程序的正确性,细粒度的锁定和非阻塞原子操作,产生不同的可靠性保证取决于所使用的功能。
2022-07-15 cs.PL
An Empirical Study of Rust-Specific Bugs in the rustc Compiler
本研究系统分析 rustc 编译器中的 Rust 特定缺陷,通过审查 2022-2024 年间的 301 个问题,发现缺陷主要源于类型系统和生命周期模型,并指出现有测试工具难以检测非崩溃错误。
2025-03-31 cs.PL
A Fast Compiler for NetKAT
高级程序设计语言在越来越多的网络平台中发挥着关键作用,简化了应用程序开发并实现了对网络行为的精确形式化推理。不幸的是,目前的编译器只处理“本地”程序,这些程序指定了逐跳转发行为,或者简单路径之类的适度扩展。为了编码更丰富的“全局”行为,程序员必须添加额外的状态--这是一件很难正确处理的事情,也使程序更难编写和维护。更糟糕的是,现有的编译器可能需要几十分钟才能生成网络的转发状态,即使是相对较小的输入。这迫使程序员浪费时间来解决性能问题,甚至恢复使用硬件级API。本文提出了一种新的编译器的NetKAT语言,处理丰富的功能,包括定期的路径和虚拟网络,但几个数量级的速度比以前的编译器。编译器使用符号自动机来计算实现“全局”程序所需的额外状态,并使用基于二进制决策图的中间表示来显着提高性能。我们描述了三个基本的编译器阶段的设计和实现:从虚拟程序(指定行为的虚拟拓扑结构)的全局程序(指定网络范围内的行为的物理拓扑结构),从全局程序到本地程序(指定行为的单开关行为),从本地程序到硬件级转发表。我们目前的结果,从实验中量化性能的编译时间和转发表的大小在现实世界的基准测试。
2015-06-24 cs.PL
LLHD: A Multi-level Intermediate Representation for Hardware Description Languages
现代硬件描述语言(HDL),如SystemVerilog或VHDL,由于其纯粹的复杂性,不足以通过现代电路设计流程传输设计。相反,每个设计自动化工具都将HDL降低到自己的中间表示(IR)。这些工具是单片的,并且大多是专有的,在HDL的实现方面存在分歧,并且虽然存在许多冗余IR,但今天没有IR可以用于整个电路设计流程。为了解决这个问题,我们提出了LLHD多电平IR。LLHD被设计为简单,明确的数字电路的参考描述,但完全捕获现有的HDL。我们用参考编译器在像完整CPU内核那样复杂的设计上展示了这一点。LLHD降低了接近硬件的结构IR的通行证,很容易与现有的工具集成。LLHD为HDL和工具的创新奠定了基础,而无需冗余编译器或不相交的IR。例如,我们实现了一个LLHD模拟器,其运行速度比商业模拟器快2.4倍,但产生等效的周期准确的结果。一个初始的垂直集成的研究原型是能够代表所有级别的IR,实现降低从行为到结构IR,并涵盖了足够的子集SystemVerilog支持一个完整的CPU设计。
2020-04-07 cs.PL
Program Analysis with Prophecy and History Variables in the Nexis Compiler
National University of Singapore(新加坡国立大学);Massachusetts Institute of Technology(麻省理工学院)
研究提出用预言变量解决程序分析问题,通过特定语言指定变量,紧密耦合变量规范与操作语义,消除传统机制。给出预言和历史变量的验证实现,证明经典转换的正确性和最优性,是首批此类机器检查证明。
2026-07-28 cs.PL
Let it Flow: A Formally Verified Compilation Framework for Asynchronous Dataflow
Carnegie Mellon University(卡内基梅隆大学);University of Maryland, College Park(马里兰大学帕克分校)
该研究提出首个异步数据流编译器的形式化验证框架Wavelet,通过带围栏的能力类型系统等技术,验证编译器核心 passes 并证明相关属性,编译的数据流图规模与未经验证编译器相当。
2026-08-07 cs.LO cs.PL
Lowering IrGL to CUDA
IrGL中间表示是针对GPU的不规则程序的显式并行表示。在本报告中,我们描述了IrGL结构,它们的使用示例以及IrGL如何通过Galois GPU编译器编译为CUDA。
2016-07-19 cs.PL
Formal Constraint-based Compilation for Noisy Intermediate-Scale Quantum Systems
有噪声的中尺度量子(NISQ)系统预计将具有几百个量子位,最小或没有纠错,有限的连接性以及在机器的短相干窗口内可以执行的门的数量限制。过去十年对量子程序设计语言和编译器的研究是针对具有数千个量子位的大型系统。对于近期的量子系统,设计工具流是至关重要的,它可以有效地利用硬件资源,而不会牺牲高级编程环境的易用性和可移植性。在本文中,我们提出了一个编译器的脚手架量子程序设计语言,其中积极的优化专门针对NISQ机与数百个量子位。我们的编译器提取门从脚手架程序,并制定了一个约束优化问题,考虑程序特性和机器的约束。使用Z3 SMT求解器,编译器将程序量子位映射到硬件量子位,调度门,并插入CNOT路由操作,同时优化整体执行时间。优化的输出用于生成OpenQASM语言的目标代码,这些代码可以在现有的量子硬件(如16量子位IBM机器)上执行。使用真正的和合成的基准,我们表明,它是可行的,以综合接近最佳的编译代码,目前和小型NISQ系统。对于大型程序和机器大小,SMT优化方法可以用于合成编译代码,保证在机器的一致性窗口内完成。
2019-03-08 cs.PL quant-ph
ComPile: A Large IR Dataset from Production Sources
本文提出 ComPile 数据集,通过接入 LLVM 编译器基础设施从 Rust、Swift、Julia 和 C/C++ 等生产级程序中提取了 182B token 的 LLVM IR 数据,用于训练基于中间表示的模型并支持编译器组件的内省分析。
2024-04-30 cs.PL