Новая версия набора компиляторов LLVM 2.7

После 6 месяцев разработки выпущена новая версия 2.7 проекта LLVM (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

В новом релизе существенно улучшилось качество генерируемого кода, расширен состав генерируемой информации для отладчиков, а также сделано большое количестве изменений в инфраструктуре, самая важная из которых - это то, что Clang теперь может успешно компилировать свои собственные исходные тексты, что в случае разработки компиляторов является существенным достижением, тем более, при использовании конструкций C++.

Наиболее важные новшества LLVM версии 2.7:

  • Поддержка платформы MicroBlaze;
  • API дизассемблера (пока поддерживается архитектура X86);
  • Более эффективное с точки зрения потребления памяти и гибкое представление отладочной информации;
  • Расширяемая система метаданных для промежуточного представления генерируемого кода (Intermediate Representation, IR), что позволяет реализовать новые возможности для оптимизации языковых конструкций;
  • Прямой доступ к блокам IR, что может повышать производительность некоторых конструкций интерпретируемых языков программирования на более чем 20%;
  • Дальнейшее развитие проекта LLVM-MC (LLVM-дизассемблер);
  • Дальнейшее развитие поддержки C++ в Clang;
  • Поддержка non-temporal обращений к памяти (идентичных логике инструкции MOVNT архитектуры X86), что позволит эффективнее использовать кеш процессора;
  • Поддержка "коротких" чисел с плавающей точкой
  • Улучшенная генерация кода для часто используемых в языке Си так называемых "tail calls" (например, конструкция 'return strndup(buf, text_buffer_size);
  • Оптимизированный эвристический подход для использования inline-функций;
  • Возможность использования отладчика в JIT-компиляторе и другие нововведения.

Кроме улучшения программного кода, в мире LLVM произошли и другие перемены - представлен новый логотип проекта и новый официальный LLVM-блог, а также введен в строй более производительный сервер llvm.org, выдержавший 100 тыс. посещений в марте. Темп разработки LLVM, как и других проектов, основывающихся на LLVM, продолжает увеличиваться.

Из параллельно развивающихся проектов, основанных на 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