войти зарегистрироваться

Языки программированияОбзор LLVM

LLVM (Low Level Virtual Machine) — это универсальная система анализа,
трансформации и оптимизации программ или, как её называют разработчики,
«compiler infrastucture».

LLVM — не просто очередной академический проект. Его история началась в 2000
году в Университете Иллинойса, а теперь LLVM используют такие гиганты индустрии
как Apple и Adobe. В частности, на LLVM основана подсистема OpenGL в MacOS X
10.5, а iPhone SDK использует GCC с бэкэндом на LLVM. Apple является одним из
основных спонсоров проекта, а вдохновитель LLVM — Крис Латтнер — теперь работает
в Apple.

В основе LLVM лежит промежуточное представление кода (intermediate
representation, IR), над которым можно производить трансформации во время
компиляции, компоновки (linking) и выполнения. Из этого представления
генерируется оптимизированный машинный код для целого ряда платформ, как
статически, так и динамически (JIT-компиляция). LLVM поддерживает генерацию кода
для x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

LLVM написана на C++ и портирована на большинство *nix-систем и Windows.
Система имеет модульную структуру и может расширяться дополнительными
алгоритмами трансформации (compiler passes) и кодогенераторами для новых
аппаратных платформ. Пользовательский фронтенд, как правило, линкуется с LLVM и
использует C++ API для генерации кода и его преобразований. Однако LLVM включает
в себя и standalone утилиты.

Для тех, кто не без оснований считает C++ не лучшим языком для написания
компиляторов, с недавних пор в LLVM включена обертка API для OCaml.

Чтобы понять, что можно сделать с помощью LLVM, и на каком уровне придётся
работать, давайте разберёмся,