Релиз набора компиляторов LLVM 3.0

2 декабря 2011 года

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

В версии 3.0 осуществлён отказ от поддержки фронтэнда llvm-gcc в пользу Си/C++/Objective-C компилятора Clang и GCC-плагина DragonEgg. В настоящее время Clang является более оптимальным решением для сборки проектов на языке Си, а DragonEgg является хорошим решением для разработчиков, заинтересованных в интеграции LLVM с GCC. Кроме того, прекращена поддержка загрузки ".bc" и ".ll" файлов из LLVM 2.8 и более ранних версий. С выпуском LLVM 3.0 отмечена стабилизация формата, а целью проекта стало обеспечение совместимости всех будущих релизов LLVM с текущим форматом файлов ".bc" и ".ll".

Основные новшества LLVM 3.0:

  • В LLVM-фронтэнде Clang, поддерживающем языки C, C++ и Objective-C, расширена поддержка стандарта C++0x (C++ 2011), добавлены некоторые возможности, ожидаемые в будущем стандарте C1x. Значительно улучшена поддержка сборки приложений на языке C++, увеличена стабильность и расширены средства диагностики. Расширена поддержка Objective-C, реализованы возможности, необходимые для работы Objective-C runtime для Mac OS X 10.7 / iOS 5. Добавлены дополнительные оптимизации в библиотеку libclang,
  • В DragonEgg, плагине к набору компиляторов GCC, заменяющем оригинальные оптимизаторы и генераторы кода GCC на аналоги, созданные в рамках проекта LLVM, реализована полная поддержка работы в виде плагина к GCC 4.5 и 4.6 без применения дополнительных патчей (прошлая версия DragonEgg поддерживала только GCC 4.5 и требовала наложения патчей). Добавлена опция, позволяющая одновременно использовать оптимизаторы LLVM и GCC (ранее DragonEgg заменял кодом из LLVM оптимизатор GCC). Связка из GCC-фронтэнда и LLVM-бэкенда официально поддерживает языки C, C++, Фортран и Ада, частично реализована поддержка Java, Objective-C, Objective-C++ и Google Go;
  • Библиотеки libc++ и compiler_rt теперь распространяются под двойной лицензией MIT и UIUC. Библиотека представляет собой реализацию стандартной библиотеки классов C++, распространяемую под BSD-подобной лицензией и нацеленную на высокоэффективную генерацию кода и на максимальное обеспечение совместимости с существующими и будущими стандартами (C++0X). Библиотека обеспечивает минимальное потребление памяти, высокую скорость выполнения функций, быструю компиляцию и совместимость на уровне ABI с libstdc++ из состава GCC для некоторых низкоуровневых возможностей, таких как объекты-исключения (exception objects), rtti и распределение памяти. LLVM C++ планируется использовать по умолчанию в качестве стандартной С++ библиотеки во FreeBSD 10;
  • В VMKit, виртуальной машине Java VM, использующей LLVM для статической и JIT-компиляции, добавлена поддержка упреждающей компиляции небольшой части базовой библиотеки Java. Обеспечена поддержка создания собственных виртуальных методов для индивидуальных классов. Добавлена новая модель обработки исключительных ситуация и улучшена реализация поддержки inline-развёртывания для инструкций Java-байткода. Увеличена скорость запуска и производительность runtime-компонентов;
  • В LLVM IR (Intermediate Representation) добавлена полная поддержка атомарных операций с памятью, включая поддержку модели, определённой в спецификациях C++11 (C++0x) и C'1x (атомарная загрузка и сохранение, сравнение, обмен значений, инструкции чтения/изменения/записи и т.п.). В LLVM IR значительна переработана система типов и модель обработки исключительных ситуаций, что позволило избавиться от некоторых давно мешающих проблем;
  • Основанная на линейном сканировании система распределения регистров (register allocator) заменена на новый "жадный" аллокатор регистров ("greedy" register allocator), способным на лету дробить диапазоны и реализующим много интересных оптимизаций, что в конечном итоге приводит к увеличению качества кода;
  • Большой рывок в развитии отмечается для бэкенда MIPS, который из экспериментальных переведен в разряд готовых для промышленной эксплуатации. В новой версии реализована поддержка MIPS32r1/r2 и MIPS64, протестирован O32 ABI, доведёна до конца реализация JIT, прекращена поддержка старых архитектур MIPS1 и MIPS2;
  • Оптимизатор и генератор кода теперь поддерживает информацию в форматах gprof и gcov, полученную из систем профилирования и анализа покрытия кода. Для работы с cov/gcov подготовлена утилита llvm-cov. Clang может использовать данные профилирования через совместимые с GCC опции;
  • В бэкенде, ассемблере и дизассемблере архитектуры x86 обеспечена полная поддержка набора инструкций AVX 1 (Advanced Vector Extensions), поддерживаемых процессорами серии AMD Bulldozer и Intel Sandy Bridge. Включение производится через опцию "-mavx". В ассемблере и дизассемблере добавлена поддержка дополнительных инструкций, используемых в Atom, Ivy Bridge, SSE4a/BMI и RdRand;
  • В ARM-бэкенде значительно увеличена производительность кода, сгенерированного для чипов на базе CPU ARM Cortex-A9, улучшена поддержка процессоров серии Cortex-M. Задействованы дополнительные оптимизации при генерации кода с инструкциями NEON, полученного при помощи Clang.

Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:

  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
  • VMKit - виртуальная машина для Java и .NET;
  • Реализация функционального языка программирования Pure(недоступная ссылка);
  • LDC - компилятор для языка D;
  • Roadsend PHP (Архивная копия от 28 декабря 2011 на Wayback Machine) - оптимизатор, статический и JIT компилятор для языка PHP;
  • Виртуальные машины для Ruby: Rubinius и MacRuby;
  • [http://code.google.com/p/unladen-swallow/ 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.

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз набора компиляторов LLVM 3.0», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.