LLVMとは何ですか?なぜそれが必要なのですか?

こんにちは!多くの人がすぐに別の質問したと思います。Habréには100を超える記事があるのに、なぜLLVMに関する別の記事が必要なのですか。私の仕事は、残りの私たち、つまりコンパイラーの作成を計画しておらず、LLVMIRデバイスの特性にまったく関心がないプロの開発者のために「トピックの紹介」を書くことでした。私の知る限り、これはまだ起こっていません。



ほとんどすべての人が興味を持っている主なこと、そして私が話したいことは、記事のタイトルにあります。GCCとVisualC ++があるのに、なぜLLVMが必要なのですか?C ++プログラマーでない場合は、心配する必要がありますか?そして、一般的に、LLVM Clangですか?か否か?そして、これらの4文字は実際にはどういう意味ですか?



名前って何?



最後の質問から始めましょう。LLVMの文字の背後にあるものは何ですか?かつては「低レベル仮想マシン」の頭字語でしたが、最近ではまったく意味がありません。



LLVMは、Chris Latner(当時、イリノイ大学アーバナシャンペーン校の修士課程の学生)とVikramAdweによる研究プロジェクトとして生まれました。(そして今日まで同じ大学の教授たち)。このプロジェクトの目標は、「アプリケーションの存続期間中の積極的な最適化」を可能にする中間表現(IR)プログラムを作成することでした。これは、Javaバイトコードのような、よりクールなものです。主なアイデアは、静的コンパイル(コンパイラが、C ++などの高レベル言語で記述されたプログラムを入力として受け取り、それをLLVM IRに変換し、最適化して、出力として高速マシンコードを取得する場合)、および動的コンパイルにも同様に適した表現を作成することです。 (ランタイムシステムが、静的コンパイル中にオブジェクトファイルに保存されたLLVM IRとともに、入力としてマシンコードを受信した場合、これを最適化し(この時点で収集された動的プロファイルを考慮に入れて)、出力でさらに高速なマシンコードを取得します。これにより、プロファイルの収集、最適化などを無限に続けることができます。



? ? .



, " ":





, , LLVM — , "LLVM" . ! — llvm.org , LLVM , , .



? 2005 ...



Apple, Google --



Apple Objective-C ( ) LLVM. Apple ? , Apple , . , Apple PowerPC, (Symantec) , .



2005 Apple GCC, , GPL. GPLv3, GCC GCC 4.3. Apple , GCC, XCode, GCC 4.2. GPL , "": GCC, , , — ! LLVM "" ( UIUC, Apache 2.0), , .



Apple , " ", LLVM - GCC. "-" , ; "-" — , LLVM IR. GCC-- LLVM-- , — , , "". 2006 , "Clang".



"clang" — "C" "language". "C" C- , C C++ Objective-C. , "clang" "-", "-"! — !



- Clang - LLVM Clang/LLVM Clang. ( !) C++ .



LLVM Clang Google. Apple, Google LLVM — GCC , . Google — , , . Clang . Clang — Windows. GCC Windows, GCC , . , PDB, GCC — - .



Google , GCC; - Intel Microsoft. Google - Clang. Windows ( Google, - : Chromium Google Earth) LLVM Android. Android: " Android. , ( ) ."



, Google, LLVM . LLVM: ARM, IBM, Sony, Samsung, NXP, Facebook, Argonne National Lab… , " ". GCC, LLVM — , Intel Qualcomm. " " — LLVM , , , .



LLVM GCC



, : " , , Apple Google, … - ? LLVM? GCC ?"



— ! GCC , . , , , , , GPL , GCC — GCC, , ?



, GCC — GCC LLVM. "" ARM (Google, Samsung, Qualcomm ARM) LLVM — , ARM LLVM "" , GCC.



C++. , Google, ISO C++ — , , — - Clang. Clang / LLVM. , : C++ Clang'.



Clang — , Android LLVM — . , Clang warning', GCC, . , Clang' , Clang Static Analyzer, , , ++, .



LLVM , : "", - OpenMP ( ), lld (- ), libc++ ( C++). LLVM — GCC , . , LLVM — , .



Clang GCC, . — . , , C C++ " " — GCC Clang -.



, . , ?



    #include <stdio.h>

    static void die() {
      while(1)
        ;
    }

    int main() {
      printf("begin\n");
      die();
      printf("unreachable\n");
    }


"gcc -O2" "clang -O2" — . " " C ( ? — ). "", , — " "! ( C ). , Clang GCC . , ( ?) , .



"gcc" "clang" ( "g++" "clang++" C++) - . ? — ?



, , , ARM — , "" .



"" LLVM



LLVM C++. LLVM — , — . , LLVM "" . LLVM, LLVM , .



Clang Static Analyzer, , OpenMP, libc++ lld — , C++ . Rust LLVM — , Rust LLVM ! C++ Rust, LLVM ( , ) D, Fortran, Haskell, Julia, Kotlin, Lua, PHP, Python. -, LLVM IR, ! LLVM .



LLVM — , . ML — TensorFlow Google PyTorch Facebook — LLVM .



LLVM , . ML ( , ), - , LLVM.



LLVM — "core" LLVM ! LLVM Developers' Meeting " " IT. , , Huawei, — , LLVM .



, , LLVM . LLVM- ?



LLVM ( Intel, NXP Huawei), . ! — , : LLVM . ? — ? :)




All Articles