LLVMというコンパイラ基盤【人気のプログラミング言語からコンパイラまでを支える】

Uncategorized

LLVMとは

LLVMは、コンパイラ基盤です。

LLVMは、何かの略ではなく、この名称のコンパイラ基盤である、とされています。

インタプリタ言語として広く知られるJavaScriptやPythonなどとは違い、コンパイラが必要な言語は多数あります。

  • C言語
  • C++
  • Rust

などです。

これらの言語では、人間が書いたソースコードを、コンパイラによりコンピュータが理解できる形に変換=コンパイルすることで、プログラムが実行可能になります。

コンパイラは、1つのプログラミング言語に対して複数あることも多いです。
コンパイラを作成する際に、LLVMといったコンパイラ基盤が活用されます

普段、プログラミング学習などで色々な言語を使っているとLLVMの恩恵を直接感じることは少ないかもしれません。しかし、LLVMは現在のプログラミング環境に大きく貢献しています。

今日は、そんなLLVMが活躍している場所を紹介します

様々なプログラミング言語に使われているLLVM

色々なプログラミング言語やコンパイラがLLVMをもとに作られています。

Rust

近年注目を集めている、RustのコンパイラはLLVMがベースとなっています

Swift

Swiftの開発者の一人に、Chris Lattner氏がいます。

Chris Lattner氏は、LLVMの開発者としても知られており、SwiftにはLLVMのコンパイラ技術が活用されています

Julia

科学計算領域をはじめとして近年使用されているプログラミング言語のJuliaは、その中核部分がLLVM基盤、C / C++、Schemeで開発されました。

Halide

画像処理に使用されるプログラミング言語HalideのコンパイラにもLLVMが使われています。

Haskell

関数型言語であるHaskellのコンパイラGHCには、LLVM基盤が使用されています。

Zig

2016年に公開された新しいプログラミング言語のZigのコンパイラには、LLVMが用いられています。

多様な場面で活躍するLLVM

特定のプログラミング言語そのものやコンパイラで直接LLVM基盤が使用される以外に、その周辺でもLLVM技術は活用されています

Clang

コンパイラは一般的に、大きく2つの過程に分けられます。

  • フロントエンド
  • バックエンド

です。
人間が書いたソースコードを受け取るフェーズから始まるいくつかの工程を、コンパイラのフロントエンドと呼び、フロントエンドの工程からデータを受け取り、最終的にコンピュータが理解できる形に変換するまでがバックエンドです。

多くの場合、コンパイラのバックエンドとしてLLVM基盤が活用されます

Clangは、C、C++、Objective-C向けのコンパイラのフロントエンドです

フロントエンドのClang、バックエンドのLLVMという区分だったのですが、最近はLLVMの一部として公開されています。
Clangプロジェクトは、LLVMプロジェクトの一部であり、例えばC言語のコンパイラとしてClangを使用するときには、コンパイラフロントエンドとしてClangを、バックエンドとしてLLVMを使用していると考えることができます。

C、C++、Objective-Cのコンパイル環境において、LLVMの存在感は大きいと言えるでしょう。

Kotlin/Native

Kotlinは、Androidアプリ開発で広く用いられているプログラミング言語です。

Kotlinは、JVM言語であり、Java仮想マシン上で動作します。
Kotlin/Nativeは、仮想マシンなしで、Kotlinを様々な環境で動作させるための技術です

この場合、コンパイルが必要になりますが、Kotlin/NativeのコンパイラとしてLLVM基盤が使用されています

CUDA

CUDAは、半導体メーカーとして世界的に知られているNVIDIAが開発しているGPU向け並列コンピューティングのプラットフォームです。

NVIDIAは、NVCCという独自のコンパイラ(C / C++用)を開発しており、NVCCはLLVM基盤のコンパイラです

このほかにも、LLVMプロジェクトには、複数のサブプロジェクトがあります。
例えば、

ディープラーニングでの活用が期待されるMLIRプロジェクト

あります。

プログラミング言語の基盤としてのLLVM

以上のような、幅広い影響を考えると、LLVMはプログラミング言語の基盤とも言えるプロジェクトの1つだと思います

LLVMをより知りたい場合には、公式サイトに加えて、

などが参考になるかと思います。

プログラミング学習で、色々な言語を扱う時には、LLVMプロジェクトや関連技術について意識することはあまりないかもしれません。

しかし、今日紹介したように

  • C言語
  • C++
  • Rust
  • Swift
  • Julia
  • Kotlin/Native

など多くの場面でLLVMは使用されています。

今後も、LLVMを用いて、新しいプログラミング言語やコンパイラなどが生み出されると思います。
プログラミングを支えるLLVMプロジェクトについて、気になった人は一度公式サイトを見てみるのもいいかもしれません。

コメント

タイトルとURLをコピーしました