После 6 месяцев разработки доступен релиз проекта LLVM 3.2 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Основные новшества LLVM 3.2:
В LLVM-фронтэнде Clang обеспечена полноценная поддержка стандарта C++'11. В статический анализатор кода Clang добавлена поддержка внутрипроцедурного анализа. Добавлены средства для документирования кода внутри комментариев с использованием синтаксиса, напоминающего Doxygen. Улучшены средства диагностики для выявления возможных проблем в коде. Добавлена поддержка атрибута tls_model для явного определения модели Thread-Local Storage. Добавлена поддержка атрибутов для контроля сохранности типов на этапе компиляции для функций с переменными аргументами и аргументами функции 'void *';
В DragonEgg, плагине к набору компиляторов GCC, заменяющем оригинальные оптимизаторы и генераторы кода GCC на аналоги, созданные в рамках проекта LLVM, добавлена поддержка загрузки плагинов LLVM, таких как Polly. В оптимизаторы LLVM налажена передача информации о жизненном цикле переменных. Для сборки с поддержкой LTO более не требуется GCC;
В инструментарии для анализа кода Clang Static Analyzer расширена поддержка языка Objective-C, в том числе обеспечена поддержка новых литералов для работы с массивами и словарными типами данных;
Представлена начальная реализация кода автоматической векторизации (auto-vectorizer) циклов;
Добавлены оптимизации для некоторых новых моделей процессоров на базе архитектуры ARM;
Добавлен новый бэкенд NVPTX, созданный при участии компании NVIDIA, для генерации кода с использованием виртуальной системы команд (Instruction Set Architecture) псевдоязыка NVIDIA PTX (Parallel Thread Execution), используемого в окружении CUDA;
Новый алгоритм фазы компиляции SROA (Scalar Replacement of Aggregates);
Расширена поддержка инструкций AVX2 (Advanced Vector Extensions) для процессоров x86;
Значительно улучшена работа бэкенда MIPS, включая обеспечение поддержки интегрированного ассемблера и дизассемблера;
Существенное улучшение поддержи формата ELF для архитектуры
PowerPC64;
Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:
KLEE - символьный анализатор и генератор тестовых наборов;
Runtime-библиотека compiler-rt;
llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
VMKit - виртуальная машина для Java и .NET;
Реализация функционального языка программирования Pure;
LDC - компилятор для языка D;
Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
Виртуальные машины для Ruby: Rubinius и MacRuby;
Unladen Swallow - реализация языка Python;
LLVM-Lua
FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash;
LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; демонстрирует экстремально высокое быстродействие при отладке программ большого размера;
emscripten - компилятор биткода LLVM в javascript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux.
Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
Julia - открытый динамический язык программирования, использующий наработки проекта LLVM.
LLVM 3.2
После 6 месяцев разработки доступен релиз проекта LLVM 3.2 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего програмТакже по теме: