Opportunities for a Truffle-based Golo Interpreter
Golo是Java虚拟机的一种简单的动态类型语言。最初作为JVM字节码的提前编译器实现,它利用invokedynamic和JSR 292方法句柄来实现合理有效的运行时。Truffle正在成为一个为JVM语言构建解释器的框架,它具有自专门的AST节点。与Graal编译器相结合,Truffle提供了一条编写高效解释器的简单途径,同时保持工程工作的平衡。Golo项目有兴趣在未来试验Truffle解释器,因为它将为构建语言运行时提供invokedynamic与Truffle之间有趣的比较元素。
2015-05-22 cs.PL
The Green Side of the Lua
University of Minho(米尼奥大学);INESC TEC(葡萄牙电信与计算机科学研究院)
本文研究了Lua的能耗和性能,发现LuaJIT编译器在能耗和速度上显著优于标准解释器,接近C语言的效率。
2026-01-30 cs.PL cs.SE
Deegen: A JIT-Capable VM Generator for Dynamic Languages
Deegen 是一个元编译器,能够以接近编写简单解释器的成本自动生成高性能 JIT 虚拟机;基于它实现的 LuaJIT Remake 在解释器和基线 JIT 性能上显著超越 PUC Lua 并接近 LuaJIT。
2024-11-24 cs.PL
Engine-Transfer-Bench: An Evidence-Based Benchmark for Document Compilation Engine Selection
Independent Researcher San Jose CA USA;Independent Researcher
针对文档编译引擎选择缺乏共享框架的问题,该研究构建了Engine-Transfer-Bench基准,通过多维度测试分析不同引擎性能,发布相关工具作为共享基础设施。
2026-08-20 cs.PL cs.SE
Whose baseline compiler is it anyway?
本文研究Wasm基线编译器的设计与权衡,揭开单遍编译器的内部机制,提出一款集成值标签、支持灵活插桩的新型单遍编译器,实验证明其值标签优化开销近零,并评估了6款基线编译器的性能定位。
2023-11-05 cs.PL
Sidekick compilation with xDSL
本文提出助手式编译器框架概念,通过文本交换格式和声明式抽象实现多框架互操作,并以xDSL为例展示其在教学、DSL编译和重写系统原型开发中简化从原型到生产过渡的作用。
2024-06-17 cs.PL
The BinProlog Experience: Architecture and Implementation Choices for Continuation Passing Prolog and First-Class Logic Engines
我们描述了BinProlog系统的编译技术,运行时系统和它的扩展支持一流的逻辑引擎,同时提供了一个简短的历史,它的一些较新的重新实现的细节,以及在他们的设计中涉及的最重要的架构选择的概述。与传统的WAM实现的差异,我们解释BinProlog的编译技术,它取代了WAM与简化的连续传递运行时系统(“BinWAM”)的关键细节,基于映射的完整Prolog二进制逻辑程序。这之后是使用“tag-on-data”表示的术语压缩技术的描述。后来的衍生产品,基于Java的Jinni Prolog编译器和最近开发的Lean Prolog系统用一流的逻辑引擎改进了BinProlog架构,通过使用Interactor接口使其通用。概述了他们的应用程序,重点是在源代码级别表达各种Prolog内置和扩展的能力,涵盖了这些新的发展。
2011-02-06 cs.PL
Lightweight compilation of (C)LP to JavaScript
我们提出并评估了一个编译器从Prolog(和扩展)到JavaScript,这使得它可以使用(约束)逻辑编程来开发Web应用程序的客户端,同时符合当前的行业标准。以JavaScript为目标使得(C)LP程序可在几乎每一个现代计算设备中执行,而从用户的角度来看没有额外的软件要求。反过来,使用非常高级的高级语言有助于开发高质量的复杂软件。该编译器是Ciao系统的后端,支持Ciao系统的大部分功能,包括其模块系统和基于包的丰富语言扩展机制。我们提出了一个编译过程的概述和运行时系统的详细描述,包括模块化编译成单独的JavaScript代码的支持。我们证明了编译器的成熟度,通过测试它与复杂的代码,如CLP(FD)库写在Prolog与属性变量。最后,我们通过测量运行在主要JavaScript引擎上的一些LP和CLP(FD)基准测试的性能来验证我们的建议。
2012-10-10 cs.PL
Repositioning Tiered HotSpot Execution Performance Relative to the Interpreter
本文使用 Renaissance Benchmark Suite 在现代多核与并发并行负载下比较 JVM 解释执行与分层 HotSpot 执行,量化 JRE、GCC 和垃圾收集器等因素影响,发现分层执行平均快约 15 倍。
2023-04-26 cs.PF cs.PL
Beyond Good and Evil: Formalizing the Security Guarantees of Compartmentalizing Compilation
划分是一种很好的安全工程实践。通过将一个大型软件系统分解为相互不信任的组件,这些组件以最小的权限运行,限制它们的交互以符合定义良好的接口,我们可以限制低级攻击(如控制流劫持)造成的损害。当用于防御此类攻击时,划分通常由编译器和低级划分机制协作实现。然而,令人惊讶的是,对这种划分汇编所提供的正式保证很少进行调查。我们提出了一个新的安全属性,安全划分编译(SCC),正式特征划分编译提供的保证,并澄清其攻击者模型。我们重建我们的财产从完善的概念完全抽象编译,然后确定和解除三个重要的限制,使标准的完全抽象不适合划分。连接到充分的抽象,使我们能够证明SCC适应既定的证明技术,我们说明了这一点与编译器从一个简单的不安全的命令式语言的程序划分的抽象机。
2017-04-15 cs.CR cs.PL
TPDE: A Fast Adaptable Compiler Back-End Framework
本文提出编译器后端框架TPDE,通过适应现有SSA形式代码表示并结合单遍编译,在保持运行性能的同时大幅提升编译速度,显著降低JIT编译延迟。
2025-05-28 cs.PL
Pydrofoil: accelerating Sail-based instruction set simulators
提出多阶段编译器Pydrofoil,结合AOT编译与基于PyPy的追踪JIT及领域特定优化,从Sail规范生成指令集模拟器,比Sail生成的C模拟器提速超230倍。
2025-03-06 cs.PL
SECOMP: Formally Secure Compilation of Compartmentalized C Programs
本文提出SECOMP编译器,首次为主流语言C证明类似完全抽象的安全编译准则,将未定义行为限制在遭攻陷的分区内,并通过扩展CompCert及证明工程创新实现形式化安全编译。
2025-01-01 cs.CR cs.PL
Memory Safety Preservation for WebAssembly
WebAssembly(Wasm)是下一代可移植编译目标,用于在Web上部署用高级语言编写的应用程序。为了保护其内存免受不可信代码的攻击,Web浏览器引擎将编译后的Wasm程序的执行限制在内存安全的沙箱中。不幸的是,传统的内存安全漏洞(例如,缓冲区溢出和释放后使用)仍然可以破坏沙箱内的内存,并允许Wasm代码进行严重的攻击。为了防止这些攻击,我们研究了一类安全的编译器,消除(不同种类的)内存安全违规。遵循严格的方法,我们讨论内存安全的超安全属性,这让我们确定合适的安全编译标准,内存安全保护编译器。我们推测,除了在模块边界的一些限制,现有的安全机制的WASM可能足以执行内存安全保护,在短期内。从长远来看,我们观察到,在Wasm的内存安全变体的设计中提出的某些功能可以允许编译器解除这些限制,并实施宽松形式的内存安全。
2019-10-21 cs.PL
Flexible Non-intrusive Dynamic Instrumentation for WebAssembly
本文在Wizard研究引擎中实现了首个WebAssembly非侵入式动态插桩系统,通过字节码级探针支持灵活分析,并优化了性能开销,适合生产环境采用。
2024-03-12 cs.PL
COGENT: Certified Compilation for a Functional Systems Language
我们提出了一个自证明编译器的COGENT系统语言。COGENT是一种受限制的、多态的、高阶的、纯函数式的语言,具有线性类型,不需要可信的运行时或垃圾收集器。它编译成高效的C代码,旨在与现有的C函数互操作。该语言适用于具有最小共享的分层系统代码,例如文件系统或网络协议控制代码。对于类型良好的COGENT程序,编译器生成C代码,在Isabelle/HOL中对其语义进行高级浅嵌入,并证明C代码正确实现了此嵌入。其目的是让证明工程师能够高效地、均衡地推理真实世界系统代码的全部语义,同时保持C语言的互操作性和简洁性。我们描述了编译器的形式化验证阶段,其中包括自动化的形式化细化演算,从命令式更新语义到函数值语义的切换,以及一些标准的编译器阶段,如类型检查和单态化。编译器证书是一系列语言级的Meta证明和每个程序的翻译验证阶段,在Isabelle/HOL中组合成一个连贯的顶级定理。
2016-01-21 cs.LO cs.PL
FEAST: An Automated Feature Selection Framework for Compilation Tasks
University of Michigan(密歇根大学);IBM T. J. Watson Research Center(IBM T. J. Watson研究中心);Adobe Systems(Adobe系统公司)
将机器学习技术应用于编译任务的成功在很大程度上归功于程序表征的最新发展和进步,程序表征是一种在数字上或结构上量化目标程序的过程。虽然已经取得了很大的成就,在确定的关键功能,以表征程序,选择一个正确的一组功能,为特定的编译器任务仍然是一个特设的过程。为了保证功能的全面覆盖,编译工程师通常需要选择过多的功能。不幸的是,这可能会导致选择多个类似的功能,这反过来又会产生一个新的偏差问题,强调程序特性的某些方面,从而降低目标编译器任务的准确性和性能。在本文中,我们提出了特征选择编译任务(FEAST),一个有效的和自动化的框架,用于确定最相关的和代表性的功能,从功能池。具体而言,FEAST利用广泛使用的统计和机器学习工具,包括LASSO,顺序向前和向后选择,用于自动特征选择,并且通常可以应用于任何数值特征集。本文进一步提出了一种自动化的方法来评估FEAST的性能编译器参数分配。密集的实验结果表明,编译器参数分配任务下,FEAST可以实现可比的结果与约18%的功能,自动选择从整个功能池。我们还检查这些选定的功能,并讨论它们在程序执行中的作用。
2016-10-29 cs.LG cs.PL cs.SE
Lost in translation: Exposing hidden compiler optimization opportunities
现有的迭代编译和基于机器学习的优化技术已经被证明在实现比编译器的标准优化级别更好的优化方面非常成功。但是,它们并没有被设计为支持将编译器优化器的调优作为编译器日常开发周期的一部分。在本文中,我们首先建立所需的性能,一种技术必须表现出这样的调整。然后,我们介绍了一个增强的经典的夜间例行测试的编译器表现出所有必需的属性,因此,能够驱动编译器的共同优化器的改进和调整。这是通过利用收集的资源使用和编译信息来实现的,同时系统地利用在标准优化级别应用的转换的前缀。使用LLVM v6.0.1编译器进行的实验评估表明,新方法能够揭示两种流行处理器上隐藏的跨架构和依赖于架构的潜在优化:Intel i5- 6300 U和Raspberry Pi 3B+中使用的基于Arm Cortex-A53的Broadcom BCM 2837。作为一个案例研究,我们展示了如何从我们的方法的见解,使我们能够识别和删除一个显着的缺点的CFG简化通过LLVM v6.0.1编译器。
2020-07-07 cs.PL
Secure Optimization Through Opaque Observations
安全应用程序实现软件保护,以防止侧信道和物理攻击。这种保护在机器码或微体系结构级别上是有意义的,但是它们通常在源代码级别上不携带可观察的语义。为了防止优化编译器改变保护,安全工程师将输入/输出副作用嵌入到保护中。这些副作用是容易出错的,并且依赖于编译器,当前的实践涉及分析生成的机器码,以确保安全或隐私属性仍然被强制执行。Vu等人最近演示了如何在编译器中自动插入volatile副作用[52],但这些在细粒度保护(如控制流完整性)中可能过于昂贵。我们介绍了正确执行安全保护所固有的程序状态观察,以及在编译流程中指定和保留观察的方法。这些观察补充了传统的编译器输入/输出保存合同。我们将展示如何在不修改编译过程的情况下保证它们的保存,并尽可能减少对性能的影响。我们验证了我们的方法在一系列的基准测试,表示这些应用程序的安全编译在特定的程序点进行观察。
2021-01-15 cs.CR cs.PL
Augmenting Decompiler Output with Learned Variable Names and Types
反编译器是安全专业人员用于对在野外发现的二进制文件进行逆向工程的一个常用工具。反编译器尝试反向编译,将二进制文件转换为更高级的语言,如C。高级语言通过提供有用的抽象(如循环、类型化变量和注释)来简化对程序的推理,但这些抽象在编译过程中会丢失。反编译器能够确定性地重构代码的结构属性,但是注释、变量名和自定义变量类型在技术上是不可能恢复的。在本文中,我们提出了DIRTY(DecompIled variable ReTYper),一种新的技术,用于提高反编译器输出的质量,自动生成有意义的变量名称和类型。对从GitHub挖掘的C代码的新数据集的实证评估表明,DIRTY的性能远远优于以前的工作方法,66.4%的时间恢复了开发人员编写的原始名称,75.8%的时间恢复了原始类型。
2021-08-13 cs.PL cs.SE
The Program Hypergraph: Multi-Way Relational Structure for Geometric Algebra, Spatial Compute, and Physics-Aware Compilation
Braidpoint
提出程序超图(PHG)作为程序语义图的泛化,通过超边表示多重关系,解决空间数据流架构中的瓦片共置与路由约束以及几何代数计算中的分级多重积问题,实现几何正确性、内存布局、数值精度和硬件划分的联合推导。
2026-10-09 cs.AR cs.PL
LF-PPL: A Low-Level First Order Probabilistic Programming Language for Non-Differentiable Models
University of Oxford(牛津大学);University of Cambridge(剑桥大学);KAIST(韩国科学技术院);University of British Columbia(英属哥伦比亚大学)
我们开发了一种新的低层次,一阶概率程序设计语言(LF-PPL)适合包含连续,离散和/或分段连续变量的混合模型。这种语言及其编译方案的关键成功在于它能够自动区分密度函数不连续的参数,同时进一步提供边界交叉的运行时检查。这使得能够引入能够利用梯度信息的新的推理引擎,同时对于并非处处可微的模型保持高效。我们证明了这种能力,通过将一个不连续的哈密顿蒙特卡罗(DHMC)推理引擎,能够提供自动化和有效的推理不可微的模型。我们的系统由数学形式主义支持,确保用这种语言表达的任何模型都具有测量零不连续性的密度,以保持推理引擎的有效性。
2019-03-06 cs.LG cs.PL stat.ML
PHOENIX: Pauli-Based High-Level Optimization Engine for Instruction Execution on NISQ Devices
The Hong Kong University of Science and Technology(香港科技大学);Tsinghua University(清华大学);The Hong Kong University of Science and Technology (Guangzhou)(香港科技大学(广州))
PHOENIX是一种高效的编译框架,通过高阶泡利中间表示优化通用哈密顿模拟程序,实验表明其在不同程序类别、后端ISA和硬件拓扑中均优于现有VQA编译器。
2025-07-13 cs.AR cs.PL quant-ph