当前位置: X-MOL 学术ACM Trans. Program. Lang. Syst. › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
Type Inference for C
ACM Transactions on Programming Languages and Systems ( IF 1.5 ) Pub Date : 2020-11-24 , DOI: 10.1145/3421472
Leandro T. C. Melo 1 , Rodrigo G. Ribeiro 2 , Breno C. F. Guimarães 1 , Fernando Magno Quintão Pereira 1
Affiliation  

Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g., ML and Haskell), today, many object-oriented/multi-paradigm languages such as C# and C++ offer, to a certain extent, such a feature. Nevertheless, type inference still is an unexplored subject in the realm of C. In particular, it remains open whether it is possible to devise a technique that encompasses the idiosyncrasies of this language. The first difficulty encountered when tackling this problem is that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a unification-based framework that lets us infer the missing struct, union, enum, and typedef declarations in a program. As an application of our technique, we investigate the reconstruction of partial programs. Incomplete source code naturally appears in software development: during design and while evolving, testing, and analyzing programs; therefore, understanding it is a valuable asset. With a reconstructed well-typed program, one can: (i) enable static analysis tools in scenarios where components are absent; (ii) improve precision of “zero setup” static analysis tools; (iii) apply stub generators, symbolic executors, and testing tools on code snippets; and (iv) provide engineers with an assortment of compilable benchmarks for performance and correctness validation. We evaluate our technique on code from a variety of C libraries, including GNU’s Coreutils and on snippets from popular projects such as CPython, FreeBSD, and Git.

中文翻译:

C 的类型推断

类型推断是多种编程语言共有的特性。虽然在过去,它在函数式语言(例如,ML 和 Haskell)中占有重要地位,但今天,许多面向对象/多范式语言(例如 C# 和 C++)在一定程度上提供了这样的特性。尽管如此,类型推断在 C 领域仍然是一个未探索的主题。特别是,是否有可能设计一种包含这种语言特性的技术仍然是开放的。解决这个问题时遇到的第一个困难是解析 C 不仅需要句法信息,还需要语义信息。然而,由于 C 语言复杂的类型系统,出现了更大的挑战。在这项工作中,我们提出了一个基于统一的框架,让我们可以推断程序中缺少的 struct、union、enum 和 typedef 声明。作为我们技术的应用,我们研究了部分程序的重建。不完整的源代码自然会出现在软件开发中:在设计过程中以及在开发、测试和分析程序的过程中;因此,了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。我们研究部分程序的重建。不完整的源代码自然会出现在软件开发中:在设计过程中以及在开发、测试和分析程序的过程中;因此,了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。我们研究部分程序的重建。不完整的源代码自然会出现在软件开发中:在设计过程中以及在开发、测试和分析程序的过程中;因此,了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。不完整的源代码自然会出现在软件开发中:在设计过程中以及在开发、测试和分析程序的过程中;因此,了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。不完整的源代码自然会出现在软件开发中:在设计过程中以及在开发、测试和分析程序的过程中;因此,了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。了解它是一项宝贵的资产。通过重构的类型良好的程序,可以: (i) 在缺少组件的情况下启用静态分析工具;(ii) 提高“零设置”静态分析工具的精度;(iii) 在代码片段上应用存根生成器、符号执行器和测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。和代码片段的测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。和代码片段的测试工具;(iv) 为工程师提供各种可编译的性能和正确性验证基准。我们根据来自各种 C 库的代码(包括 GNU 的 Coreutils)以及来自 CPython、FreeBSD 和 Git 等流行项目的代码片段来评估我们的技术。
更新日期:2020-11-24
down
wechat
bug