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

7 октября 2010 года

Представлен (Архивная копия от 28 августа 2015 на Wayback Machine) релиз проекта 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 (Архивная копия от 8 февраля 2012 на Wayback Machine) плагин DragonEgg, нацеленный на совместимость с GCC 4.5;
  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
  • VMKit - виртуальная машина для Java VM и .NET VM;
  • Реализация функционального языка программирования 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.

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


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

Комментарии

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