LLVM 【Low Level Virtual Machine】
概要
LLVM(Low Level Virtual Machine)とは、様々なプログラミング言語(のコンパイラ)に対し、そのコードを様々なコンピュータやOSに対応させることができる共通の基盤を提供するソフトウェア。オープンソースソフトウェアとして公開されている。LLVMはCPUの機械語に似た独自の中間言語(LLVM IR)を規定しており、どのようなプログラミング言語で記述されたソースコードも、いったんこの中間言語で記述された中間コードに変換される。
中間コードは実行環境側で特定の機種やオペレーティングシステム(OS)で直に動作するプログラム(ネイティブコード)へ変換して実行される。元の記述言語がなんであれ、中間言語に翻訳されたプログラムはLLVMが対応しているすべての環境で同じように動作させることができる。
ネイティブ形式への変換は、実行時に変換しながら実行する仮想マシン(VM:Virtual Machine)方式と、開発時に静的な実行ファイルを生成して提供する方式が選択できる。中間言語へのコンパイル時にもネイティブ形式へのコンパイル時にも適切な最適化が実施され、高速に動作するプログラムが得られる。
プログラミング言語のソースコードから中間コードに変換するソフトウェアを「フロントエンド」(あるいはコンパイラフロントエンド)、中間コードを最適化するソフトウェアを「ミドルエンド」中間コードを各機種向けのネイティブコードに変換するソフトウェアを「バックエンド」という。
プログラミング言語側から見れば、フロントエンドを用意すれば個別の機種やOSに対応しなくてもLLVMによって様々な環境に対応させることができる。各機種やOSから見れば、LLVMが自らの環境をサポートしてくれれば、他の環境と共通の様々なプログラミング言語を利用してソフトウェアを開発することができるようになる。
元々C言語やC++言語のプログラムを様々な環境で同じように動作させるために開発が始まり、ClangやGCCが有力なフロントエンドとして知られる。他の言語のフロントエンドも開発されており、Objective-CやFortran、Go言語、Ruby、Lua、Kotlin、Scalaなどのフロントエンドが公開されている。RustやSwiftのようにLLVMの利用を前提とする言語も登場している。
LLVMは2000年にイリノイ大学で開発が創始されたもので、正式なバージョンは2003年に初めて公開された。Apacheライセンス(例外条項あり)に基づいてオープンソースソフトウェアとして公開されており、誰でも自由に入手、改変、再配布などを行なうことができる。