LLVMの特徴
CおよびC++用のLLVMコンパイラー・システムには、以下のものがある:
- C、C++、Objective-C、Fortranなどのフロントエンド。これらはANSI標準のCおよびC++言語をサポートしている。さらに、多くのGCC拡張がサポートされています。
- LLVM命令セットの安定した実装。アセンブリ(ASCII)とバイトコード(バイナリ)のリーダとライタ、ベリファイアとともに、オンラインとオフラインの両方のコード表現として機能する。
- 強力なパス管理システム。依存関係に基づいてパス(解析、変換、コード生成パスを含む)を自動的にシーケンス化し、パイプライン化して効率化を図る。
- 幅広いグローバルなスカラー最適化。
- 洗練された全プログラムポインタ解析、コールグラフ構築、プロファイルガイド付き最適化のサポートを含む、豊富な解析と変換のセットを備えたリンクタイム手続き間最適化フレームワーク。
- 現在、X86、X86-64、PowerPC、PowerPC-64、ARM、Thumb、SPARC、Alpha、CellSPU、MIPS、MSP430、SystemZ、WebAssembly、XCoreをサポートしています。
- ジャストインタイム(JIT)コード生成システム。現在、X86、X86-64、ARM、AArch64、Mips、SystemZ、PowerPC、PowerPC-64をサポートしています。
- DWARF デバッグ情報の生成をサポート。
- gprof に似たプロファイリングシステム。
- 多数のベンチマークコードとアプリケーションを備えたテストフレームワーク。
- LLVMコンポーネントの迅速な開発を簡素化するAPIとデバッグツール。
LLVMシステムの強み
- LLVMは、セマンティクスが厳密に定義されたシンプルな低レベル言語を使用する。
- CとC++のフロントエンドを含む。Java、Scheme、その他の言語のフロントエンドも開発中。
- スカラー最適化、手続き間最適化、プロファイル駆動型最適化、単純なループ最適化など、積極的なオプティマイザを備えている。
- リンク時、インストール時、ランタイム、オフライン最適化を含む、ライフ・ロング・コンパイル・モデルをサポートしている。
- LLVMは正確なガベージコレクションを完全にサポートしている。
- LLVMコード・ジェネレーターは比較的簡単にリターゲットでき、強力なターゲット記述言語を利用できる。
- LLVMには広範なドキュメントがあり、様々な種類の多くのプロジェクトをホストしている。
- 多くのサードパーティユーザーが、LLVMは扱いやすく開発しやすいと主張している。例えば、(現在は削除された)Stackerフロントエンドは、LLVMについて何も知らずに始めた人が4日間で書いたものだ。さらに、LLVMには開発を容易にするツールがある。
- LLVMは活発に開発されており、常に拡張、強化、改善されています。左のバーのステータス・アップデートを見れば、開発のスピードがわかる。
- LLVMは、OSI承認の "Apache License Version 2.0 "ライセンスの下で自由に利用できます。
- LLVMは現在、多くの営利、非営利、学術団体によって使用されており、多くの拡張や新機能が提供されています。
LLVMオーディエンス
LLVMは、様々なプロジェクトで使用することができます。以下のような方はLLVMに興味があるかもしれません:
- CおよびC++プログラムのコンパイル時、リンク時(手続き間)、実行時の変換に興味のあるコンパイラ研究者。
- ポータブルで言語に依存しない命令セットとコンパイルフレームワークに興味のある仮想マシン研究者/開発者。
- コンパイラ/ハードウェア技術に興味のあるアーキテクチャ研究者。
- 静的解析やインスツルメンテーションに興味のあるセキュリティ研究者。
- コンパイラ変換の迅速なプロトタイピングのためのシステムに興味のあるインストラクターや開発者。
- コードのパフォーマンスを向上させたいエンドユーザー。
もっと知りたいですか?
オンラインでドキュメントを閲覧したり、ウェブブラウザでLLVMを試したり、ソースコードをダウンロードすることができる。