LLVM – ウィキペディア

before-content-x4

LLVMコンパイラインフラストラクチャ
基本データになります
メンテナー クリス・ラトナー [初め]
デベロッパー LLVMチーム [2]
公開年 2003年10月24日 [3]
現行版 15.0.7 [4]
2023年1月12日 ))
オペレーティング·システム プラットフォーム – 独立しています
プログラミング言語 C ++ [5] 、c [6] 、assemblerspra​​che [7]
カテゴリー コンパイラ
ライセンス イリノイ大学/NCSAオープンソースライセンス [8] 、LLVMの例外を備えたApacheライセンスv2.0 [9]
ドイツ語 – スピーキング いいえ
www.llvm.org

LLVM (ついさっき 低レベルの仮想マシン )は、仮想コマンドを備えたモジュラーコンパイラの下部構造アーキテクチャ、メインプロセッサを仮想化する仮想マシン、および包括的な翻訳コンセプトです。 [十] とりわけ、アイドルフェーズを含むプログラムのすべての時間段階(期間、翻訳時間、リンク時間)が特徴的です [11] 最適化するために使用できます。目的は、LLVM中間言語を使用するさまざまな言語の独自のフロントエンドを単純に開発することです。フロントエンドから呼び出されるLLVMライブラリは、マシンまたはVMコードの生産を処理します。

after-content-x4

LLVMの開発は、2000年にイリノイ大学のChris LattnerとVikram Adveの指示の下で始まりました。このプロジェクトはもともと、動的な編集と最適化を調査するための研究作業として開発されました。今日、それは現在のコンパイラの研究開発からのさまざまなサブプロジェクトと拡張の本拠地です。 [初め] [12番目] [13]

LLVMは、イリノイ大学/NCSAオープンソースライセンスでフリーソフトウェアとして入手できます。これは、3-Clause BSDライセンスとCo-Licenseに似ています。

「LLVM」はプロジェクトのフルネームであり、頭字語ではありません [初め] しかし、多くの場合、「低レベルの仮想マシン」として指定されています。 LLVM以降、これは混乱を引き起こすことがあります また 仮想化に使用できます。時間が経つにつれて、LLVMはさまざまなコンパイラと低レベルのテクニックを含むフレームワークプロジェクトになりました。その間です LLVM 実際のプロジェクトのブランド、LLVM中級言語(LLVM-IR)、LLVM-Debugger(LLDB)、LLVM Standard-C ++ライブラリ(LIBC ++)など。

通常、従来のコンパイラシステムは、コンパイル時に最適化プロセスを実行し、コンパイルされたモジュールを接続します。この2番目のプロセスは、Bindまたはleftと呼ばれ、これまでに使用されていない最適化オプションも提供します。これは、RISCコマンドレートによって設計された仮想バイトコードを作成することにより、LLVMが登場する場所です。 [十] [14]

LLVMのアーキテクチャの一部は、プロセッサを仮想化する仮想マシンに基づいています。プロセッサは、メインプロセッサ(CPU)だけでなく、グラフィックプロセッサ(GPU)でもあります。仮想マシンは、コンパイラ(LLVMアセンブリ言語)の内部生成言語(SO -CALLMEDIATE LANGUEGE)を使用できます [15] 現在のシステムのプロセッサの実行中に翻訳する。ここでは非常に効率的であり、翻訳のジャストインタイム(つまり、必要に応じてリクエストに応じて)を可能にし、これはわずか20 kbのサイズで非常にコンパクトです。つまり、単純なプロセッサ、古いグラフィックスプロセッサ(GPU)または埋め込みCPUでも実行が可能です。柔軟なバックエンドシステムを使用すると、ほぼすべてのさまざまなプロセッサアーキテクチャをサポートすることができます。 [16]

LLVMライブラリは、独自のコードを作成するには複雑すぎて、単純な方法でマシンコード(ビットコード、マイクロコード)を作成するコンパイラプロジェクトで使用できます。たとえば、LLVMの一部であるClangは、CまたはC ++コードの解析をLLVM中間言語(LLVM中間表現、LLVM IR)に翻訳するだけです。効率的なマシンコードの作成は、LLVMバックエンドに任せることができます。この例では、LLVMはそれぞれのアーキテクチャのコンパイラバッキングとしてのみ機能するため、仮想マシンは使用されません(X86、PowerPC、IA64、…)。 [17]

バージョン2.9から、LLVMコンパイラーは主にClangをFrontendとして使用します。 LLVMは、自由に選択可能なプログラミング言語で記述されたプログラムをコンパイルするのに適しています。プログラムコードは現在、プログラミング言語C、C ++、Objective-C、Swift、Java、Delphi、Julia、D、Ada、Fortran、Haskell、Dylan、Gambas、Python、Ruby、Rust、rust、Vala、Zig、Genie、GLSLに編集できます。

after-content-x4

LLVMを使用すると、Java、プラットフォーム固有のコード、特異的コード、言語とプラットフォームなどの言語の仮想マシンを独立したオプティマイザーを作成できます。 LLVM中間層(IR)は、言語固有のモジュールとそれぞれのコードジェネレーターの間にあり、プラットフォームに依存しないアセンブリ言語の一種として見ることができます。 LLVMは、動的で実質間の最適化と、先行およびジャストインタイムのコンピレーションを継続してサポートし続けています。 [16] LLVM-IRの例:

;文字列定数をグローバル定数として宣言します  @.str  =  プライベート  unnamed_addr  絶え間ない  [ 13  バツ  i8 ]  c 「ハローワールドA 0」  ; `puts()` function(libcに含まれる)の外部宣言  宣言する  I32  @puts i8 *  Nocapture ))  名詞  ; `main()`関数の定義  定義  I32  @主要 ()  {  ; i32()*   ; [13 x i8] *をi8 * ...(i8要素のポインター)に変換する   %CAST210  =  getElementPtr  [ 13  バツ  i8 ]*  @.str  i64  0  i64  0   ; `puts()`関数を出力テキストに呼び出す   電話  I32  @puts i8 *  %CAST210 ))    I32  0  }  ;メタデータ  !初め  =  metadata  !{ I32  42 }  !foo = !{!1, null}

クラン [ 編集 | ソーステキストを編集します ]

Clangは、Cシミラー言語用に最適化されたLLVM向けに開発されたフロントエンドです。とりわけ、GCC上部構造と比較して、メモリ消費量が少なく、多くの場合、より小さな実行可能ファイルを使用すると、より高速な翻訳実行が可能になります。また、開発者zよりも、より広範で正確な静的分析方法もあります。 B.トラブルシューティングを促進します。プログラミング言語C ++のサポートは、バージョン2.7から安定していると見なされます。 [18]

2009年9月以来、Clangは安定して生産的として公式に使用されています。 LLVMバージョン2.6から、LLVMコンパイラパッケージの不可欠な部分です。 [19] Clangは、他のコンパイラを使用する場合、純粋に静的なコード分析およびデバッグツールとしてLLVMなしで使用できます。 [20] Clangは2013年以来、静的コード分析のために開発環境に携わっています Xcode プログラミング言語C、Objective-C、C ++のためにAppleによって統合されています。

LLDB [ 編集 | ソーステキストを編集します ]

LLDBは、LLVMプロジェクトの手法とCベースの言語に基づいたモジュール式で非常に動的なデバッガーです。それは特に記憶効率が良く、同時に非常に強力で速いはずです。彼は、たとえば他のプログラミング言語のサポートのために、プラグインインターフェイスを持っています。タスクは、Pythonの助けを借りて自動化することもできます。目的には、マルチスレッドコードのデバッグに対する広範なサポートが含まれます。 [21] [22]

dragonegg [ 編集 | ソーステキストを編集します ]

Dragoneggは、GNUコンパイラコレクションのLLVMプラグインです(バージョン4.5から)。 [23] これにより、LLVMはオプションで、未満のGCCインストールのコンパイラベーキングとして使用できます。開発の開始時に、Dragoneggは「GCCプラグイン」とのみ呼ばれていました。 Dragoneggは、以前に頻繁に使用されていたLLVM GCCミキシング構成を置き換えます。

vmit [ 編集 | ソーステキストを編集します ]

これは、LLVM-VMの変更されたブランチ(Fork)であり、JavaおよびCILバイトコード(.Net-Framework/Mono)の直接実行を可能にします。コンパイラまたは左翼は、JavaまたはCILバイトコードの前にハイコンパクトVMKIT(約20 kb)を梱包および実行できます。つまり、Javaまたは.Netを事前にインストールすることなく、プロセッサアーキテクチャやシステムで実行が可能です。ただし、プロジェクトは公式にサポートされなくなりました。 [24]

クリー [ 編集 | ソーステキストを編集します ]

Kleeを使用すると、プログラムを取り戻し、プログラムエラーについて自動的に検査することができます。プログラムは段階的に実行されます。具体的な値の代わりに、入力結果と中間結果は象徴的に使用され、それぞれが持つことができる値を保存します。 「危険な操作」(英語:「危険な操作」、たとえばポインターによる分割またはメモリアクセス)の場合、エラーを作成できるかどうか、たとえばゼロを介したディビジョンや非予定のメモリへのアクセスを確認できるかどうかを確認します。次に、クリーは、プログラムがエラーを作成する入力とソースコードによってどのパスが実行されるかを使用します。 [25]

LLVMは、多数のプロセッサアーキテクチャをサポートしています。

ただし、まだいくつかの制限があります。 FrontEnd(LLVM-GCC)は、すべてのプラットフォームに対してまだ実行されていません。これは、LLVMをクロスコンパイラとして提供することで回避できます。プログラムライブラリなど、依存関係はここで考慮する必要があります。 [16]

プロジェクトは2000年に始まりました イリノイ大学アーバナ – シャンペーン Vikram AdveとChris Lattnerによる研究プロジェクトとして。 Appleがこれに気付いたとき、彼女は2005年にLLVMのさらなる開発のために恒久的な開発チームをまとめ、Project ManagerとしてChris Lattnerを述べました。 [26] LLVMは、2008年7月以来、Appleの開発環境Xcodeの標準的なコンパイラとなっています。 [27] 2009年10月のバージョン2.6から、コンパイラフロントエンドは クラン LLVMの積分成分。 [28] [29]

2011年、LLVMはACM Sigplanからプログラミング言語ソフトウェア賞を受賞しました。

現在、Java Bytecode、Opencl、Microsofts CIL、Python、Lua、PHP、Ruby、Monoのフロントエンドなど、他の多くのコンポーネントが集中的に開発中です。 [30] Adobe ActionScript。 [13] [最初に30] LLVM-JITコンパイラは、この用語でプログラムの未使用の静的分岐を認識してから削除できます。これにより、高度な分岐でプログラムが最適化されます。このため、AppleはMacOS以来10.5を使用しています [32] OpenGLスタックのLLVM、一方では、変化する分岐パスを短縮し、他方で頂点シェーダーを最適化します。

  1. a b c LLVMコンパイラインフラストラクチャプロジェクト (英語) – 公式ウェブサイト
  2. llvm.org
  3. クリス・ラトナー: LLVM 1.0リリースが最終的に利用可能です!
  4. LLVM 15.0.7リリース 2023年1月12日(2023年1月13日アクセス)。
  5. Open HubのLLVMオープンソースプロジェクト:言語ページ の: ハブを開きます 。 (2018年7月18日にアクセス)。
  6. Open HubのLLVMオープンソースプロジェクト:言語ページ (英語、2018年7月27日にアクセス)。
  7. Open HubのLLVMオープンソースプロジェクト:言語ページ (英語、2017年7月27日にアクセス)。
  8. ライセンス (英語、2018年7月27日にアクセス)。
  9. github.com 2019年1月19日。
  10. a b llvm.org
  11. llvm.org
  12. llvm.org
  13. a b LLVMユーザー llvm.org
  14. Hans-Joachim Baader: LLVM 1.5承認。 の: Pro-linux。 20. 2005年5月、 2010年12月5日にアクセス (英語)。
  15. llvm.org
  16. a b c LLVM機能 llvm.org
  17. LLVM。 aosabook.org
  18. Clang:LLVMのC言語ファミリフロントエンド LLVM;スタンド:18。2010年10月
  19. LLVM 2.6リリース! 記念 2012年1月11日から インターネットアーカイブ )lists.uiuc.edu、2009年10月23日(英語)
  20. 表現型診断 LLVM; 2009年11月27日現在(英語)
  21. LLDBデバッガーの目標 lldb.llvm.org
  22. クリス・ラトナー: 新しい「LLDB」デバッガー blog.llvm.org
  23. dragonegg.llvm.org
  24. vmkit.llvm.org
  25. クリスティアン・カダール、ダニエル・ダンバー、ドーソン・エングラー: Klee:複雑なシステムプログラムのための高カバーテストの非支援と自動生成 。スタンフォード大学、2008年。
  26. アダムトリート: QT4のLLVMコンパイル用のMKSPECとパッチ。 の: QT4-PREVIEW-FEEDBACK-MAILINGLISTE。 2005年2月19日、アーカイブ オリジナル 午前 4. 2011年10月 ; 2010年12月5日にアクセス (英語)。
  27. developer.apple.com
  28. クリス・ラトナー: LLVM 2.6リリース! の: LLVM-Announceメーリングリスト。 2009年10月23日、アーカイブ オリジナル 午前 2012年1月11日 ; 2010年12月5日にアクセス (英語)。
  29. Hans-Joachim Baader: LLVM 2.6承認。 の: Pro-linux。 26. 2009年10月、 2010年12月5日にアクセス
  30. Mono- Project.com
  31. Flashを使用してApple iPhone用の開発 記念 2009年12月19日から インターネットアーカイブ )Adobe.com
  32. [llvmdev] AppleでのLLVMのクールな使用:OpenGLスタック 記念 2006年11月4日から インターネットアーカイブ ))
after-content-x4