01-为您的应用程序选择正确的接口(Clang10文档)

为您的应用程序选择正确的接口

Clang 提供了基础架构(infrastructure)来编写那些需要程序的句法和语义信息的工具。本文档将简要介绍编写 clang 工具的不同方法及其优缺点。
原文地址:https://releases.llvm.org/10.0.0/tools/clang/docs/Tooling.html

LibClang


LibClang 是clang的一个稳定的高级 C 语言接口。如果有疑问,LibClang可能是您要使用的接口。只有当您有充分的理由不使用 LibClang 时,才考虑其他接口。

何时使用 LibClang 的规范示例:

  • Xcode
  • Clang Python 绑定

当您……时使用 LibClang:

  • 想与 C++ 以外的其他语言的 clang 交互时
  • 需要一个稳定的接口,注意向后兼容
  • 想要强大的高级抽象,例如使用游标遍历 AST,并且不想了解 Clang AST 的所有细节。

当你……时不要使用 LibClang:

  • 想要完全控制 Clang AST

Clang 插件(Clang Plugins)


Clang 插件允许您在 AST 上运行附加操作(additional actions)作为编译的一部分。插件是由编译器在运行时加载的动态库,它们很容易集成到您的构建环境中。

何时使用 Clang 插件的规范示例:

  • 项目的特殊lint样式(lint-style)警告或错误
  • 从单个编译步骤创建额外的构建工件

当您……时使用 Clang 插件:

  • 如果任何依赖项发生变化,则需要您的工具重新运行
  • 希望您的工具能够构建或破坏构建(want your tool to make or break a build)
  • 需要完全控制 Clang AST

当你……时不要使用 Clang 插件:

  • 想要在构建环境之外运行工具
  • 想要完全控制 Clang 的设置方式,包括内存中虚拟文件的映射
  • 需要运行项目中的特定文件子集,该子集不一定与触发重建的任何更改相关

LibTooling


LibTooling 是一个 C++ 接口,旨在编写独立的工具,以及集成到运行 clang 工具(clang tools)的服务中。何时使用 LibTooling 的规范(Canonical)示例:

  • 一个简单的语法检查器
  • 重构工具

当您……时使用 LibTooling:

  • 希望独立于构建系统在单个文件或特定文件子集上运行工具
  • 想要完全控制 Clang AST
  • 想与 Clang 插件共享代码

当你……时不要使用 LibTooling:

  • 希望作为依赖项更改触发的构建的一部分运行时
  • 想要一个稳定的接口,这样当 AST API 改变时你不需要改变你的代码
  • 想要开箱即用的高级抽象,例如游标(cursors)和代码完成(code completion)
  • 不想用 C++ 编写你的工具

Clang 工具是构建在 LibTooling 基础架构之上的特定开发人员工具的集合,作为 Clang 项目的一部分。它们旨在自动化和改进 C/C++ 开发人员的核心开发活动。

作为 Clang 项目的一部分,我们正在构建或规划的工具示例:

  • 语法检查(clang-check)
  • 自动修复编译错误(clang-fixit)
  • 自动代码格式化(clang-format)
  • 新语言标准中新功能的迁移工具
  • 核心重构工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值