Новая версия набора компиляторов 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