文档摘要

LLVM是用C++语言编写的,截至2022年7月,它使用C++标准的C++17版本[^1]。LLVM积极利用标准模板库(STL)提供的功能。另一方面,LLVM包含了许多基本容器的内部实现 [^2],主要是为了优化性能。例如,llvm::SmallVector具有与std::vector类似接口,但内部实现进行了优化。对于希望使用LLVM和Clang的人来说,熟悉这些扩展至关重要。 此外,LLVM还引入了其他开发工具,如TableGen,这是一种用于结构化数据处理的领域特定语言(DSL),以及LIT(LLVM集成测试器),即LLVM的测试框架。本章稍后将讨论这些工具的更多细节。

LLVM是用C++语言编写的,截至2022年7月,它使用C++标准的C++17版本1。LLVM积极利用标准模板库(STL)提供的功能。另一方面,LLVM包含了许多基本容器的内部实现
2,主要是为了优化性能。例如,llvm::SmallVector具有与std::vector类似接口,但内部实现进行了优化。对于希望使用LLVM和Clang的人来说,熟悉这些扩展至关重要。

此外,LLVM还引入了其他开发工具,如TableGen,这是一种用于结构化数据处理的领域特定语言(DSL),以及LIT(LLVM集成测试器),即LLVM的测试框架。本章稍后将讨论这些工具的更多细节。

本章将包含以下内容:

  • LLVM编码风格

  • LLVM基本库

  • Clang基本库

  • LLVM支持工具

  • Clang插件项目

我们计划使用一个简单的示例项目来演示这些工具。这个项目将是一个Clang插件,用于估算C++类的复杂性。如果一个类的方法数量超过了作为参数指定的阈值,那么这个类就被认为是复杂的。虽然这种复杂性的定义可能微不足道,但我们将在第6章"高级代码分析"中探索更高级的复杂性定义。

  1. LLVM Community. [LLVM] Update C++ standard to 17. 2022. URL
    https://reviews.llvm.org/D130689

  2. LLVM Community. LLVM Programmer’s Manual. 2023. URL
    https://llvm.org/docs/ProgrammersManual.html


发布者: 作者: 转发
评论区 (0)
U