Using Clang as a Library----Choosing the Right Interface for Your Application---翻译

原文地址:http://clang.llvm.org/docs/Tooling.html

译者:史宁宁snsn1984

为你的程序选择正确的接口

       Clang为实现需要一个程序的语法和语义信息的工具提供了基础设施。((译者注:为了便于理解,再意译一句)如果你想实现一个工具,而这个工具需要获取一个程序的语法和语义信息,那么恭喜你,Clang可以为你提供一些基础实现。)这个文档将给出使用不同的方法去实现基于Clang的工具的一个简短介绍,包括它们的优点和缺点。

LibClang

LibClang是一个稳定的高层次的Clang的C语言接口。如果不确定LibClang是你想要用的接口,只有当你有一个好的理由不用LibClang的时候,这个时候你才可以去用别的接口。

如果遇到如下情况,那么就是典型的使用LibClang的时候:

  • Xcode
  • Clang Python Bindings

如果遇到下列情况,请使用LibClang:

  • 想使用Clang除了C++之外的编程语言的接口
  • 需要一个稳定的接口可以向后博啊吃兼容
  • 需要一个十分强大的高层次的抽象,比如:像一个光标一样遍历AST,或者不想去学习Clang的AST的所有的细节问题

如果遇到下列情况,请不要使用LibClang:

  • 想完全控制Clang AST

Clang Plugins

Clang Plugins允许你在AST之上运行一些额外的动作,而这些动作作为编译的一部分。Plugins是运行的时候被编译器加载的动态库,她们很容易合并到你的构建环境中。

如果遇到如下情况,那么就是典型的使用Clang Plugins的时候:

  • 你的工程有特殊的lint风格的警告或者错误
  • 从一个单独的编译步骤要创建额外的构建神器

如果遇到下列情况,请使用Clang Plugins:

  • 需要你的工具去返回任何依赖关系的变化
  • 想让你的工具去执行或者跳出一次构建
  • 需要完全控制Clang AST

如果遇到下列情况,请不要使用Clang Plugins:

  • 想在你的构建环境的外部运行工具
  • 想完全控制Clang如何建立起来,包括内存虚文件的映射
  • 想去运行你工程中的一部分特殊的文件,而这部分文件和触发重新构建是没有必要联系的

LibTooling

LibTooling是一个C++接口,它的目标在于实现完全独立的工具,而这些工具就像是被集成到运行Clang工具的服务中了一样。
如果遇到如下情况,那么就是典型的使用LibTooling的时候:

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

如果遇到下列情况,请使用LibTooling:

  • 想在独立于构建系统的单个文件或者一系列特殊的文件上运行工具
  • 想完全控制Clang AST
  • 想和Clang Plugins共享代码

如果遇到下列情况,请不要使用LibTooling:

  • 想作为可以被依赖关系改变而触发的构建系统的一部分运行
  • 想要一个稳定的接口,不需要因为AST API的改变而改变你的代码
  • 想要一个高层次的抽象像光标和在盒子之外完成的代码
  • 不想使用C++去实现你的工具

Clang tools是一系列基于LibTooling架构基础之上构建的特殊的开发者工具,它们是Clang工程的一部分。它们的目标是自动化和改善C/C++开发者的核心开发活动。

我们已经在构建或者计划构建的作为Clang工程的一部分例子工具有:

  • 语法检查 (clang-check)
  • 自动修复编译错误 (clang-fixit)
  • 自动代码格式化 (clang-format)
  • 新语言标准的新特性的迁移工具(cpp11-migrate,译者注)
  • 核心重构工具
  • -------------------------------------------------------------------------------------------结束-------------------------------------------------------------------------------------------------------------------------------
时间: 2024-11-08 21:46:55

Using Clang as a Library----Choosing the Right Interface for Your Application---翻译的相关文章

黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块Cryptographyproviders中为对称加密配置Key文件的3种方式: create a new key  : 使用一串字符串作为Key,然后通过加密保存到一个Key文件中. use an existing DPAPI-protected key file  : 使用一个现有的Key文件进

黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block   开发人员经常编写需要安全功能的应用程序.这些应用程序通常需要执行一系列不同的安全操作,而且它们还经常与不同的基础安全提供程序(如 Microsoft Active Directory 目录服务.授权管理器.Active Directory 应用程序模式 (ADAM) 和自定义数据库等)进行交互.     安全应用程序块通过收集开发人员必须执行的许

黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级) 企业库提供了一个很强大的验证应用程序模块,特点是: 可以通过配置为你的程序中特定的类来定义规则集. 是为你的类的公有属性,即对外开放的属性进行验证的. 使用企业库验证应用程序模块的优势: 有助于保持一致的验证方法. 包括大多数标准验证,包括.NET数据类型校验. 它让您可以将多个规则集具有相同的类和该类的成员. 它可以让你申请一个或多个

黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级) 企业库验证应用程序模块之配置文件模式:   1.       新建一个控制台应用程序,并创建一个Customer类,其代码如下所示: 代码 using System;using System.Collections.Generic;using System.Linq;using System.Text; using Microsoft.

黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) Caching Application Block 的基本架构如下所示,图中很清楚的写出了Cache Manager可以使用3中方式对数据进行缓存: 1. Null backing store 存储策略   : 默认的存储策略,存储的数据只存储在内存的缓存中,并不持久保存, 它可用于所有支持的应用类型.适合于保存一些临时的数据,或者用于保存当

黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方式让用户保护自己的数据: Hashingproviders:  离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离散值而不是明文,这样就起到简单的加密效果啦. Cryptographyproviders: 密钥加密法. 用对称加密方法对数据进行加密

黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:        从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信息都可以在Category配置文件中反映出来,通过配置文件,调用LogWriter类的Writer方法,就可以将包含日志信息的LogEntr

黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级) 本篇文章具体官方解释请参照以下链接: http://msdn.microsoft.com/en-us/library/ff664753%28v=PandP.50%29.aspx MicrosoftEnterprise Library 5.0下载地址: http://www.microsoft.com/downloads/details.a

黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block 到目前为止,我们使用的模块都是在同一个配置文件中,这显然是不灵活的,我们希望每个功能模块能独立的在一个配置文件中体现,这样不仅易于管理,易于扩展,也易于阅读和分类.企业库当然考虑到了这个问题并且提供了解决方案,本章就是讲解如何使用Configuration Application Block来将各个模块分割到独立的配置文件中的. 和以前一样

“Clang” CFE Internals Manual---中文版---"Clang"C语言前端内部手册

原文地址:http://clang.llvm.org/docs/InternalsManual.html 译者:史宁宁(snsn1984)                                                                                           "Clang"C语言前端内部手册 简介 这个文档描述了比较重要的API中的一部分API,还表述了Clang C语言前端中的一些内部设计想法.这个文档的目的是既把握住高层次