Clang


Clang

はコンパイラについてです。韻を踏む単語の連想の現象に類音連想を参照してBand-Maidの曲については、
World Domination(Band-Maid album)を参照して
打ち鳴らす / K L æ ŋ / であり、コンパイラのフロントエンド用のC、C ++、Objective-Cの、およびオブジェクティブC ++ プログラミング言語、並びにOpenMPのは、 のOpenCL、のrenderScript、CUDA、及びHIP フレームワーク。これは、GNUコンパイラコレクション(GCC)のドロップイン置換として機能し、ほとんどのコンパイルフラグと非公式の言語拡張をサポートします。 静的アナライザーといくつかのコード分析ツールが含まれています。 Clang Clang 12.0.1
原作者
クリス・ラトナー
開発者
LLVM開発者グループ
初回リリース
2007年9月26日; 14年前 (2007-09-26)
安定リリース
13.0.0 / 2021年10月4日 ; 2か月前  (2021-10-04)
リポジトリ
github .com / llvm / llvm-project
で書かれている
C ++
オペレーティング・システム
Unixライク
プラットホーム
AArch64、ARMv7、IA-32、x86-64、ppc64le
タイプ
コンパイラフロントエンド
ライセンス
LLVM例外を伴うApacheライセンス2.0
Webサイト
clang .llvm .org
ClangはLLVM コンパイラバックエンドと連携して動作し、LLVM2.6以降のサブプロジェクトになっています。 LLVMと同様に、Apache License2.0ソフトウェアライセンスに基づく無料のオープンソースソフトウェアです。 その貢献者には、Apple、Microsoft、Google、ARM、Sony、Intel、およびAMDが含まれます。
2021年4月現在のClangの最新メジャーバージョンであるClang12は、C ++ 17までのすべての公開されたC ++標準を完全にサポートし、C ++ 20のほとんどの機能を実装し、次のC ++ 23標準の初期サポートを追加します。。 v6.0.0以降、ClangはデフォルトでGNU ++ 14ダイアレクトを使用してC ++をコンパイルします。これには、C ++ 14標準の機能と準拠するGNU拡張機能が含まれています。

コンテンツ
1 バックグラウンド
2 設計
3 パフォーマンスとGCCの互換性
4 インターフェース
5 ステータス履歴
6 も参照してください
7 参考文献
8 外部リンク

バックグラウンド
2005年に開始し、アップル社は、いくつかの商用製品にLLVMの広範な使用を開始したなど、iOSのSDKとXcodeの3.1。LLVMの最初の用途の1つはあったOpenGLのためのコードコンパイラOS X OpenGLはこれ以上の基本的なコールを呼び出す変換単位処理グラフィック特定の機能をサポートしていない(GPU)を。これにより、AppleはIntel GMAチップセットを使用するコンピューターでOpenGLをサポートできるようになり、それらのコンピューターのパフォーマンスが向上しました。
LLVMプロジェクトは、もともとGCCのフロントエンドを使用することを目的としていました。ただし、GCCソースコードは大きく、やや面倒です。ある長年のGCC開発者がLLVMに言及しているように、「カバを踊らせようとするのはそれほど楽しいことではありません」。さらに、AppleソフトウェアはObjective-Cを使用しますが、これはGCC開発者にとって優先度が低いものです。そのため、GCCはAppleの統合開発環境(IDE)にスムーズに統合されません。最後に、GCCのライセンス契約であるGNU General Public License(GPL)バージョン3は、GCCの拡張バージョンまたは変更バージョンを配布する開発者にソースコードを利用可能にすることを要求していますが、LLVMのパーミッシブソフトウェアライセンスにはそのような障害がありません。
最終的に、AppleはC、Objective-C、C ++をサポートする新しいコンパイラフロントエンドであるClangの開発を選択しました。 2007年7月、プロジェクトはオープンソースになるための承認を受けました。

設計
ClangはLLVMと連携して動作します。 ClangとLLVMの組み合わせは、GCCスタックを置き換えるためのツールチェーンのほとんどを提供します。Clangの主な目標の1つは、ライブラリベースのアーキテクチャを提供することです。これにより、コンパイラは、統合開発環境(IDE)などのソースコードと相互作用する他のツールと相互運用できます。対照的に、GCCはコンパイルリンク-デバッグワークフローで動作します。他のツールとの統合は必ずしも簡単ではありません。たとえば、GCCは、コンパイルプロセス全体の鍵となるfoldと呼ばれるステップを使用します。これには、コードツリーを元のソースコードとは異なる形式に変換するという副作用が折り畳みステップ中または折り畳みステップ後にエラーが見つかった場合、それを元のソースの1つの場所に戻すのは難しい場合がさらに、IDE内でGCCスタックを使用するベンダーは、構文の強調表示やインテリジェントなコード補完などの機能を提供するために、コードのインデックスを作成するために個別のツールを使用する必要が
Clangは、コンパイルプロセス中にGCCよりも多くの情報を保持し、元のコードの全体的な形式を保持するため、エラーを元のソースに簡単にマッピングできます。Clangのエラーレポートは、より詳細で、具体的で、機械可読であるため、IDEはコンパイラの出力にインデックスを付けることができます。コンパイラのモジュラー設計は、ソースコードのインデックス作成、構文チェック、および通常は迅速なアプリケーション開発システムに関連するその他の機能を提供できます。解析ツリーはまた、自動化された支持に適しているリファクタリングを、それが直接、元のソースコードを表すように、。
Clangは、C、C ++、Objective-C、Objective-C ++などのCに似た言語のみをコンパイルします。多くの場合、Clangは必要に応じてGCCを置き換えることができ、ツールチェーン全体に他の影響を与えることはありません。一般的に使用されるGCCオプションのほとんどをサポートします。FLANGのによるプロジェクトのNvidiaとポートランドグループが追加されますFortranのサポートを。ただし、Adaなどの他の言語の場合、LLVMはGCCまたは別のコンパイラフロントエンドに依存したままです。

パフォーマンスとGCCの互換性
ClangはGCCと互換性がそのコマンドラインインターフェイスは、GCCのフラグとオプションの多くを共有しています。Clangは多くのGNU言語拡張機能とコンパイラ組み込み関数を実装しており、そのうちのいくつかは純粋に互換性のためのものです。たとえば、ClangはC11アトミックに正確に対応するアトミック組み込み関数を実装していますが__sync_*、GCCおよびlibstdc ++との互換性のためにGCCの組み込み関数も実装しています。Clangは、GCCで生成されたオブジェクトコードとのABI互換性も維持します。実際には、ClangはGCCのドロップイン代替品です。
Clangの開発者は、GCCなどの競合するコンパイラと比較して、メモリフットプリントを削減し、コンパイル速度を上げることを目指しています。2007年10月、ClangはGCCの約6分の1のメモリとディスク容量を使用しながら、GCCの2倍以上の速度でCarbonライブラリをコンパイルしたと報告しています。 2011年までに、Clangはコンパイラーのパフォーマンスにおいてこの利点を保持しているようです。 2014年半ばの時点で、Clangは、コンパイル時間とプログラムパフォーマンスのベンチマークが混在している場合でも、GCCよりも一貫して高速にコンパイルされます。ただし、2019年までに、ClangはLinuxカーネルのコンパイルがGCCよりも大幅に遅くなりますが、LLVMのコンパイルはわずかに速くなります。
Clangは歴史的にコンパイル時にGCCよりも高速でしたが、出力品質は遅れています。2014年の時点で、Clangでコンパイルされたプログラムのパフォーマンスは、GCCでコンパイルされたプログラムのパフォーマンスよりも遅れており、場合によっては大きな要因(最大5.5倍)によって、パフォーマンスが遅いという以前のレポートを複製しています。それ以来、両方のコンパイラはパフォーマンスを向上させるために進化してきましたが、ギャップは狭くなっています。
2016年11月のテストファイルの大規模なハーネスでのGCC4.8.2とclang3.4の比較は、GCCが十分に最適化されたソースコードでclangを約17%上回っていることを示しています。テスト結果はコード固有であり、最適化されていないCソースコードはそのような違いを元に戻すことができます。したがって、2つのコンパイラはほぼ同等のように見えます。
2019年のIntelIce Lakeでの比較では、Clang 10によって生成されたプログラムが41の異なるベンチマークでGCC10のパフォーマンスの96%を達成したことが示されています(22を獲得し、そのうち19を失いました)。
2021年には、LLVM2.7とLLVM11のパフォーマンスおよびコンパイル時間を比較するためのベンチマークが作成されました。結論として、LLVM 11は、最適化を使用してコードをコンパイルするのに2倍の時間がかかる傾向があり、その結果、10年以上前のLLVM 2.7と比較して、10〜20%高速に実行されるコードを生成します(いずれかの方向に時折外れ値があります)。

インターフェース
libclangはCインターフェースを提供し、比較的小さなAPIを提供します。公開される機能には、ソースコードのASTへの解析、ASTのロード、ASTのトラバース、ソースの場所とAST内の要素の関連付けが含まれます。

ステータス履歴
この表は、Clangの歴史における重要なステップとリリースのみを示しています。
日にち ハイライト
2007年7月11日
オープンソースライセンスの下でリリースされたClangフロントエンド
2009年2月25日
Clang / LLVMは、動作するFreeBSD カーネルをコンパイルできます。
2009年3月16日
Clang / LLVMは、動作するDragonFlyBSDカーネルをコンパイルできます。
2009年10月23日
Clang 1.0がリリースされ、LLVM2.6が初めてリリースされました。
2009年12月
CおよびObjective-Cのコード生成は、本番品質に達します。C ++およびObjective-C ++のサポートはまだ不完全です。Clang C ++はGCC4.2 libstdc ++を解析し、重要なプログラム用の動作するコードを生成し、それ自体をコンパイルすることができます。
2010年2月2日
Clangセルフホスティング。
2010年5月20日
Clangの最新バージョンはBoostC ++ライブラリを正常に構築し、ほぼすべてのテストに合格しました。
2010年6月10日
Clang / LLVMはFreeBSDの不可欠な部分になりますが、デフォルトのコンパイラは依然としてGCCです。
2010年10月25日
Clang / LLVMは、動作する変更されたLinuxカーネルをコンパイルできます。
2011年1月
ドラフトC ++ 0x標準をサポートするための予備作業が完了し、ドラフトの新機能のいくつかがClang開発バージョンでサポートされています。
2011年2月10日
Clangは、動作するHotSpotJava 仮想マシンをコンパイルできます。
2012年1月19日
ClangはNetBSDクロスプラットフォームビルドシステムのオプションコンポーネントになりますが、GCCは依然としてデフォルトです。
2012年2月29日
Clang 3.0は、Debianアーカイブの91.2%を再構築できます。
2012年2月29日
クランは、デフォルトコンパイラになりMINIX 3
2012年5月12日
Clang / LLVMは、FreeBSDでGCCを置き換えることを発表しました。
2012年11月5日
クランは、デフォルトコンパイラになりFreeBSDのAMD64 / i386で10.xの。
2013年2月18日
Clang / LLVMは、Nexus7用に 動作する変更されたAndroidLinuxカーネルをコンパイルできます。
2013年4月19日
ClangはC ++ 11の機能を完備しています。
2013年11月6日
ClangはC ++ 14機能を完備しています。
2014年9月11日
Clang 3.5は、Debianアーカイブの94.3%を再構築できます。主にGCCフラグとの互換性が向上したため、失敗の割合は2013年1月以降リリースごとに1.2%減少しました。
2016年10月 ClangはAndroid のデフォルトコンパイラになります(その後、Android NDK でサポートされるコンパイラのみ)。
2017年3月13日 Clang4.0.0がリリースされました
2017年7月26日
クランは、デフォルトコンパイラになりOpenBSDのAMD64 / i386で6.2。
2017年9月7日 Clang5.0.0がリリースされました
2018年1月19日
Clangは、OpenBSD6.3のarmのデフォルトコンパイラになります。
2018年3月5日 Clangは、Windows用のGoogleChromeの構築に使用されるようになりました。
2018年3月8日 Clang6.0.0がリリースされました
2018年9月5日 Clangは、Windows用のFirefoxのビルドに使用されるようになりました。
2018年9月19日 Clang7.0.0がリリースされました
2019年3月20日 Clang8.0.0がリリースされました
2019年7月1日
クランは、デフォルトコンパイラになりOpenBSDのMIPS64に6.6。
2019年9月19日 Clang 9.0.0は、公式のRISC-Vターゲットサポートとともにリリースされました。
2020年2月29日 Clangは、GCCを削除することで、FreeBSDベースシステムで唯一のCコンパイラになります。
2020年3月24日 Clang10.0.0がリリースされました
2020年4月2日
クランは、デフォルトコンパイラになりOpenBSDのPowerPCで6.7。
2020年10月12日 Clang11.0.0がリリースされました
2020年12月21日
クランは、デフォルトコンパイラになりOpenBSDのmips64elに6.9。
2021年4月14日 Clang12.0.0がリリースされました
2021年10月4日 Clang13.0.0がリリースされました

も参照してください
image"
 無料のオープンソースソフトウェアポータル
AMD最適化C / C ++コンパイラ LLDB ポータブルCコンパイラ

参考文献
^ 「LLVM2.1リリースノート」。llvm.org。LLVM開発者グループ。
^ 「LLVMダウンロードページ」。llvm.org。LLVM開発者グループ。
^ 「リリース」。llvm / llvm-プロジェクトリポジトリ。LLVM開発者グループ。2021年8月27日–GitHub.com経由。
^ “”LICENSE.TXT””、llvm.org、LLVM Developer Group 、
^ 「LLVM開発者ポリシー」、llvm.org、LLVM開発者グループ、§著作権、ライセンス、および特許
^ クリストファー、エリック
「Clangの発音を単純に不思議に思う」。LLVMdev(メーリングリスト)。
^ 「OpenMPサポート」。LLVMプロジェクトブログ。
^ 「移植性のためのC ++ヘテロジニアスコンピューティングインターフェイス」。
^ 「Clang言語拡張」。ここにリストされている言語拡張機能に加えて、Clangは幅広いGCC拡張機能をサポートすることを目指しています。
^ Clang-機能と目標:GCC互換性、2013年4月15日
^ 「Clang静的アナライザー」。LLVM 。
^ 「GettingInvolvedwith the Clang Project」、clang.llvm.org、LLVM Developer Group 、
、ClangはLLVMプロジェクトのサブプロジェクトですが、コミュニティにはさまざまな関心を持つ人々がいるため、独自のメーリングリストが
^ “”ClangでのC ++およびC ++ ‘0xのサポート””。LLVM。
^ 「Clang6.0.0リリースノート」。LLVM。
^ 御馳走、アダム
「Qt4のLLVMコンパイル用のmkspecsとパッチ」。Qt4-preview-feedback(メーリングリスト)。
^ ラトナー、クリス
OpenGLおよびその他のもの(スライド)用のLLVM。LLVM開発者会議。
^ Zadeck、Kenneth
「Re:LLVM / GCC統合提案」。GCC開発(メーリングリスト)。
^ ナロフ、スティーブ
新しいLLVMCフロントエンド(スライド)。LLVM開発者会議。
^ ラトナー、クリス
“”新しいLLVMCフロントエンド:”” clang “” “”。cfe-dev(メーリングリスト)。
^ Clangチーム、clang:LLVM用のC言語ファミリーフロントエンド ^ Clang:ユーティリティとアプリケーション:ライブラリベースのアーキテクチャ ^ FLANG:NVIDIAがFortranをLLVMにもたらします ^ Clangは、2020年5月にGCCのドロップイン代替品として使用されることがよく
^ Clang-機能と目標:高速コンパイルと低メモリ使用、2007年10月
^ Simonis、Volker
「Clangを使用したHotSpotVMのコンパイル」。
全体的なGCCの互換性は優れており、コンパイル時間は印象的ですが、生成されたコードのパフォーマンスは、最近のGCCバージョンに比べてまだ不足しています。
^ 「GCC4.5に対するLLVMとClangのベンチマーク」。マイケル・ララベル。LLVM-GCCとClangのバイナリはどちらも、Pfamデータベース検索の時限HMMerベンチマークでGCC4.5.0と競合するのに苦労していました。LLVM-GCCとClangは約23%遅くなりました(…)LLVM / Clangは現時点ではパフォーマンスのチャンピオンではありませんが、両方のコンポーネントは引き続き非常に活発に開発されており、今後さらに多くのニュースが報告されることを願っています。数ヶ月
^ “”GCC 4.9 VS. LLVM Clang 3.5Linuxコンパイラベンチマーク””。OpenBenchmarking.org。
^ Michael Larabel
「LLVMClangはIntelIce LakeでGCCのパフォーマンスを最大96%達成します」。
^ 「ClangvsGCC-どちらがより良いバイナリを生成しますか?」。stackoverflow.com 。
^ 「2021年にclang2.7はどのように持ちこたえますか?」。
^ Divacky、ローマ人。「 clang / llvmはi386 / amd64で起動中のFreeBSDカーネルをコンパイルできます」。
^ クランの構築FreeBSDでは、Wiki.freebsd.org、
し、9月18日2012年の
^ ホルヌング、アレックス。「llvm / clangもう一度」。
^ Clang、DragonFly BSD 、
^ 「ClangはLLVMとClangをコンパイルできます」。LLVMプロジェクトブログ。
^ 「Clangは正常にセルフホストします」。LLVMプロジェクトブログ。
^ グレゴール、ダグ
「Clang ++ビルドブースト!」。LLVMプロジェクトブログ。
^ デイビス、ブラッド。「FreeBSDステータスレポート2010年4月〜6月」。
^ Clangは、動作するLinuxカーネル(SMP、ネットワーキング、X、セルフホストを備えたRL5へのブート)、Lists.cs.uiuc.eduを構築し、2015年9月7日にオリジナルからアーカイブされ、 されました
^ グレゴール、ダグラス
「Clangでの新しいC ++ 0x機能のサポート」(メーリングリスト)。
^ Sonnenberger、Jörg
「NetBSDとLLVMの状況」。
^ Ledru、Sylvestre。「clangを使用したDebianアーカイブの再構築」。
^ 「公式Minix3ウェブサイト:ニュース」。
^ Gerzo、Daniel
「FreeBSDQuarterlyStatus Report 2012年1月〜3月」(メーリングリスト)。
^ デイビス、ブルックス
「HeadsUp:Clangがx86のデフォルトになりました」(メーリングリスト)。
^ Webster、Behan
「LLVMLinux:LLVMを使用したAndroidのコンパイル」(PDF)。
^ Tinti、Vinicius
「LLVMLinux:Nexus7」。
^ Du Toit、Stefanus。「Clangは*今*の時点で完全なC ++ 11機能です!」。
^ “”[llvm-project]リビジョン194194″”。
^ Ledru、Sylvestre。「Clang3.5.0を使用したDebianの再構築」。
^ 「NDKリビジョン履歴| Android開発者」。developer.android.com 。
^ 「NDKリビジョン履歴| Android NDK | Android開発者」。Android開発者。
^ Nagy、Robert
「amd64およびi386のデフォルトコンパイラをclangに切り替えます」(メーリングリスト)。
^ Kettenis、Mark
「armv7のデフォルトコンパイラをclangに切り替えます」(メーリングリスト)。
^ 「Clangは現在ChromeforWindowsのビルドに使用されています」。blog.llvm.org。
^ 「Firefoxベータ63.0ベータ、すべての新機能、アップデート、修正を見る」。www.mozilla.org 。
^ ハンカラ、ビザ
「octeonのデフォルトコンパイラをclangに切り替えます」(メーリングリスト)。
^ 「公式のRISC-Vターゲットサポート、Asm Goto、Clang9などを備えたLLVM9リリース」。riscv.org。
^ 「FreeBSDsvncommitr358454」。
^ Kettenis、Mark
「powerpcのデフォルトコンパイラをclangに切り替えます」(メーリングリスト)。
^ ハンカラ、ビザ
「clangをloongsonのデフォルトコンパイラにする」(メーリングリスト)。

外部リンク
公式ウェブサイト
image   image
Clang&oldid=1062363275″