LLVM とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。当初は、LLVM の名称の由来は、Low Level Virtual Machine (低水準仮想機械) の略であるとしていたが、現在は、何の頭文字でもないとしている。LLVM は、JavaとJava VMの関係のように、まず仮想機械をターゲットとした中間コード(ビットコード)を生成し、その仮想機械向けコードを特定のマシンの機械語に変換する。この時言語やプラットフォームとは独立した最適化を行う。この方法によってLLVM は言語からもアーキテクチャからも独立しており、それぞれに特化した、プログラミング言語固有のモジュールと、マシン向けコード生成部を用意することにより様々な言語アーキテクチャーに対応する。LLVM は積極的にプロシージャ間最適化を行うとともに、静的コンパイラとしてもJITコンパイラとしても使え、開発の様々な段階で使える多数の部品を持っている(JavaバイトコードとMSILフロントエンド、Pythonフロントエンド、グラフ彩色式のレジスタ割り付けモジュール、など)。JITコンパイラの場合、実行時に不要な静的分岐を最適化する機能があり、これはプログラムが様々な実行時オプションを持っている場合、強力な最適化手法(部分評価)となる。このため、Mac OS X 10.5ではこれを使ってハードウェア機能がない場合にOpenGLパイプラインを実現している。LLVM自体はC++で書かれており、イリノイ大学で2000年に開発が開始されたものである。ライセンス条件はUniversity of Illinois Open Source Licenseであり、これはBSDライセンスによく似たOSI認証ライセンスである。LLVM は言語から独立した命令セットと型システムを持つ。命令の多くは3番地コード形式に似ている。各命令はまた静的単一代入形でもあり、変数(型付きレジスタ)は一回代入されるとその後は変更されない。このため、変数間の依存関係の解析が単純化される。型変換は、どういう形式であっても明示的に codice_1 命令を使って行われる。LLVM の持つ基本型はいくつかの固定長の整数型であり、派生型としてポインタ、配列(任意のデータ型を格納可能な配列)、ベクトル(整数、浮動小数、ポインタのみ格納可能な配列)、構造体、関数の5つがある。具体的な言語で構築される型は、LLVM 上ではこれらの型を組み合わせて表現される。例えば、C++ におけるクラスは、構造体と関数と関数へのポインタの配列を組み合わせて表現される。LLVM は、もともと既存の GCC スタック用のものより積極的な最適化を行う高性能のシステムとして開発され、GCC フロントエンドが LLVM と動作するように修正された。現在では、GCC 4.6 から派生したフロントエンド(dragonegg)を用いてC言語、C++、FORTRAN、Adaをサポートし、Objective-C、Objective-C++、Goがおおむね動くとしている。しかし、LLVM への興味が広がるにつれ、まったく新しいフロントエンドを多数のプログラミング言語向けに開発しようという動きが出てきた。もっとも注目されているのは C、C++、Objective-C、Objective-C++ をサポートする新しいコンパイラ Clang である。主にアップルのサポートを受け、Clang は GCC システムの C/C++/Objective-C/Objective-C++ コンパイラを統合開発環境と統合できマルチスレッドをサポートした現代的なシステムで置き換えることを目指している。GCC での Objective-C/Objective-C++ の開発は衰退気味で、アップルが施した変更は別個にメンテナンスされている。アップルにとっては、自社でコンパイラを開発することにより、第一の Objective-C/Objective-C++ 実装であり続けながら、LLVM がすでに達成している統合開発環境への統合やその他の現代的な機能への対応といった問題を解決することができる。GNU は libstdc++ という標準C++ライブラリを開発しているが、LLVM も独自の libc++ という標準C++ライブラリを開発している。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。