Новая версия набора компиляторов LLVM 2.8
Представлен релиз проекта LLVM 2.8 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.В новой версии отмечено значительное увеличение поддержки языка C++ в компиляторе Сlang, в частности завершено добавление всех необходимых возможностей и C++ компилятор теперь вполне пригоден к использованию. Дополнительно отмечается присоединение к LLVM (не включены в состав релиза 2.8) двух больших подпроектов: библиотеки libc++ и отладчика LLDB.
libc++ представляет собой реализацию стандартной библиотеки классов C++, распространяемую под BSD-подобной лицензией и нацеленную на высокоэффективную генерацию кода и на максимальное обеспечение совместимости с существующими и будущими стандартами (C++0X). Из особенностей библиотеки также можно отметить минимальное потребление памяти, высокую скорость выполнения функций, быструю компиляцию и совместимость на уровне ABI с libstdc++ из состава GCC для некоторых низкоуровневых возможностей, таких как объекты-исключения (exception objects), rtti и распределение памяти.
В рамках проекта LLDB развивается новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; демонстрирует экстремально высокое быстродействие при отладке программ большого размера.
Ключевые новшества LLVM 2.8:
- Реализация встроенного ассемблера (в Clang по умолчанию используется для выполнения inline-блоков), который поддерживающий формат объектных файлов MachO (также присутствует поддержка ELF и COFF, но она пока непригодна для использования);
- Поддержка прямой записи объектных файлов (.o) из компилятора LLC (и clang);
- Дизассемблер для архитектур ARM и Thumb;
- В ассемблере для архитектуры X86 добавлена поддержка набора инструкций AES и AVX;
- Расширяемый генератор кода для архитектуры ARM;
- Улучшенная поддержка отладки оптимизированного кода;
- Значительное увеличение производительности X87-операций с плавающей точкой;
- Поддержка tailcall-оптимизации для процессоров ARM;
- В комплект включена программа llvm-diff, аналог утилиты diff для сравнения ".ll"-файлов.
Из параллельно развивающихся проектов, основанных на LLVM , можно отметить:
- llvm-gcc плагин DragonEgg, нацеленный на совместимость с GCC 4.5;
- KLEE - символьный анализатор и генератор тестовых наборов;
- Runtime-библиотека compiler-rt;
- llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
- VMKit - виртуальная машина для Java VM и .NET VM;
- Реализация функционального языка программирования Pure;
- LDC - компилятор для языка D;
- Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
- Виртуальные машины для Ruby: Rubinius и MacRuby;
- Unladen Swallow - реализация языка Python;
- LLVM-Lua
- FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.
© OpenNet