このドキュメントは、 Clang 3.4 documentation をテキトーな日本語にゆるふわ翻訳しているドキュメントです。誤解釈などがたくさんあると思いますので信用しないでください。
アプリケーションに合ったインターフェースを選ぶ
Clangは、ツールを作るのに必要なインフラストラクチャ-プログラムのセマンティック・シンタクティクな(構文的・意味的)情報-を提供します。
このドキュメントでは、Clangのツールを作成するのにいくつかの違った手法とその特徴を簡潔に紹介します。
LibClang
LibClang は、ハイレベルで安定したCのインターフェースです。LibClangはだいたいあなたの求めているインターフェースでしょう。 LibClangを使わない大きな理由があるとき以外は、他のインターフェースを使わなくてもよいでしょう。
典型的な例としては、以下のツールが使いたい時などにLibClangは有効です:
- Xcode
- Clang Python Bindings
LibClangは他にもこんなときに使えます:
- C++のような他の言語とclangのインターフェースが欲しいとき
- 古いバージョンと互換性のある安定したインターフェースが必要なとき
- ハイレベルでパワフルな抽象化-たとえばカーソル付きでASTを繰り返し通るとか-ができることを求めているけれど、ClangのASTのすべてを知りたくはないとき
こんなときは使えません:
- ClangのASTの全てを操作したい
Clang Plugins
Clang Plugins を使うことで、ClangのAST(抽象構文木)に追加の操作を付け加えることができます。プラグインはランタイム時にコンパイラによってロードされるダイナミックライブラリで、各ビルド環境で簡単に結合することができます。
プラグインを使うような例:
- 特別なlintスタイルの警告やエラーが必要なとき
- 1つのコンパイルステップから追加の操作を作りたいとき
他にもClang Pluginはこんなときに使えます:
- もし依存関係が変更されていたらそれを教えてくれるようなツールが欲しいとき
- ビルドする、ビルドをブレークするツールが欲しいとき
- ClangのASTの全てを操作したいとき
こんなときは使えません:
- ビルド環境外でツールを使いたいとき
- メモリ内の仮想ファイルのマッピングを含めて、Clangがどのように設定されているかを全て操作したい
- リビルドのトリガなどの変更に関連づけられている必要の無い、プロジェクト内のファイルの特定のサブセットを実行することが必要なとき
LibTooling
Lib Tooling は、Clangのツールとしてだけではなく、スタンドアローンなツールを書くことを目的としているC++インターフェースです。
Lib Toolingを使う例:
- 簡単なシンタックスチェッカ
- リファクタリングツール
他にもこんなときに使えます:
- 1つのファイルまたは特定のファイルのサブセットとしてツールを独立させて実行させたいとき
- ClangのASTの全てを制御したいとき
- Clang Pluginとコードを共有したいとき
こんなときには使えません:
- 依存性の変更をトリガにしてビルドするパーツとして実行したいとき
- ASTのAPIが変更されたときでも、今までのコードは変更する必要のないような安定したインターフェースが必要なとき
- 箱(?)の外でハイレベルな抽象化-カーソルやコード補完が必要なとき
- ツールをC++で書くのが嫌なとき
Clang tools はClangプロジェクトの一部であるLibTooling基盤上で動いている特定の開発ツール群です。これらはC/C++開発者の開発活動の中核を自動化・改善することを目標としています。
Clangプロジェクトとして製作中・計画中のツールの例:
- シンタックスチェック (clang-check)
- コンパイルエラーの自動修正 (clang-fixit)
- 自動コードフォーマット化 (clang-format)
- 新しい言語標準の新しい特徴のためのマイグレーションツール
- リファクタリングツール