Static analysis approximates the results of a program by examining only its syntax. For example, control-flow analysis (CFA) determines which syntactic lambdas (for functional languages) or (for object-oriented) methods may be invoked at each call site within a program. Rich theoretical results exist studying control flow analysis for Scheme-like languages, but implementations are often complex and specialized. By contrast, object-oriented languages (Java in particular) enjoy high-precision control-flow analyses that scale to thousands (or more) of lines of code. State-of-the-art implementations (such as DOOP on Souffl\'e) structure the analysis using Horn-SAT (Datalog) to enable compilation of the analysis to efficient implementations such as high-performance relational algebra kernels. In this paper, we present an implementation of control-flow analysis for a significant subset of Scheme (including set!, call/cc, and primitive operations) using the Souffl\'e Datalog engine. We present an evaluation on a worst-case term demonstrating the polynomial complexity of our m-CFA and remark upon scalability results using Souffl\'e.
翻译:例如,控制-流分析(CFA)确定在程序内每个呼叫站点可以采用哪种合成羊羔(功能语言)或(目标导向)方法。丰富的理论结果存在于研究对计划类似语言的控制流分析,但实施往往复杂和专业化。相比之下,目标导向语言(特别是Java)得到高精确度控制-流分析,其范围可达到(或以上)代码线。国家-艺术执行(如Souffl\'e的DOOP)组织使用Horn-SAT(Datalog)进行的分析,以便能够汇编分析,以高效实施,如高性能关系代数内核。在本文件中,我们介绍了对一个重要的方案组(包括设置)、调用/cc和原始操作)使用Souffil\e Datalog 引擎进行的控制流分析。我们用Souffil\ 数据引擎对一个最糟糕的术语进行了评估,以显示我们M-CFA结果的多式复杂性。