Clang (:クランのように発音 )は、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンドである。バックエンドとして LLVM を使用しており、LLVM 2.6以降は LLVM の一部としてリリースされている。プロジェクトの目標は、GNUコンパイラコレクション (GCC) を置き換えることのできるコンパイラを提供することである。開発は完全にオープンソースの方法で進められており、アップルやGoogleといった大企業も参加・資金提供している。ソースコードは、ライセンスで提供されている。OS XおよびiOS(ともにXcodeの付属として)、ならびにFreeBSDにおいて標準のコンパイラとして採用されている。Clang プロジェクトではコンパイラのフロントエンドに加えてClang静的コード解析ツールも開発している。2005年初頭、アップルはLLVMシステムを自社で開発している様々なシステム内で利用するための作業を開始した。LLVMはGCCのツールチェインの低レベルの部分を置き換えることが可能であり、GCCの3番地コードによる中間表現よりも積極的な最適化が可能である。LLVMではGCC同様にコードを静的にコンパイルすることも、JavaのようにJITコンパイルを用いて後で中間言語から機械語に変換することもできる。LLVMは元々イリノイ大学アーバナ・シャンペーン校で開発され、BSDライセンスに似たライセンスでリリースされていた。したがって Clang は再配布に制約がほとんどないが、GCCはGPLでライセンスされており、開発者にコードをGPLで配布してもらう必要があった。当初LLVMはGCCツールチェーンの一部となることを目標にしていたが、最近ではGCCの他の部分を置き換えることにも興味の対象を置いている。GCCは巨大なシステムで開発がしづらい面もあり、長年のGCCの開発者の一人は「カバにダンスを踊らせるのはあまり楽しいことではない」と述べている。アップルはObjective-Cを多用しているため性能を向上させることに興味を抱いていたが、通常のGCCの開発からはほとんど進展が見られず、Objective-Cの性能を上げるためには、 GCCをアップル版に分岐させるか、新しいコンパイラを採用するかを選択することになった。そこで、アップルはC99、Objective-CとC++ をサポートするコンパイラを1から作成した。このClangプロジェクトは2007年7月にオープンソース化された。アップルはLLVMを多数の商用システムに使用している。現在最も目に触れるのはOS X用のOpenGLコードコンパイラであり、OpenGLをサポートしないGPU用にOpenGLの呼び出しをより基礎的なコードに変換する。これにより、アップルはIntel GMAチップセットを搭載したコンピュータ上でも、 OpenGLのAPI全体をサポートできるようになった 。もっと強力なチップセット用にはコードは使用するハードウェアの機能を用いるようコンパイルされるが、GMAを用いたシステムでは同じOpenGLのコードを同じように動作するソフトウェアのサブルーチンに置き換える。LLVMはXcode 3.1 (iOS SDK) 以降の一部である。ClangはCをターゲットとした新しいコンパイラで、LLVM上で動作することを意図して設計されている。ClangとLLVMの組み合わせによって、ツールチェインの大半の機能を提供し、GCCスタック全体の置き換えが可能になる。Clangの主要な目標の一つは、統合開発環境 (IDE) のGUIと密接に連携したよりよい増分コンパイルのサポートである。GCCは古典的なコンパイル-リンク-デバッグのサイクルで用いるよう設計されており、増分コンパイルと実行中のコンパイルをサポートしているものの、他のツールと統合して使うことは簡単ではない。たとえばGCCのコンパイルにはコンパイル全体の中で重要な "fold" という段階があるが、これはコードツリーを元のソースコードと大きく異なる形に変換してしまう。fold中、あるいはその後でエラーが発見されると、元のソースの一箇所に対応付けるのは難しい。さらにGCCスタックをIDEで使用する場合、コードの色付表示や自動補完などの機能のために、コードをインデックス化する別のツールが必要になる。Clangは、コンパイル中にGCCよりも多くの情報を取得し、得られた情報を元のコードと同じ形態で保存する。またClangによるエラーの報告は、より詳細で具体的でありIDEなどが表示しやすいようプログラムで利用できる書式になっている。コンパイラは動作させたままで、ソースコード 、文法のチェックなどのRADに関係したその他の機能を実行する。またコードは常にパース可能なテキストであるので、Clangが出力する解析木は自動的なリファクタリングをサポートするのに適している。GCCは一回のコンパイルにはマルチスレッドをサポートしておらず、一回のコンパイル単位でマルチプロセッサのハードウェアの恩恵を受けられない。一方Clangはメモリ使用量の削減と速度の向上を目指して最初からマルチスレッド対応で設計されている。2007年10月の時点で、ClangはCarbonのライブラリを、メモリとディスクを1/5程度しか使用せずに、GCCの二倍以上の速度でコンパイルできる。GCCを用いた開発には困難な点もあるが、その理由については開発者が十分調査を行ってきた。その結果ClangチームはGCCの問題を避け、より柔軟なシステムを構築できるようになった。Clangはモジュラー化されており、コンパイル時にバイナリに組み込まれてしまうソースコードモジュールではなく、ほぼリンク時に置換できるライブラリだけに依存しており、しかもよく文書化されている。新しい開発者がClangを使いこなし、開発に加わるスピードを加速させる。ライブラリは実行時に交換可能な複数のバージョンで提供される場合もあり、例えばパーサーは、コンパイルの性能測定の機能を持ったバージョンもある。Clang は名前が示すとおりCやCに似た言語の専用のコンパイラであり、C、C++、Objective-C、Objective-C++ 以外の言語のフロントエンドは提供しない。Fortran、Ada、Go については LLVM は GCC (dragonegg) に依存し続ける。Clang は必要に応じてツールチェイン全体には影響を与えず GCC と交換することができる。プロジェクトは現在も活発に開発中だが、2012年5月の時点で、C用のコード生成部分は完了しており、Objective-Cのコード生成部分も完了している。またC++11のサポートが強化され、2013年4月にC++11規格に従う機能がすべて実装された。Googleが提供するAndroid向けのC/C++言語開発キットであるAndroid NDK(Native Development Kit)では、従来GCCが標準であったが、2012年11月配布のRevision 8cからClangが副選択肢として追加され、2016年10月配布のRevision 13からはClangが標準となった。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。