Clangとは? わかりやすく解説

clang

別表記:クラング

「clang」の意味・「clang」とは

「clang」は英語の単語で、主に音を表す言葉として用いられる具体的には、金属ぶつかった時に発生する響き音色を指す。また、動詞として用いることもあり、その場合は「鳴り響く」「響く」といった意味を持つ。例えば、鐘が鳴る音や鍵が落ちる音など、特に金属的な響きを持つ音を表現する際に用いられる

「clang」の発音・読み方

「clang」の発音は、IPA表記では /klæŋ/ となる。IPAカタカナ読みでは「クラング」となる。日本人発音するカタカナ英語では「クラング」と読むのが一般的である。この単語発音によって意味や品詞が変わるものはないため、一定の読み方理解することが可能である。

「clang」の定義を英語で解説

「clang」は、"A loud, resonant, metallic sound"と定義される。これは「大きく響き渡る金属的な音」という意味である。また、動詞としては "To make a loud, resonant, metallic sound"と定義され、これは「大きく響き渡る金属的な音を立てる」という意味になる。

「clang」の類語

「clang」の類語としては、「clank」、「clink」、「jingle」などがある。これらも同様に特定の音を表現するための単語である。「clank」は重い金属音、「clink」は軽い金属音、「jingle」は小鈴の音などを表す。

「clang」に関連する用語・表現

「clang」に関連する用語としては、「clangor」、「clanging」などがある。「clangor」は「clang」から派生した名詞で、大きな騒音鳴り響く音を指す。「clanging」は「clang」の現在分詞形で、鳴り響く音を立てる行為や状態を表す。

「clang」の例文

以下に「clang」を用いた例文10個示す。 1. The bell clanged loudly in the tower.(鐘が塔で大きく鳴り響いた。)
2. The coins clanged in the jar.(硬貨が瓶の中で鳴り響いた。)
3. The sword fight was filled with the clang of metal.(剣闘では金属の鳴り響く音が満ちていた。)
4. The clang of the hammer echoed in the room.(ハンマー鳴り響く音が部屋響いた。)
5. The clang of the alarm woke everyone up.アラーム鳴り響く音でみんなが目を覚ました。)
6. The clang of the closing door was heard throughout the house.(閉まるドア鳴り響く音が家中響いた。)
7. The clang of the blacksmith's anvil could be heard from a distance.(鍛冶屋金床鳴り響く音が遠くから聞こえた。)
8. The clang of the church bell marked the hour.(教会の鐘鳴り響く音が時間告げた。)
9. The clang of the cymbals added to the music.(シンバル鳴り響く音が音楽加わった。)
10. The clang of the train's wheels on the tracks was constant.(列車車輪線路に当たる鳴り響く音は絶え間なかった。)

Clang

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/13 07:02 UTC 版)

LLVM > Clang
Clang
作者 Chris Lattner
開発元 LLVM Developer Group
初版 2007年9月26日 (17年前) (2007-09-26)[1]
最新版
19.1.5[2]  - 2024年12月3日 (10日前)
リポジトリ
プログラミング
言語
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 19.1.5 Released!"; 作品または名前の言語: 英語; 出版日: 2024年12月3日; 閲覧日: 2024年12月4日.
  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日閲覧。

関連項目

外部リンク


clang

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2011/03/03 16:25 UTC 版)

clang
作者 Chris Lattner 他
開発元 アップル インコーポレイテッド
プログラミング言語 C++
対応OS Unix系
プラットフォーム クロスプラットフォーム
サポート状況 開発中
種別 コンパイラ
ライセンス University of Illinois/NCSA Open Source License[1]
公式サイト http://clang.llvm.org/
  

clang (クラン(グ)のように発音 [2] )とは、CC++Objective-Cプログラミング言語向けのコンパイラフロントエンドであり、Low Level Virtual Machine (LLVM) をバックエンドとして使用する。現在まだ開発中であるが、完成すればGNUコンパイラコレクション(GCC)を置き換えるものになる可能性がある。開発にはアップルが資金提供しており、BSD ライクなオープンソースライセンスで配布されている。

Clang プロジェクトではコンパイラのフロントエンドに加えて Clang 静的コード解析ツールを開発している[3]

目次

背景

2005年初頭、アップルは LLVM システムを自社で開発している様々なシステム内で利用するための作業を開始した[4]。LLVM は GCC のツールチェインの低レベルの部分を置き換えることが可能であり、GCC の3番地コードによる中間表現よりも積極的な最適化が可能である。LLVM では GCC 同様にコードを静的にコンパイルすることも、Java のようにJITコンパイルを用いて後で中間言語から機械語に変換することもできる。

アップルは LLVM を多数の商用システムに使用している。現在最も目に触れるのは Mac OS X 用の OpenGL コードコンパイラであり、OpenGL をサポートしないGPU用に、これは OpenGL の呼び出しをより基礎的なコードに変換する。これにより、アップルはIntel GMAチップセットを搭載したコンピュータ上でも、 OpenGL の API 全体をサポートできるようになった[5] 。もっと強力なチップセット用にはコードは使用するハードウェアの機能を用いるようコンパイルされるが、GMA を用いたシステムでは同じ OpenGL のコードを同じように動作するソフトウェアのサブルーチンに置き換える。LLVM は iPhone の開発キットや、Xcode 3.1 の一部である。

当初 LLVM は GCC ツールチェーンの一部となることを目標にしていたが、最近では GCC の他の部分を置き換えることにも興味の対象を置いている。GCC は巨大なシステムで開発がしづらい面もあり、長年の GCC の開発者の一人は「カバにダンスを踊らせるのはあまり楽しいことではない」と述べている[6]。アップルは Objective-C (ObjC) を多用しているため性能を向上させることに興味を抱いていたが、通常の GCC の開発からはほとんど進展が見られず、ObjC の性能を上げるためには、 GCC をアップル版に分岐させるか、新しいコンパイラを採用するかを選択することになった。

LLVM は元々イリノイ大学アーバナ・シャンペーン校で開発され、BSDライクなライセンスでリリースされていた[7]。したがって clang は再配布に制約がほとんどないが、GCC は GPL でライセンスされており、開発者にコードを GPL で配布してもらう必要があった。

概要

clang は C をターゲットとした新しいコンパイラで、LLVM 上で動作することを意図して設計されている[7]。clang と LLVM の組み合わせによって、ツールチェインの大半の機能を提供し、GCC スタック全体の置き換えが可能になる。clang の主要な目標の一つは、統合開発環境の GUI と密接に連携したよりよい増分コンパイルのサポートである。GCC は古典的なコンパイル-リンク-デバッグのサイクルで用いるよう設計されており、増分コンパイルと実行中のコンパイルをサポートしているものの、他のツールと統合して使うことは簡単ではない。たとえば GCC のコンパイルにはコンパイル全体の中で重要な "fold" という段階があるが、これはコードツリーを元のソースコードと大きく異なる形に変換してしまう。fold 中、あるいはその後でエラーが発見されると、元のソースの一箇所に対応付けるのは難しい。さらに GCC スタックを IDE で使用する場合、コードの色付表示や自動補完などの機能のために、コードをインデックス化する別のツールが必要になる。

clang は、コンパイル中に GCC よりも多くの情報を取得し、得られた情報を元のコードと同じ形態で保存する。また clang によるエラーの報告は、より詳細で具体的であり IDE などが表示しやすいようプログラムで利用できる書式になっている。コンパイラは動作させたままで、ソースコード 索引付け、文法のチェックなどのRADに関係したその他の機能を実行する。またコードは常にパース可能なテキストであるので、clang が出力する解析木は自動的なリファクタリングをサポートするのに適している。

GCC は一回のコンパイルにはマルチスレッドをサポートしておらず、一回のコンパイル単位でマルチプロセッサのハードウェアの恩恵を受けられない。一方 clang はメモリ使用量の削減と速度の向上を目指して最初からマルチスレッド対応で設計されている。2007年10月の時点で、clang はCarbon のライブラリを、メモリとディスクを1/5程度しか使用せずに、GCC の二倍以上の速度でコンパイルできる[8]

GCC を用いた開発には困難な点もあるが、その理由については開発者が十分調査を行ってきた。その結果 clang チームは GCC の問題を避け、より柔軟なシステムを構築できるようになった。clang はモジュラー化されており、コンパイル時にバイナリに組み込まれてしまうソースコードモジュールではなく、ほぼリンク時に置換できるライブラリだけに依存しており、しかもよく文書化されている。新しい開発者が clang を使いこなし、開発に加わるスピードを加速させる。ライブラリは実行時に交換可能な複数のバージョンで提供される場合もあり、例えばパーサーは、コンパイルの性能測定の機能を持ったバージョンもある。

clang は名前が示すとおり C と Cライクな言語専用のコンパイラであり、C、C++、Objective C 以外の言語のフロントエンドは提供しない。JavaFORTRANAda など他の言語については LLVM は GCC に依存し続ける。clang は必要に応じてツールチェイン全体には影響を与えず GCC と交換することができる[要出典]

現在の状況

プロジェクトは現在も活発に開発中だが、2008年10月の時点で、C 用のコード生成部分は完了しており、Objective-C のコード生成も部分的に完了している。C++ と Objective-C++ のサポートはまだ完成していない。プロジェクトチームによれば「今後2年程度、十分な C++ のサポートは期待していない」[7]

歴史

2009年2月25日、clang/LLVM が動作する FreeBSD カーネルをコンパイルできたことが発表された[9][10]。2009年3月16日、clang/LLVM が動作する DragonFly BSD カーネルをコンパイルできたことが発表された[11][12]。しかし、Linux カーネルのコンパイルには更なる作業が必要である[13]

2009年3月16日、clang/LLVM が実動作するDragonFly BSDカーネルをコンパイルできたことが発表された[14][15]

2009年5月9日、FreeBSD Status Report において、FreeBSD プロジェクトが gcc を clang で置き換えられるかどうか調査していることが報告された[16]

2009年10月23日、Clang 1.0 が、初めて LLVM 本体と同時にリリースされた。

2009年12月までに、C および Objective-C のコード生成能力は製品レベルに達した。しかし、C++、Objective-C++ のサポートは不完全であった。Clang C++ は GCC 4.2 の libstdc++ をパースし、小規模なプログラムのコードを生成でき[7]、自分自身をコンパイル可能となった[17]

2010年2月5日、LLVM Project Blog において、Clang がセルフホスティングなコンパイラとなったことが発表された[18]

2010年6月9日に LLVM と clangが FreeBSD のソースコードツリーに取り込まれた。最初は、デフォルトのコンパイラにはならないが、外部コンパイラによるビルドをサポートした上で、デフォルトのシステムコンパイラになる予定である。 [19]

2010年10月25日にLLVMとclangがLinuxカーネルをコンパイルし動作したと発表された。[20]

参考文献

関連項目

外部リンク


Clang

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/04 02:05 UTC 版)

C言語」の記事における「Clang」の解説

LLVMバックエンドとして用いオープンソースC/C++Objective-Cコンパイラ多数CPUに対応。

※この「Clang」の解説は、「C言語」の解説の一部です。
「Clang」を含む「C言語」の記事については、「C言語」の概要を参照ください。

ウィキペディア小見出し辞書の「Clang」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Clang」の関連用語

Clangのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Clangのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
実用日本語表現辞典実用日本語表現辞典
Copyright © 2025実用日本語表現辞典 All Rights Reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのClang (改訂履歴)、clang (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのC言語 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS