Functional Logic Program Transformations
Institut für Informatik, Kiel University(基尔大学);University of Portland(波特兰大学)
本文探讨了函数逻辑编程在实现程序变换中的优势,通过非确定性操作与确定性方法的对比,评估了Curry语言及其中间表示FlatCurry的性能。
2026-01-19 cs.PL
Static Factorisation of Probabilistic Programs With User-Labelled Sample Statements and While Loops
TU Wien(维也纳工业大学)
研究具有用户标记样本语句和while循环的概率程序的图形表示,扩展操作语义并定义静态分析获得程序密度静态分解,开发程序切片技术实现三种优化,优化被证明正确且性能良好。
2026-07-28 cs.PL
A Theory of Changes for Higher-Order Languages - Incrementalizing λ-Calculi by Static Differentiation
如果一个昂贵的计算的结果被输入的一个小变化所无效,旧的结果应该被增量地更新,而不是重新执行整个计算。我们通过它们的衍生物来增加程序。派生程序将程序输入的变化直接映射到程序输出的变化,而不需要重新执行原始程序。我们提出了一个程序转换程序的衍生物,这是完全静态和自动的,支持一流的功能,并产生衍生物服从标准优化。我们证明了在Agda中对于一族简单类型的λ演算的程序转换是正确的,这些演算由基类型和原语参数化。一个精确的接口指定了增量化所选原语所需的内容。我们调查性能的案例研究:我们在Scala实现的程序转换,一个插件,并提高性能的一个重要的程序的数量级。
2013-12-02 cs.PL
Static analysis of energy consumption for LLVM IR programs
能量模型可以通过表征执行处理器的指令集中的每个指令所消耗的能量来构建。这可以用来确定执行一系列汇编指令需要多少能量,而不需要仪器或测量硬件。然而,静态分析低层次的程序结构是困难的,和高层次的程序结构和低层次的能量模型之间的差距需要弥合。我们已经开发出了对程序的中间编译器表示进行静态分析的技术。具体来说,我们的目标是LLVM IR,这是现代编译器(包括Clang)使用的一种表示。使用这些技术,我们可以自动推断出在不同平台下使用不同编译器运行函数时所消耗的能量估计。这样做的挑战之一是确定执行LLVM IR程序段的能量成本,为此我们开发了两种不同的方法。当这些信息与我们的分析结合使用时,我们能够推断出表征特定程序的能量消耗的能量公式。这种方法可以应用于任何面向LLVM工具链的语言,包括C和XC或ARM Cortex-M或XMOS xCORE等架构,重点是嵌入式平台。通过比较静态分析结果与硬件的物理测量结果,在这些平台上验证了我们的技术。静态能耗估计支持节能软件开发,而无需硬件知识。
2015-07-16 cs.PL
Sawja: Static Analysis Workshop for Java
静态分析是一种强大的程序自动验证技术,但在为Java等现实语言开发全面的分析器时,它会带来重大的工程挑战。本文介绍了Sawja库:一个完全兼容Java 6的静态分析框架,它提供了OCaml模块,用于有效地操作Java字节码程序。我们提出的库的主要特点,包括(一)高效的功能数据结构表示程序与隐式共享和懒惰的解析,(二)一个中间的无栈表示,(三)快速计算和操纵完整的程序。
2010-07-20 cs.PL
Deterministic Parallel Fixpoint Computation
抽象解释是表示静态程序分析的一般框架。它减少了提取程序属性的问题,计算方程组的最小不动点的近似。计算该近似值的实际方法使用基于弱拓扑序(WTO)的顺序算法。通过引入弱偏序的概念,提出了一种确定性的不动点并行算法。我们提出了一个算法,用于构建一个WPO在几乎线性的时间。最后,我们描述了PIKOS,我们的确定性并行抽象解释器,它扩展了顺序抽象解释器IKOS。我们评估的性能和可扩展性的PIKOS上的一套1017 C程序。当使用4个核心时,PIKOS实现了IKOS的2.06倍的平均加速比,最大加速比为3.63倍。当使用16核时,PIKOS实现了10.97倍的最大加速比。
2019-12-05 cs.PL
Chain Programs for Writing Deterministic Metainterpreters
在逻辑编程文献中发现的许多元解释器在程序子句的选择不确定的意义上是不确定的。例子是熟悉的“演示”和“香草”元解释器。对于某些应用,这种非确定性是方便的。然而,在某些情况下,需要一个具有显式子句选择的确定性元解释器。这种情况包括(1)或并行转换为“提交选择”处理器的与并行,(2)基于逻辑的,命令语言实现的搜索策略,和(3)模拟有限资源推理。确定性元解释器很难编写,因为程序员必须关注派生树中节点的子节点的统一器集。我们认为,这是可能的和有利的编写这些元解释器的推理转换成一个语法限制的形式,我们称之为“链”的形式,在这里我们可以忘记统一,除了单位子句的目标程序。我们给出了两个转换逻辑程序成链的形式,一个为“moded”程序(隐含在两个现有的穷举遍历方法提交选择执行),和任意确定的程序。作为我们的方法的说明,我们展示了上述三个应用程序的例子。
2001-04-02 cs.LO cs.PL
On the Value and Limits of Multi-level Energy Consumption Static Analysis for Deeply Embedded Single and Multi-threaded Programs
降低计算能耗的兴趣越来越大。能量透明是一个概念,它使程序的能量消耗从软件到硬件通过不同的系统层可见。这样的透明性可以在每一层和层之间实现能量优化,并且帮助程序员和操作系统两者做出能量感知决策。提取程序能耗的常用方法是直接测量目标硬件。这通常涉及大多数程序员不具备的专业设备和知识。在本文中,我们将研究如何利用现有的静态资源分析和能源建模方法来执行能源消耗静态分析(ECSA)的深度嵌入式程序。为了研究这一点,我们已经开发了ECSA技术,工作在指令集的水平和更高的水平,LLVM IR,通过一种新的映射技术。我们将ECSA应用于一组全面的主要工业基准测试,包括来自两种常用并发模式(任务农场和管道)的单线程和多线程嵌入式程序。我们比较我们的ECSA结果的硬件测量和预测的基础上获得的模拟痕迹。我们讨论了一些应用场景,ECSA的结果可以提供能源透明度,并得出结论,为今后的工作提出了一系列新的研究问题。
2015-10-24 cs.PL
A Thread-Local Semantics and Efficient Static Analyses for Race Free Programs
无数据竞争程序是一类重要的并发程序。在本文中,我们提供了一个框架,设计和证明的正确性数据流分析,针对这一类的程序。这些分析与早期文献中提出的“同步-CFG”分析具有相同的精神。为了实现这一点,我们首先提出了一种新的具体语义DRF程序,称为L-DRF,这是线程本地的性质-每个线程操作自己的副本的数据状态。我们表明,我们的语义抽象,使我们能够减少DRF程序的分析,顺序分析。这有助于将现有的顺序分析快速移植到DRF程序的合理和可扩展的分析中。接下来,我们将L-DRF参数化,将程序变量划分为原子访问的“区域”。区域参数化语义的抽象产生更精确的分析“区域种族”自由并发程序。我们实例化这些抽象设计高效的关系分析种族自由的程序,我们已经实现了一个原型工具,称为RATCOP。在基准测试中,RATCOP能够证明高达65%的断言,相比之下,我们的基线证明了25%。此外,在与最近的并发静态分析器的比较研究中,RATCOP快了5个数量级。
2020-09-06 cs.PL
Understanding Lua's Garbage Collection -- Towards a Formalized Static Analyzer
我们为Lua程序设计语言提供了垃圾回收(GC)的语义。有趣的是包含了终结器(类似于面向对象语言中的析构函数)和弱表(弱引用的一种特殊实现)。该模型表达了与GC相关的几个方面,这些方面在Lua的文档中没有涉及,但却影响了程序的可观察行为。我们的模型是机械化的,可以用真实的程序进行测试。我们的长期目标是提供一个正式的Lua程序静态分析器来检测潜在的危险。作为第一步,我们提供了一个原型工具LuaSafe,它可以对程序进行类型转换,以确保它们的行为不受GC的影响。我们的GC模型在实践中通过实验与其机械化进行了验证,并在理论上证明了几个健全的性质。
2020-05-26 cs.PL
Parameterized Verification of Deterministic MPI Programs
University of Delaware(特拉华大学)
研究确定性MPI程序验证问题,通过用户提供特定函数将程序转换为参数化顺序程序,利用Frama-C/Wp扩展实现该验证方法。
2026-07-21 cs.LO cs.PL
An Approach to Static Performance Guarantees for Programs with Run-time Checks
检测程序以执行对属性(例如规则形状)的运行时间检查是帮助程序员检测不正确的程序行为的常见且有用的技术。这在动态语言如Prolog中尤其如此。然而,这种运行时间检查不可避免地引入运行时间开销(在执行时间、存储器、能量等方面)。已经提出了几种方法来减少这种开销,例如消除可以静态地证明总是成功的检查,和/或优化执行(剩余)检查的方式。然而,存在不可能静态地移除所有检查的情况(例如,必须检查其接口、复杂属性、未知代码等的开放库)并且其中即使在优化之后,这些剩余的检查仍然可能引入不可接受的开销水平。因此,对于程序员来说,重要的是能够确定由于运行时间检查而产生的额外成本,并将其与某些可接受成本的概念进行比较。用于估计运行时间检查开销的常见做法是分析,它本质上并不详尽。相反,我们提出了一种方法,使用静态分析来估计这样的开销,其优点是估计是由输入数据大小参数化的函数。与分析不同,这种方法可以为所有可能的执行跟踪提供保证,并允许评估开销如何随着输入大小的增长而增长。我们的方法还扩展了现有的断言验证框架,以表达“可接受的”开销,并静态和自动检查是否符合这些规范的仪表程序。最后,我们提出了我们的方法,表明我们的方法是可行的,有前途的实验评估。
2018-04-06 cs.PL
Naturalistic Static Program Analysis
静态程序分析开发是一项重要且耗时的任务。我们提出了一个框架,通过它开发人员可以定义静态程序分析在自然语言。我们展示了这个框架的应用程序,以确定密码学在Java程序中的误用,我们讨论了它如何促进静态程序分析开发人员。
2023-01-12 cs.CR cs.PL cs.SE
A Survey on Parallelism and Determinism
表演往往需要表演主义。在这些情况下,过度的非确定性是有害的,因为它意味着程序可以有几个不同的行为,甚至不同的结果。即使在诸如并行性对性能至关重要的高性能计算等领域,计算值也应该是确定性的。不幸的是,程序中的非确定性也允许动态调度任务,对成功的第一个任务做出反应,取消不能导致结果的任务等。在实践中,为了控制程序的哪些部分是确定性的,通常需要限制非确定性并精确地识别非确定性的来源。本文从程序设计语言的角度出发,研究了程序设计模型如何保证并行程序的确定性。本综述不仅研究确定性语言,还研究防止一个特别苛刻的非确定性来源的编程模型:数据竞争。我们的目标是比较现有的解决方案,以下列问题:如何程序设计语言可以帮助程序员编写程序,在一个并行的方式运行,没有明显的非确定性?什么样的编程范式确保了这种属性?我们研究这些问题,并讨论不同方法的优点和局限性。
2022-10-27 cs.PL
Stratified Static Analysis Based on Variable Dependencies
在通过抽象解释的静态分析中,人们经常使用加宽算子来强制在有限时间内收敛到归纳不变量。某些加宽算子,包括有限多面体上的经典加宽算子,表现出一种不直观的行为:在其变量的子集上分析程序可能会导致比分析原始程序更精确的结果!在本文中,我们为这种行为提供了简单的解决方法。
2011-09-12 cs.PL
Efficient Deterministic Replay Using Complete Race Detection
数据竞争会严重影响多线程程序的执行。因此,必须重现数据竞争的结果,以确定性地重放多线程程序。然而,数据竞争隐藏在程序中大量的内存操作中。由于难以准确识别数据竞争,以往的多线程确定性记录/重放方案都放弃了直接记录数据竞争。因此,它们要么记录所有共享内存操作,这会显著降低生产运行速度,要么只记录同步操作,这会导致大量的重播工作。受数据竞争检测的启发,我们提出了一个高效的软件确定性重放方案的商品多处理器系统,这是命名为RacX。RacX的关键见解如下:虽然准确识别一对内存操作之间的数据竞争存在NP-困难,但我们可以找出多线程程序中所有潜在的数据竞争,其中误报可以通过我们的自动误报减少技术减少到很小的数量。因此,RacX可以有效地监控所有潜在的数据竞争,以确定性地重放多线程程序。为了评估RacX,我们已经进行了一些著名的多线程程序从SPLASH-2基准套件和大型商业程序的实验。RacX可以精确地重现这些程序的生产运行,具有价值决定论。平均而言,RacX在记录过程中仅导致原始运行速度降低约1.21%、1.89%、2.20%和8.41%(分别针对2、4、8和16线程程序)。RacX的可靠性、高效性、可扩展性和可移植性很好地证明了它的优越性。
2011-07-12 cs.OS cs.PL
Optimizing and Evaluating Transient Gradual Typing
渐进类型使程序员能够在同一语言中组合静态和动态类型。然而,确保静态和动态部分之间的良好交互可能会导致显著的运行时成本。在本文中,我们对在Reticulated Python(Python的一个渐进类型变体)中实现的瞬态渐进类型化方法进行了详细的性能分析。瞬态方法在整个程序中插入轻量级检查,而不是在高阶值上安装代理。我们表明,当在CPython上运行Reticulated Python和瞬态方法时,随着程序从动态类型发展到静态类型,性能会下降,与等效的Python程序相比,速度会降低6倍。为了减少这种开销,我们设计了一个静态分析和优化,删除冗余的运行时检查。优化采用静态类型推断算法,解决了传统的子类型约束,也是一种新的检查约束。我们评估所产生的性能,并发现,对于许多程序,部分类型化的程序的效率是接近他们的非类型化的同行,消除了大部分的瞬态检查的减速。最后,我们测量了网格化Python程序在PyPy(一种跟踪JIT)上运行时的效率。我们发现,将PyPy与我们的类型推断算法相结合,可以将总体开销降低到零。
2019-02-20 cs.PL
Dynamic Witnesses for Static Type Errors (or, Ill-Typed Programs Usually Go Wrong)
静态类型错误是类型化函数式语言新手的常见绊脚石。我们提出了一个动态的方法来解释类型错误,通过生成反例证人输入,说明了一个病态的程序出错。首先,给定一个病态类型的函数,我们象征性地执行主体来合成使程序出错的见证值。我们证明,我们的程序合成一般的证人,如果一个证人被发现,那么对于所有居住的输入类型,存在的值,可以使功能出错。其次,我们将展示如何扩展此过程,以产生一个约简图,可用于交互式可视化和调试见证执行。第三,我们评估了我们的方法在两个数据集上的覆盖率,这两个数据集包括4,500多个不良类型的学生项目。我们的技术能够为大约85%的程序生成证人,我们的约简图为超过80%的证人生成小反例,并且一个简单的启发式算法允许我们使用证人以大约70%的准确率找到类型错误的来源。最后,我们评估我们的证人是否帮助学生理解和修复类型错误,并发现与我们的证人提出的学生显示出更大的理解类型错误比那些提出了一个标准的错误信息。
2018-03-18 cs.PL
Static Analysis for Probabilistic Programs
概率编程是统计机器学习的一个强大的抽象。将静态分析方法应用于概率程序,可以优化学习过程,自动验证模型的性质,改善用户编程界面。这个领域的静态分析的概率规划(SAPP)是年轻的和无组织的,由一个星座的技术与各种目标和限制。这项工作的主要目的是在一个组织结构和背景下综合SAPP领域的主要贡献。我们提供了技术背景的静态分析和概率编程,建议概率程序设计语言的功能分类法,并分析在SAPP领域的主要思想的适用性。我们的结论是,虽然目前的概率程序的静态分析技术有实际的局限性,有一些未来的方向具有很大的潜力,以改善统计机器学习的状态。
2019-09-10 cs.LG cs.PL stat.ML
Static Contract Simplification
契约和契约监视是指定属性并在运行时间保证它们的强大机制。然而,契约的运行时间监视强加了显著的开销。执行时间受到插入合约检查以及引入代理对象(按需执行延迟合约检查)的影响。静态契约简化使用程序转换来解决这个问题。它将编译时转换应用于具有契约的程序,以减少总体运行时间,同时保留原始行为。我们的关键技术是通过程序静态传播合同,并在可能的情况下评估和合并合同。我们的目标是获得剩余的契约,这些契约在运行时间检查起来更便宜。我们区分不同层次的行为保护,这对可接受的转换施加了不同的限制:强责任保护,转换是一个行为等价,和弱责任保护,转换后的程序相当于特定的违规报告。我们的转换从未增加合同检查的总数。
2017-03-30 cs.PL
Towards a General Framework for Static Cost Analysis of Parallel Logic Programs
资源使用的估计和控制现在是越来越多的计算系统中的重要挑战。特别地,在诸如物联网、云计算、健康、运输和机器人的各种各样的应用中出现对定时和能量的要求。与此同时,并行计算,特别是(异构)多核平台,已经成为计算机体系结构中的主导范例。预测这些平台上的资源使用情况是一项艰巨的挑战。静态资源分析的大部分工作都集中在顺序程序上,而在并行程序的分析上,或者更具体地说,在并行逻辑程序上,取得的进展相对较少。我们提出了一种新的,通用的,灵活的框架,建立成本方程/关系,可以实例化的并行逻辑程序的资源使用分析的广泛的资源,平台和执行模型。分析估计上下限的资源使用的并行程序(不执行它)作为输入数据大小的函数。此外,它还推断出其他有意义的信息,以更好地利用和评估系统的潜在和实际并行性。我们开发了一种方法,用于解决成本关系,涉及最大函数,在并行程序的分析中出现。最后,我们实例化我们的一般框架分析的逻辑程序与独立的和-独立主义,报告内的CiaoPP系统的实现,并提供一些实验结果。据我们所知,这是并行逻辑程序成本分析的第一种方法。
2019-07-31 cs.PL
A family of abstract interpretations for static analysis of concurrent higher-order programs
我们开发了一个框架,计算两个基本的分析并发高阶程序:(控制)流分析(CFA)和可能发生的并行分析(MHP)。我们特别关注的独特挑战所带来的不受限制的混合一流的延续和动态生成的线程。为了设置阶段,我们制定了一个具体的模型并发高阶程序:P(CEK*)S机。我们发现,这台机器的系统抽象的解释是能够计算流量和MHP分析。然而,仔细检查发现,MHP的精度很差。作为一种补救措施,我们采用了形状分析技术单例抽象动态产生的线程(而不是堆中的对象)。然后,我们表明,如果MHP分析是不感兴趣的,我们可以大大加快计算流分析单独崩溃线程交织与第二层的抽象。
2011-06-14 cs.PL
Statically Bounded-Memory Delayed Sampling for Probabilistic Streams
概率程序设计语言帮助开发人员执行贝叶斯推理。这些语言为概率建模和自动推理提供了编程结构和工具。先前的工作引入了概率程序设计语言ProbZelus,以将概率编程功能扩展到无界数据流。这项工作表明,延迟采样推理算法可以扩展到工作在流上下文中。ProbZelus表明,虽然延迟采样可以有效地部署在某些程序上,但取决于所考虑的概率模型,延迟采样不能保证在程序执行过程中使用有限的内存量。在本文中,我们提出的条件下,延迟采样将在有限的内存中执行的概率程序的执行。这两个条件是延迟采样核心运算的两个基本性质:$m$消耗性质和不可分离路径性质。当且仅当一个程序满足$m$消耗和不可分离路径属性时,它才在延迟采样下在有界内存中执行。我们提出了一个静态分析,抽象这些属性,以健全地确保任何程序,通过分析满足这些属性,从而在有限的内存下执行延迟采样。
2021-12-13 cs.PL
From Single-thread to Multithreaded: An Efficient Static Analysis Algorithm
现在已经开发了各种各样的计算单线程程序安全性的静态分析。本文提出了一个系统的方法来扩展一类这样的静态分析,使他们处理程序与多个POSIX风格的线程。从语用操作语义学出发,我们建立了一个指称语义,表示推理的一个假设保证。最后的算法,然后通过抽象的解释。它依次分析每个线程,传播线程之间的干扰以及其他语义信息。组合爆炸,随之而来的明确考虑的所有交织,从而避免。与单线程情况相比,最坏情况的复杂度仅增加了n倍,其中n是程序中的指令数。我们已经实现了原型工具,证明了该方法的实用性。
2009-10-30 cs.PL
Deterministic Fully-Static Whole-Binary Translation without Heuristics
University of California, Irvine(加州大学尔湾分校)
Elevator是首个无需调试信息、源代码或代码布局假设的x86-64完整二进制翻译器,通过静态翻译生成自包含二进制,提升可靠性与实用性。
2026-05-13 cs.CR cs.PL
QChecker: Detecting Bugs in Quantum Programs via Static Analysis
本文提出了一种名为QChecker的静态分析工具,通过基于AST提取程序信息和基于模式检测错误的两个模块,有效检测Qiskit量子程序中的错误。
2023-04-10 cs.PL cs.SE
Towards Execution Time Estimation for Logic Programs via Static Analysis and Profiling
已经提出了有效的静态分析,其推断分辨率或缩减的数量的界限。这些具有独立于执行程序的平台的优点,并且已经被证明在许多应用中是有用的,例如并行执行中的粒度控制。另一方面,在具有不同功能的平台发挥作用的分布式计算场景中,有必要在包括平台特征的度量中表达成本。特别是,能够推断实际执行时间的上限和下限特别有趣。考虑到这一目标,我们提出了一种方法,它结合了编译时分析的成本界限与一次性的分析平台,以确定某些参数的值为一个给定的平台。这些参数校准成本模型,从那时起,该成本模型能够静态地计算过程的时间约束函数,并且能够以显著的准确度预测给定平台中的这些过程的执行时间。该方法已在CiaoPP系统中实现并集成。
2007-01-17 cs.PL
Synthesizing Imperative Programs from Examples Guided by Static Analysis
Korea University(高丽大学)
我们提出了一种新的算法,综合了必要的程序介绍编程课程。给定一组输入输出示例和一个部分程序,我们的算法生成与每个示例一致的完整程序。我们的主要思想是结合枚举程序合成和静态分析,积极修剪出一个大的搜索空间,同时保证找到,如果有的话,一个正确的解决方案。我们已经实现了我们的算法在一个工具,称为SIMPL,并评估它的30个问题中使用的入门编程课程。结果表明,SIMPL能够在平均6.6秒内解决基准问题。
2017-06-13 cs.AI cs.PL
Static Race Detection and Mutex Safety and Liveness for Go Programs (extended version)
Go是一种流行的并发程序设计语言,这要归功于它能够有效地结合并发和系统编程。在Go程序中,许多并发错误可能是由数据竞争和通信问题引起的。在本文中,我们开发了一种基于行为类型的理论来静态检测Go程序中的数据竞争和死锁。我们首先使用Go内存模型中定义的happens-before关系,在Go程序模型上指定锁安全性、活动性和数据竞争属性。我们表示这些属性的程序中的$μ$演算模型的类型,并验证它们使用类型级别的模型检查。然后,我们扩展了框架,以考虑Go的通道,并实现了一个静态验证工具,可以检测并发错误。据我们所知,这是Go语言的第一个此类静态验证框架,统一分析了由共享内存访问和异步消息传递通信混合引起的并发错误。
2021-11-18 cs.LO cs.PL
A Case for Dynamic Reverse-code Generation to Debug Non-deterministic Programs
回溯(即,反向执行)帮助调试器的用户沿着程序的执行路径自然地向后思考,并且向后思考使得定位错误的起源变得容易。到目前为止,回溯主要通过状态保存或检查点来实现。然而,这些实施方式固有地不缩放。与此同时,一种基于反向代码生成的回溯方法似乎很有前途,因为执行反向代码可以在不保存状态的情况下恢复程序的先前状态。在文献中,可以找到生成反向代码的两种方法:(a)静态反向-代码生成,其在开始调试会话之前通过静态分析来预生成反向代码,以及(b)动态反向-代码生成,其通过在调试会话期间即时应用动态分析来生成反向代码。特别是,我们在以前的工作中支持后者,以适应程序的非确定性,例如,多线程。为了证明我们的动态反向代码生成的有用性,本文提出了一个案例研究的各种回溯方法,包括我们的。我们比较了内存使用的各种回溯方法在一个简单但不平凡的例子,一个有界缓冲区的程序。在这种情况下,非确定性的程序,如有界缓冲区的程序,我们的动态反向代码生成优于现有的回溯方法的内存效率。
2013-09-20 cs.PL cs.SE
Closing the Gap -- Formally Verifying Dynamically Typed Programs like Statically Typed Ones Using Hoare Logic -- Extended Version --
动态类型的面向对象语言使程序员能够编写优雅的、可重用的和可扩展的程序。然而,在当前的程序验证方法中,静态类型信息的缺失造成了显著的开销。我们的建议有两个方面:首先,我们提出了一个抽象层隐藏的复杂性动态类型时,提供了足够的类型信息。由于这本质上造成了验证静态类型程序的错觉,因此所需的工作量与静态类型的情况相当。其次,我们展示了如何所需的类型信息可以有效地获得所有类型安全的程序集成到霍尔逻辑的类型推断算法,产生一个半自动的过程,让用户专注于那些真正需要他的注意力的打字问题。虽然应用类型推断的动态类型的程序是一个行之有效的方法,现在,我们的方法补充了传统的软类型系统,除了修改程序(静态类型)和接受存在的运行时类型错误(动态类型)提供正式的证明作为第三种选择。
2015-01-12 cs.LO cs.PL cs.SE
Static Analysis of Lockless Microcontroller C Programs
在不加锁的情况下并发访问共享数据通常会受到竞争条件的影响,从而导致数据不一致或损坏。然而,有些程序通过利用特定硬件上某些操作的原子性,在没有锁定的情况下正确运行。在本文中,我们描述了如何精确地分析无锁微控制器C程序中断考虑到硬件架构。我们评估这种技术在一个基于八边形的值范围分析使用基于访问的本地化,以提高效率。
2012-11-27 cs.AR cs.PL
Polynomial Invariant Generation for Non-deterministic Recursive Programs
我们考虑经典的问题,不变量生成的程序与多项式分配,并专注于合成不变量,是一个严格的多项式不等式的连接。我们提出了一个健全的和半完全的方法的基础上positivstellensaetze,即定理,在半代数几何的特点,正多项式在一个半代数集。据我们所知,这是第一个不变量生成方法,提供完整性保证的不变量组成的多项式不等式。此外,在理论方面,我们的方法的最坏情况的复杂性是次指数,而以前已知的完整的方法(Colon等,CAV 2003),它只能处理线性不变量的最坏情况的复杂性是指数。在实践方面,我们减少了不变量生成问题的二次规划(QCLP),这是一个经典的优化问题,许多工业求解器。最后,我们证明了我们的方法的适用性,通过提供实验结果在几个学术基准。
2020-04-06 cs.LO cs.PL
Jolie Static Type Checker: a prototype
程序源代码正确性的静态验证是软件可靠性的重要内容。软件程序的形式化验证涉及证明程序满足其行为的形式化规范。许多语言同时使用静态和动态类型检查。使用这种方法,静态类型检查器在编译时验证所有可能的内容,并动态检查其余内容。Jolie程序设计语言的当前状态包括动态类型系统。因此,它允许可避免的运行时错误。该语言的静态类型系统已经在纸上正式定义,但还缺乏实现。在本文中,我们描述了一个原型的Jolie静态类型并行计算器(JSTC),它采用了基于SMT求解器的技术。我们描述了背后的理论和实现,以及静态分析的过程。
2017-10-18 cs.PL cs.SE
Live, Rich, and Composable: Qualities for Programming Beyond Static Text
推动编程超越静态文本代码的努力已经寻求向编程注入多种不同的品质。一个长期公认的特性是活跃性:在程序编辑时为程序员提供关于程序动态行为的深入反馈。第二个品质,长期探索但缺乏共同的艺术术语,是丰富性:允许程序员通过特定领域的表示和交互来编辑程序,而不仅仅是通过文本。在本文中,我们映射这两个品质之间的关系,并调查过去的工作,证明他们。我们观察到,结合了活性和丰富性的系统往往是以牺牲传统编程的一个基本品质为代价的:可组合性。我们认为,通过结合活性,丰富性和可组合性,编程系统可以更好地捕捉交互式计算的全部潜力,而不会留下传统代码的表现力。
2023-03-12 cs.HC cs.PL cs.SE
Future-based Static Analysis of Message Passing Programs
消息传递在工业上被广泛用于开发由多个分布式通信组件组成的程序。由于消息交换的并发性,开发功能正确的消息传递软件非常具有挑战性。尽管如此,许多安全关键应用程序依赖于消息传递范式,包括空中交通管制系统和紧急服务,这使得证明其正确性至关重要。我们专注于通过静态验证具体的Java代码的MPI程序的模块化验证。我们使用分离逻辑来推理局部正确性,并在mCRL 2使用的进程代数中定义通信协议的抽象。我们称这些抽象为未来,因为它们预测组件在程序执行期间如何交互。我们在期货和程序代码之间建立了一个可证明的联系,并通过模型检验来分析抽象期货,以证明全局正确性。最后,我们验证了一个领导选举协议,以证明我们的方法。
2016-06-20 cs.LO cs.PL
Unveiling the Power of Intermediate Representations for Static Analysis: A Survey
该综述针对静态分析领域缺乏对中间表示(IR)价值系统性分析的问题,从IR视角梳理现代静态分析框架的核心目标与潜在方案,为从业者提供参考并指明研究方向。
2024-05-21 cs.PL cs.SE
NESA: Relational Neuro-Symbolic Static Program Analysis
Purdue University(普渡大学)
NESA通过大规模语言模型实现无编译定制化静态程序分析,通过分解问题和增量提示减少幻觉,提升程序切片和漏洞检测性能。
2026-04-13 cs.PL cs.SE
Static Program Analysis for String Manipulation Languages
近年来,诸如JavaScript或Python的动态语言已经越来越多地用于广泛的领域和应用中。它们的狡猾和被误解的行为对这些程序设计语言的静态分析提出了严峻的挑战。任何动态语言程序的一个关键方面是字符串的多种用法,因为它们可以隐式地转换为另一种类型的值,通过字符串到代码的原语转换或用于访问对象属性。不幸的是,动态语言的字符串分析仍然缺乏精度,并且没有考虑到一些重要的字符串特征。此外,字符串混淆在动态语言恶意代码的上下文中非常流行,例如,将代码信息隐藏在字符串内,然后动态地将字符串转换为可执行代码。在这种情况下,更精确的字符串分析变得必要。本文被放置在静态字符串分析的背景下,抽象的解释,并提出了一个新的语义字符串分析,处理动态语言字符串功能的第一步。
2019-08-20 cs.FL cs.PL
Towards Static Analysis of Functional Programs using Tree Automata Completion
本文提出了一个更广泛的研究工作的第一步,应用树自动机完成功能程序的静态分析。树自动机完成是一系列用于计算或近似重写关系可达的项集的技术。完成算法,我们专注于参数化的一组E的方程控制的精度的近似和影响其终止。对于用作静态分析的完成,第一步是保证其终止。本文给出了完备化算法在E和T(F)上总是终止的一个充分条件。在函数式程序的特定设置中,这个条件可以放宽到E和T(C)(构建在构造器集合上的项)上的条件,这更接近于在静态分析领域中所做的事情,其中对数据进行抽象。
2014-10-07 cs.FL cs.LO cs.PL
Static Prediction of Runtime Errors by Learning to Execute Programs with External Resource Descriptions
Google Research(谷歌研究院);Mila(米拉研究所)
程序的执行行为通常依赖于外部资源,例如程序输入或文件内容,因此不能孤立地运行。然而,软件开发人员受益于快速迭代循环,其中自动化工具尽可能早地识别错误,甚至在程序可以编译和运行之前。这提出了一个有趣的机器学习挑战:我们能否在“静态”设置中预测运行时错误,在这种情况下,程序执行是不可能的?在这里,我们介绍了一个真实世界的数据集和预测运行时错误的任务,我们表明这对于像Transformers这样的通用模型是困难的。我们通过开发一个解释器启发的架构,模仿程序执行,模型异常处理和“学习执行”的描述外部资源的内容的归纳偏见,我们接近这个任务。令人惊讶的是,我们发现该模型也可以预测错误的位置,尽管只在指示错误的存在/不存在和类型的标签上进行训练。总之,我们提出了一个实际的和困难的,但可接近的挑战问题,学习程序执行,我们展示了有前途的新功能的解释器启发的机器学习模型的代码。
2022-03-07 cs.LG cs.PL
Static Analysis of Run-Time Errors in Embedded Real-Time Parallel C Programs
我们提出了一个静态分析的抽象解释检查运行时间错误的并行和多线程的C程序。在我们的工作Astrée,我们专注于嵌入式关键程序没有递归,也没有动态内存分配,但扩展到一个静态的线程集的分析,通过共享内存和显式地使用一组有限的互斥锁隐式通信,并根据实时的【形】调度策略和固定的优先级调度。我们的方法是线程模块化的。它是基于一个稍微修改的非平行分析,当分析一个线程,应用和丰富的一组抽象的线程冲突。然后迭代器依次重新分析每个线程,直到冲突稳定下来。我们证明了我们的方法的可靠性顺序一致性语义,但也相对于一个合理的弱一致的内存语义。我们还展示了如何考虑互斥和线程优先级,通过分区的抽象调度状态。我们展示了使用原型Thésée分析工业程序的初步实验结果,并展示了我们方法的可扩展性。
2012-03-22 cs.LO cs.PL
Proving Non-Deterministic Computations in Agda
我们研究证明使用Agda的Curry程序的性质。首先,我们解决的功能正确性的咖喱功能,除了一些句法和语义的差异,是在两种语言的交集。其次,我们使用Agda模型的非确定性功能,两个不同的和有竞争力的方法,将非确定性。第一种方法通过考虑应用程序产生的所有非确定性值的集合来消除非确定性。第二种方法对应用程序可以执行的每个非确定性选择进行编码。我们认为我们的初步试验是成功的。虽然证明程序的性质是一个非常困难的任务,但函数逻辑范式似乎并没有给这个任务增加任何显著的难度或复杂性。
2017-01-03 cs.PL cs.SE
LLOV: A Fast Static Data-Race Checker for OpenMP Programs
在Exascale计算时代,编写高效的并行程序是必不可少的,同时,编写好的并行程序是非常困难的。与诸如OpenMP之类的框架的并行性是相对容易的,但是这些程序中的数据竞争是错误的重要来源。在本文中,我们提出了LLOV,一个快速,轻量级,语言无关,静态的数据竞争检查的基础上的LLVM编译器框架的OpenMP程序。我们比较LLOV与其他国家的最先进的数据竞赛检查各种完善的基准。我们表明,精度,准确性和F1得分的LLOV是可比的其他跳棋,而数量级更快。据我们所知,LLOV是最先进的数据竞争检查器中唯一可以验证C/C++或FORTRAN程序是否无数据竞争的工具。
2020-09-01 cs.LO cs.PL cs.SE
A General Framework for Static Profiling of Parametric Resource Usage
传统的静态资源分析是在不执行程序的情况下估计程序的总资源使用量,本文提出了一种新的资源分析方法,其目的是对累积成本进行静态分析,即,对于节目的选定部分,发现在这些部分中的每一个中累积的资源使用的估计或界限。传统的资源分析是参数化的,因为结果可以是输入数据大小的函数。我们的静态分析也是参数化的,即,我们的累积成本估计也由输入数据大小参数化。我们的建议是基于成本中心的概念和一个程序转换,允许静态推断的功能,返回这些累积的成本取决于输入数据大小的界限,为每个成本中心的利益。这样的信息比传统的资源使用函数对软件开发者更有用,因为它允许识别应该被优化的程序的部分,因为它们对程序执行的总成本的影响更大。我们还报告了我们的实施所提出的技术使用CiaoPP程序分析框架,并提供了一些实验结果。本文件正在考虑被TPLP接受。
2016-10-17 cs.DC cs.PL
SDLLMFuzz: Dynamic-static LLM-assisted greybox fuzzing for structured input programs
SJTU-Paris Elite Institute of Technology, Shanghai Jiao Tong University(上海交通大学巴黎卓越工程师学院);School of Computer Science, Shanghai Jiao Tong University(上海交通大学计算机科学与技术学院)
本文提出SDLLMFuzz框架,结合LLM生成结构化输入并利用静态崩溃分析,通过动态-静态反馈机制提升模糊测试效率,实验表明其在漏洞发现和时间效率上优于传统方法。
2026-04-20 cs.CR cs.PL
Enabling Operator Reordering in Data Flow Programs Through Static Code Analysis
在许多大规模并行数据管理平台中,程序被表示为连接在数据流中的小的命令式代码段。这种流行的抽象使得很难应用关系DBMS和其他使用代数编程抽象的系统所采用的代数重新排序技术。我们提出了一种基于反向数据和控制流分析的代码分析技术,该技术从用户代码中发现一组属性,这些属性可用于在此设置中模拟代数优化。
2013-01-17 cs.DB cs.DC cs.PL
Neural Program Generation Modulo Static Analysis
Rice University(莱斯大学);UT Austin(德克萨斯大学奥斯汀分校);University of Wisconsin(威斯康星大学)
最先进的源代码神经模型往往在生成单个表达式和代码行时进行评估,并且通常在生成整个方法体等长期任务时失败。我们建议使用弱监督静态程序分析器来解决这个缺陷。我们的神经符号方法允许深度生成模型通过调用静态分析工具来符号化地计算它已经生成的代码中的长距离语义关系。在训练过程中,模型观察这些关系,并学习生成以它们为条件的程序。我们应用我们的方法来生成整个Java方法的问题,给出了包含该方法的类的其余部分。我们的实验表明,该方法大大优于国家的最先进的变压器和模型,明确尝试学习程序语义在这项任务中,无论是在生产程序的基本语义错误和语法匹配的地面真相。
2021-11-22 cs.AI cs.LG cs.PL
Combining Static and Dynamic Contract Checking for Curry
静态类型系统通常不足以表达对函数调用的所有要求。因此,带有前置和后置条件的契约可以用来表达对操作的更复杂的约束。可以在运行时间检查协定,以确保仅使用合理的参数调用操作并返回预期的结果。虽然这种动态契约检查提供了更可靠的程序执行,但它需要执行时间,并可能导致程序崩溃,这些崩溃可能会在编译时用更高级的方法检测到。为了改善这种情况的声明性语言,我们提出了一种方法,结合静态和动态的合同检查的功能逻辑语言咖喱。基于函数式逻辑程序设计中契约检验的形式化模型,提出了一种在编译时自动检验契约的方法。如果合同验证成功,则可以省略对合同的动态检查。这种方法减少了执行时间,而不会降低可靠的程序执行。在最好的情况下,当所有契约都被静态验证时,它提供了对软件的信任,因为在程序执行期间不会发生由于违反契约而导致的崩溃。
2017-09-14 cs.LO cs.PL
C Analyzer : A Static Program Analysis Tool for C Programs
INDIAN INSTITUTE OF TECHNOLOGY, BOMBAY(印度理工学院孟买分校)
本文提出C Analyzer,一个基于抽象解释技术的C程序静态分析工具,利用LLVM Clang API和CIL转换,支持多种抽象域以检测除零、溢出等运行时错误。
2024-01-28 cs.CL cs.PL
Program Equivalence in Linear Contexts
线性环境中的程序等价性是程序设计语言中的一个重要问题。然而,现有的技术,如那些基于互模拟和逻辑关系的目标只在上下文等价在通常的(非线性)功能语言,并未能捕捉非平凡的等价程序在线性上下文中,特别是当非确定性是存在的。我们提出了线性上下文等价的概念,正式表征这样的程序等价,以及一种新的和一般的方法来研究它在高阶语言,标记的过渡系统的基础上专门设计的功能语言。我们证明了线性语境对等确实与痕迹对等相吻合--它是健全的和完整的。我们说明我们的技术在确定性(PCF的线性版本)和非确定性(线性PCF在莫吉的框架)的功能语言。
2011-10-11 cs.LO cs.PL
A simple abstraction of arrays and maps by program translation
我们提出了一种处理数组的程序的静态分析方法,数组程序的语义和纯标量操作的语义之间有伽罗瓦连接。实现它的最简单的方法是通过自动地将数组程序语法转换为标量程序,然后使用任何静态分析技术(抽象解释、加速、谓词抽象等)分析标量程序。.).由此获得的标量不变量被翻译回原始程序作为普遍量化的数组不变量。我们说明了我们的方法上的各种例子,导致“荷兰旗”算法。
2015-06-12 cs.LO cs.PL
Extended Paper: API-driven Program Synthesis for Testing Static Typing Implementations
本文提出 API 驱动的程序综合方法及工具 Thalia,通过复用库 API 并结合故障注入与语义保持模式测试静态类型实现,在 Scala、Kotlin 和 Groovy 编译器中发现 84 个类型错误。
2023-11-08 cs.PL cs.SE
LLVM Static Analysis for Program Characterization and Memory Reuse Profile Estimation
本文提出一种基于LLVM的概率静态分析方法,通过分析LLVM IR常数时间内预测程序特征并估计重用距离剖面,实验证明其预测准确度可媲美动态分析工具Byfl。
2023-11-20 cs.PF cs.PL cs.SE