通信用語の基礎知識 全国のICカードこれひとつ 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > ソフト > プログラミング > 言語 > C
電子計算機 > ソフト > プログラミング > 言語 > C > C++
電子計算機 > ソフト > プログラミング > 言語 > C > Objective-C
clang
辞書:電算用語の基礎知識 ローカルアプリ一般編 (PNAPLLI)
読み:クラン
外語:clang
品詞:固有名詞

Low Level Virtual Machine(LLVM)のフロントエンドの一つで、オリジナルのC/C++/Objective-Cコンパイラーである。Cを大文字にClangとも書かれている。

目次
仕様
概要

clangは、LLVMコンパイラーバックエンドのために新規に開発された、C/Objective-C/C++コンパイラーである。

プロジェクトの目標は、次の通りとされている。

特徴
性能

clangは、C++14のドラフト仕様にGCCよりも速く対応した、高性能なコンパイラーである。

アプリケーションだけでなく、OSのカーネルもビルドできる。FreeBSDDragonFly BSDなどのビルドが可能で、実際にFreeBSD 10からはGCCを捨ててclang/llvmを正式採用した。

clangはC/C++/Objective-Cの公式仕様への準拠はもちろん、GCCの拡張機能にも対応している。

Linuxカーネルのように、GCCの拡張機能を多用したプログラムでもかなりの部分までビルドが可能である。GCCより性能のよいclangは、Linuxカーネルのビルドにも適しているため望まれているが、しかしGCC拡張には「汚い」拡張も目立ち、こういった不潔なものはclang/llvm陣営は意地でも対応したくないとしていることから、Linux側を衛生的に清掃しないかぎりは完全対応は不可能である。

clangが対応しないVLAIS

GCCが昔から対応していた可変長配列(VLA=variable length array)は、C99から正式採用された。

しかしGCCには、C99でも採用されなかった拡張がある。GCC拡張では、この可変長配列は構造体内でも宣言することができる。これは構造体内可変長配列(VLAIS=variable length array in structs)と呼ばれている。

具体的には次のような宣言である。

int main()
{
    int size = 1;
    struct
    {
        char array[size];
    } st;
    return 0 ;
}

GCCならもちろんビルドできるが、clang/llvmでは対応する気がない宣言をエラーメッセージに見ることができる。

> clang test.c
test.c:6:14: error: fields must have a constant size: 'variable length array in structure'
      extension will never be supported
        char array[size];
             ^
1 error generated.
>

訳すと、「test.c:6:14: エラー: フィールドは一定のサイズでなければならない: '構造体内可変長配列' 拡張機能がサポートされることはない」となる。

そこで、LinuxをLLVMでビルドすることを目指すLLVMLinux Projectでは、clangおよびLinuxカーネル双方に改良の働きかけをしている。

経緯
沿革
バージョン

LLVM 2.7以降、clangのバージョンはLLVMと一致している(新しい順)。

clang 3.7
clang 3.6
clang 3.5
clang 3.4
clang 3.3
clang 3.1
clang 3.0
リンク
関連するリンク
http://clang.llvm.org/
用語の所属
コンパイラー
Low Level Virtual Machine
関連する用語
C
C++
Objective-C
libc++
clang/LLVM

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic