(Translated by https://www.hiragana.jp/)
Clang - Wikipedia コンテンツにスキップ

Clang

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
LLVM > Clang
Clang
作者さくしゃ Chris Lattner
開発元かいはつもと LLVM Developer Group
初版しょはん 2007ねん9がつ26にち (16ねんまえ) (2007-09-26)[1]
最新さいしんばん
18.1.8[2] ウィキデータを編集 - 2024ねん6がつ18にち (2かげつまえ)
リポジトリ ウィキデータを編集
プログラミング
言語げんご
C++
対応たいおうOS macOS, Unixけい, Microsoft Windows
プラットフォーム クロスプラットフォーム
サポートじょうきょう 開発かいはつちゅう
種別しゅべつ コンパイラ
ライセンス イリノイ大学だいがく/NCSAオープンソースライセンス[3]
LLVM例外れいがいApache License 2.0 (バージョン9.0.0以降いこう[4])
公式こうしきサイト clang.llvm.org
テンプレートを表示ひょうじ

Clang ([ˈklæŋ]:クランのように発音はつおん[5]) は、プログラミング言語げんご CC++Objective-CObjective-C++ けのコンパイラフロントエンド英語えいごばんである。OpenMPディレクティブ[6]や、OpenCL C/C++カーネル言語げんご[7]正式せいしきサポートしている。バックエンドにLLVMのコンパイラ基盤きばん使用しようしており、LLVM 2.6以降いこうはLLVMのリリースサイクルまれている。

Clang/LLVMベースの派生はせいプロジェクトとして、RenderScript英語えいごばんCUDAのNVCC[8]ROCm英語えいごばんのHIP-Clang[9]といった、Cライクなドメイン固有こゆう言語げんご (DSL) をんだGPGPUフレームワークにおけるコンパイラフロントエンドとしても採用さいようされている。

プロジェクトの目標もくひょうは、GNUコンパイラコレクション (GCC) をえることのできるコンパイラを提供ていきょうすることである[10][11]開発かいはつ完全かんぜんにオープンソースの方法ほうほうすすめられており、AppleMicrosoftGoogleARMソニーインテルAMDなどのだい企業きぎょう貢献こうけんしゃとなっている。ソースコードは、イリノイ大学だいがく/NCSAオープンソースライセンス提供ていきょうされている。バージョン9.0.0からはライセンスがLLVM例外れいがいApache License 2.0変更へんこうされた[4]

macOSおよびiOS(ともにXcode付属ふぞくとして)、ならびにFreeBSDにおいて標準ひょうじゅんのコンパイラとして採用さいようされている。

ClangプロジェクトではコンパイラのフロントエンドくわえてClang静的せいてきコード解析かいせきツール(Clang-Tidy)も開発かいはつされている[12]

背景はいけい

[編集へんしゅう]

2005ねん初頭しょとう、AppleはLLVMシステムを自社じしゃ開発かいはつしている様々さまざまなシステムない利用りようするための作業さぎょう開始かいしした[13]。AppleはObjective-C多用たようしているため、GCCの性能せいのう向上こうじょう興味きょうみいていたがほとんど進展しんてんられず、Objective-Cの性能せいのうげるためにGCCをAppleばん分岐ぶんきさせるか、あたらしいコンパイラを採用さいようするかの選択せんたくをせまられていた。そこで、AppleはC99、Objective-CおよびC++をサポートするコンパイラを1から作成さくせいした。このClangプロジェクトは2007ねん7がつにオープンソースされた。

LLVMは当初とうしょ、GCCのフロントエンドを使用しようすることを想定そうていしていた。しかし、GCCのソースコードはだい規模きぼで、やや面倒めんどうなシステムである。ある長年ながねんのGCC開発かいはつしゃは、「Trying to make the hippo dance is not really a lot of fun.(カバにダンスをおどらせるのは、あまりたのしいことではない)」とべている[14]

概要がいよう

[編集へんしゅう]

ClangはCをターゲットとしたあたらしいコンパイラで、LLVMじょう動作どうさすることを意図いとして設計せっけいされている[15]。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の2ばい以上いじょう速度そくどでコンパイルできる[16]

GCCをもちいた開発かいはつには困難こんなんてんもあるが、その理由りゆうについては開発かいはつしゃ十分じゅうぶん調査ちょうさおこなってきた。その結果けっかClangチームはGCCの問題もんだいけて、より柔軟じゅうなんなシステムを構築こうちくできるようになった。Clangはモジュラーされており、コンパイルにバイナリにまれてしまうソースコードモジュールではなく、ほぼリンク置換ちかんできるライブラリだけに依存いぞんしており、しかもよく文書ぶんしょされている。あたらしい開発かいはつしゃがClangを使つかいこなし、開発かいはつくわわるスピードを加速かそくさせる。ライブラリは実行じっこう交換こうかん可能かのう複数ふくすうのバージョンで提供ていきょうされる場合ばあいもあり、たとえばパーサーは、コンパイルの性能せいのう測定そくてい機能きのうったバージョンもある。

Clang は名前なまえしめすとおりCやCに言語げんご専用せんようのコンパイラであり、C、C++、Objective-C、Objective-C++、OpenCLCUDA以外いがい言語げんごのフロントエンドは提供ていきょうしない。FortranAdaGo については LLVM は GCC (dragonegg) に依存いぞんつづける。Clang は必要ひつようおうじてツールチェイン全体ぜんたいには影響えいきょうあたえず GCC と交換こうかんすることができる[よう出典しゅってん]非公式ひこうしきのサブプロジェクトとしてNVIDIA開発かいはつした Flang により Fortran サポートが追加ついかされた[17]

現在げんざい状況じょうきょう

[編集へんしゅう]

プロジェクトは2023ねん現在げんざい活発かっぱつ開発かいはつおこなわれている。これまでにC89C++17までの標準ひょうじゅん規格きかくへの準拠じゅんきょ完了かんりょうしている[18][19]。C99/C11/C17にかんしては重要じゅうよう機能きのう実装じっそうしているが、完全かんぜん準拠じゅんきょではない。つづきC23およびC++20以降いこうのサポートを目指めざ開発かいはつおこなわれている。

Googleが提供ていきょうするAndroidけのC/C++言語げんご開発かいはつキットであるAndroid NDK(Native Development Kit)では、従来じゅうらいGCCが標準ひょうじゅんであったが、2012ねん11月リリースのリビジョンr8cからClangがふく選択肢せんたくしとして追加ついかされ、2016ねん10がつリリースのリビジョンr13bからはClangが標準ひょうじゅんとなった[20]。2018ねん9がつリリースのリビジョンr18bにてGCCは削除さくじょされた。

Microsoft WindowsうえでClangを使用しようするには、CygwinMinGWといったPOSIX互換ごかんのサブシステムを利用りようする方法ほうほうのほか、WindowsようLLVMバイナリを利用りようする方法ほうほうもある[21]Visual Studioはバージョン2019 (16.2) 以降いこうで、Windows/Linuxようバイナリを生成せいせいするMSBuildプロジェクトのC/C++コンパイラにClangを使用しようできるようになった[22]MSVC (cl.exe) 互換ごかんのclang-clもある[23]

Microsoft DirectX (Direct3D) 12で導入どうにゅうされたシェーダーモデル6.0以降いこう機能きのうをサポートするHLSLコンパイラとして、マイクロソフトはDirectX Shader Compiler (DXC) とばれるClangベースの派生はせいコンパイラを開発かいはつしてきたが、HLSLサポートを本家ほんけClangのコードベースにむプロジェクトが進行しんこうちゅうである[24][25]

Intel C++ Compiler (ICC/ICL) や、C++Builder (BCC) も、Clangをベースに独自どくじ拡張かくちょう機能きのう追加ついかした派生はせいコンパイラとしてまれわっている[26][27]

歴史れきし

[編集へんしゅう]
Clangプロジェクトりゃく
日付ひづけ できごと
2009ねん2がつ25にち Clang/LLVMが、動作どうさするFreeBSDカーネルをコンパイルできたことが発表はっぴょうされた[28][29]
2009ねん3がつ16にち Clang/LLVMが、動作どうさするDragonFly BSDカーネルをコンパイルできたことが発表はっぴょうされた[30][31]。しかし、Linuxカーネルのコンパイルにはさらなる作業さぎょう必要ひつようである[32]
2009ねん5がつ9にち FreeBSD Status Reportにおいて、FreeBSDプロジェクトがGCCをClangでえられるかどうか調査ちょうさしていることが報告ほうこくされた[33]
2009ねん10がつ23にち Clang 1.0が、はじめてLLVM本体ほんたい (LLVM 2.6) と同時どうじにリリース。
2009ねん12月 CおよびObjective-Cのコード生成せいせい能力のうりょく製品せいひんレベルにたっした。しかし、C++、Objective-C++のサポートは不完全ふかんぜんであった。Clang C++はGCC 4.2のlibstdc++をパースし、小規模しょうきぼなプログラムのコードを生成せいせいでき[15]自分じぶん自身じしんをコンパイル可能かのうとなった[34]
2010ねん2がつ5にち LLVM Project Blogにおいて、Clangがセルフホスティングのコンパイラとなったことが発表はっぴょうされた[35]
2010ねん2がつ20日はつか HelenOSのソースコードを修正しゅうせいすることでClangでコンパイルに成功せいこうした。また、IA-32環境かんきょうのカーネルとユーザランドの回帰かいきテストにすべ合格ごうかくした。[36]
2010ねん4がつ27にち Clang 2.7リリース。CIndex APIとPythonバインディングのサポート。[37]
2010ねん5がつ20日はつか 最新さいしんバージョンのClangでBoost C++ライブラリのビルドに成功せいこうし、ほぼすべてのテストに合格ごうかくした。[38]
2010ねん6がつ9にち Clang/LLVMがFreeBSDのソースコードツリーにまれた。最初さいしょは、デフォルトのコンパイラにはならないが、外部がいぶコンパイラによるビルドをサポートしたうえで、デフォルトのシステムコンパイラになる予定よていである。[39]
2010ねん10がつ5にち Clang 2.8リリース。C++98、C++03の機能きのう実装じっそう完了かんりょう。Objective-C++のサポート。[40]
2010ねん10がつ25にち Clang/LLVMがLinuxカーネルをコンパイルし動作どうさしたと発表はっぴょうされた。[41]
2011ねん1がつ C++0xドラフトのサポート準備じゅんび完了かんりょうした。また、開発かいはつバージョンでドラフトのあたらしい機能きのうをサポート。[42][43]
2011ねん2がつ10日とおか HotSpot Java仮想かそうマシンをコンパイルし、動作どうささせることが出来できた。[44]
2011ねん4がつ6にち Clang 2.9リリース。C11機能きのう一部いちぶサポート。[45]
2011ねん12月1にち Clang 3.0リリース。GCC互換ごかんのコマンドラインドライバを改善かいぜん[46]
2012ねん2がつ28にち Clang 3.0によってDebianアーカイブの91%以上いじょうをリビルドすることが出来できた。[47]
2012ねん5がつ12にち FreeBSD Quarterly Status Reportにおいて、FreeBSDはGCCをClang/LLVMでえると発表はっぴょうした。[48]
2012ねん5がつ22にち Clang 3.1リリース。100%互換ごかんではないものの C++11 規格きかくしたが機能きのう大半たいはん実装じっそう[49]
2012ねん12月1にち Clang 3.2リリース。エラーメッセージの改善かいぜんC11, C++11対応たいおう改善かいぜん[50]
2013ねん4がつ 安定あんていばんとしてはリリースだが、C++11規格きかくしたが機能きのうをすべて実装じっそう完了かんりょう[51]
2013ねん6がつ17にち Clang 3.3リリース。識別子しきべつしでのUnicode文字もじ対応たいおうC++11対応たいおう改善かいぜん[52]
2014ねん1がつ6にち Clang 3.4リリース。C++14現時点げんじてんでドラフトにいてある部分ぶぶん実装じっそう[53]
2014ねん9がつ4にち Clang 3.5リリース。C++17の機能きのう実験じっけんてきにサポート。[54]
2015ねん2がつ27にち Clang 3.6リリース。C言語げんごのデフォルトモードをC99からC11に変更へんこう[55]
2015ねん9がつ1にち Clang 3.7リリース。OpenMP 3.1のサポート。OpenMP 4.0の一部いちぶサポート。[56]
2016ねん3がつ8にち Clang 3.8リリース。CUDAの実験じっけんてきサポート。OpenMP 4.0/4.5、OpenCL 2.0の一部いちぶサポート。[57]
2016ねん9がつ2にち Clang 3.9リリース。OpenCL 2.0のサポート。オフロード機能きのうのぞくOpenMP 3.1およびOpenMP 4.0/4.5をサポート。[58]
2017ねん3がつ13にち Clang 4.0.0 リリース。ThinLTOの改善かいぜん[59]
2017ねん9がつ7にち Clang 5.0.0 リリース。C++17機能きのう実装じっそう完了かんりょう[60]
2018ねん3がつ8にち Clang 6.0.0 リリース。Spectre対策たいさくのためにretpolinesをサポート。C++のデフォルトモードをC++98からC++14に変更へんこう。C++2a機能きのう一部いちぶサポート。[61]
2018ねん9がつ19にち Clang 7.0.0 リリース。DWARFv5の実験じっけんてきサポート。[62]
2019ねん3がつ20日はつか Clang 8.0.0 リリース。自動じどう変数へんすう初期しょきオプション。プロファイルのさいマッピングファイルの利用りようをサポート。OpenMP 5.0の一部いちぶサポート。[63]
2019ねん9がつ19にち Clang 9.0.0 リリース。OpenCLけのC++機能きのう実験じっけんてきサポート。GCCのインラインアセンブラにおける独自どくじ拡張かくちょうasm gotoをサポートしx64けLinuxカーネルなどのビルドが可能かのうになった。[64]
2020ねん3がつ24にち Clang 10.0.0 リリース。C++2aのコンセプト (Concepts) をサポート。Windows Control Flow Guard (CFG) に対応たいおう[65]
2020ねん10がつ12にち Clang 11.0.0 リリース。C言語げんごのデフォルトモードをC11からC17に変更へんこう[66]
2020ねん12月21にち OpenBSD 6.9 の mips64el で、Clang がデフォルトのコンパイラとなった[67]
2021ねん4がつ14にち Clang 12.0.0 リリース。アトミック操作そうさ実装じっそうするヘルパー関数かんすうしを有効ゆうこう/無効むこうにするAArch64オプションと、ターゲットとなるbinutilsのバージョンを指定していするオプションが追加ついかされた[68]
2021ねん10がつ4にち Clang 13.0.0 リリース[69]
2022ねん3がつ25にち Clang 14.0.0 リリース[70]
2022ねん9がつ6にち Clang 15.0.0 リリース[71]

参考さんこう文献ぶんけん

[編集へんしゅう]
  1. ^ https://www.llvm.org/releases/2.1/docs/ReleaseNotes.html
  2. ^ "LLVM 18.1.8"; 閲覧えつらん: 2024ねん6がつ18にち; 出版しゅっぱん: 2024ねん6がつ18にち.
  3. ^ LLVM Release License
  4. ^ a b LICENSE.TXT”. llvm.org. 2019ねん9がつ24にち閲覧えつらん
  5. ^ Christopher, Eric (3 July 2008). "simply wonder pronunciation of Clang". LLVMdev (Mailing list). 2008ねん7がつ9にち閲覧えつらん
  6. ^ OpenMP Support”. The LLVM Project Blog. 2016ねん3がつ28にち閲覧えつらん
  7. ^ OpenCL Support — Clang git documentation
  8. ^ CUDA LLVM Compiler | NVIDIA Developer
  9. ^ C++ Heterogeneous-Compute Interface for Portability”. 2020ねん2がつ18にち閲覧えつらん
  10. ^ Clang Language Extensions”. 2017ねん11月8にち閲覧えつらん。 “In addition to the language extensions listed here, Clang aims to support a broad range of GCC extensions.”
  11. ^ Clang - Features and Goals: GCC Compatibility, (15 April 2013), https://clang.llvm.org/features.html#gcccompat 
  12. ^ Clang Static Analyzer”. LLVM. 2009ねん9がつ3にち閲覧えつらん
  13. ^ Adam Treat, mkspecs and patches for LLVM compile of Qt4
  14. ^ Kenneth Zadeck - Re: LLVM/GCC Integration Proposal
  15. ^ a b Clang team, clang: a C language family frontend for LLVM
  16. ^ Clang - Features and Goals: Fast compiles and Low Memory Use”. October 2007閲覧えつらん
  17. ^ FLANG: NVIDIA Brings Fortran To LLVM
  18. ^ Clang - C Programming Language Status
  19. ^ Clang - C++ Programming Language Status
  20. ^ NDK Revision History
  21. ^ LLVM Download Page
  22. ^ Visual Studio プロジェクトでの Clang/LLVM のサポート | Microsoft Docs
  23. ^ Hans Wennborg, Google (2014ねん4がつ). “clang-cl / What it is, how it works, and how to use it (Euro-LLVM 2014)” (PDF). 2021ねん5がつ18にち閲覧えつらん
  24. ^ Opening HLSL Planning - DirectX Developer Blog
  25. ^ HLSL Support — Clang git documentation
  26. ^ インテル® C/C++ コンパイラーが LLVM への対応たいおう完了かんりょう | iSUS
  27. ^ Clang 拡張かくちょう C++ コンパイラ - RAD Studio
  28. ^ Roman Divacky, [ANNOUNCE] clang/LLVM can compile booting FreeBSD kernel on i386/amd64
  29. ^ http://wiki.freebsd.org/BuildingFreeBSDWithClang
  30. ^ Alex Hornung, "llvm/clang once more
  31. ^ http://www.dragonflybsd.org/docs/developer/clang/
  32. ^ Bug 4068 – [META] Compiling the Linux kernel with clang
  33. ^ Brad Davis, "FreeBSD Status Reports January - March, 2009"
  34. ^ LLVM Blog, Clang can compile LLVM and Clang
  35. ^ LLVM Project Blog, "Clang Successfully Self-Hosts!"
  36. ^ HelenOS mainline changeset head,294
  37. ^ LLVM 2.7 Release Notes
  38. ^ Clang++ Builds Boost!
  39. ^ Roman Divacky "Import the build makefiles for clang/LLVM"
  40. ^ LLVM 2.8 Release Notes
  41. ^ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)
  42. ^ New C++0x feature support in Clang
  43. ^ C++ and C++'0x Support in Clang
  44. ^ Compiling the HotSpot VM with Clang
  45. ^ LLVM 2.9 Release Notes
  46. ^ Clang 3.0 Release Notes
  47. ^ Rebuild of the Debian archive with clang
  48. ^ FreeBSD Quarterly Status Report January-March, 2012
  49. ^ Clang 3.1 Release Notes
  50. ^ Clang 3.2 Release Notes
  51. ^ GitHub 「C++11 support is now feature-complete.」
  52. ^ Clang 3.3 Release Notes
  53. ^ Clang 3.4 Release Notes
  54. ^ Clang 3.5.0 Release Notes
  55. ^ Clang 3.6.0 Release Notes
  56. ^ Clang 3.7.0 Release Notes
  57. ^ Clang 3.8.0 Release Notes
  58. ^ Clang 3.9.0 Release Notes
  59. ^ Clang 4.0.0 Release Notes
  60. ^ Clang 5.0.0 Release Notes
  61. ^ Clang 6.0.0 Release Notes
  62. ^ Clang 7.0.0 Release Notes
  63. ^ Clang 8.0.0 Release Notes
  64. ^ Clang 9.0.0 Release Notes
  65. ^ Clang 10.0.0 Release Notes
  66. ^ Clang 11.0.0 Release Notes
  67. ^ Hankala, Visa (21 December 2020). "Make clang the default compiler on loongson" (Mailing list). 2021ねん8がつ8にち閲覧えつらん
  68. ^ released
  69. ^ Clang 13.0.0 Release Notes — Clang 13 documentation”. releases.llvm.org. 2022ねん4がつ19にち閲覧えつらん
  70. ^ Clang 14.0.0 Release Notes — Clang 14.0.0 documentation”. releases.llvm.org. 2022ねん4がつ19にち閲覧えつらん
  71. ^ Clang 15.0.0 Release Notes — Clang 15.0.0 documentation”. releases.llvm.org. 2022ねん10がつ24にち閲覧えつらん

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]