[size="3"]Новая версия набора компиляторов LLVM Compiler 2.6[/size]
После шести месяцев разработки анонсирован новый релиз LLVM 2.6 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Основные новшества:
Clang, фронтенд для C и Objective-C, который можно использовать вместо GCC, объявлен стабильным и готовым для промышленной эксплуатации. Исходные тексты Clang распространяются в рамках лицензии BSD;
Значительно улучшено качество генерации кода для платформы x86_64;
Реализация поддержки оптимизации во время связывания (link-time) для систем, использующих формат исполняемых файлов ELF;
Добавлены новые генераторы кода для архитектур MSP430, SystemZ и BlackFin;
Поддержка генерации многопоточного кода и реализация соответствующих оптимизаций;
Интеграция с системой профилирования OProfile для JIT;
Добавлена поддержка архитектуры ARM V7 (включая Thumb2 и NEON);
В состав включены биндинги для языка Ada2005;
Реализована поддержка SSE 4.2;
Представлены новые субпроекты, основанные на LLVM, но не включенные в базовую поставку:
llvm-gcc плагин DragonEgg, нацеленный на совместимость с еще не выпущенным GCC 4.5;
KLEE - символьный анализатор и генератор тестовых наборов;
Runtime-библиотека compiler-rt;
llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
Из параллельно развивающихся сторонних проектов, основанных на LLVM , можно отметить VMKit ( виртуальная машина для Java VM и .NET VM), реализацию функционального языка программирования Pure, LDC (компилятор для языка D), Roadsend PHP (оптимизатор, статический и JIT компилятор для языка PHP), виртуальные машины для Ruby (Rubinius и MacRuby), Unladen Swallow (реализация языка Python), LLVM-Lua, FlashCCompiler (средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash).
http://www.opennet.r...shtml?num=23985 (http://www.opennet.ru/opennews/art.shtml?num=23985)
[size="3"]Релиз набора компиляторов LLVM 2.9 [/size]После 6 месяцев разработки доступен (http://lists.cs.uiuc.edu/pipermail/llvm-announce/2011-April/000037.html) релиз проекта LLVM 2.9 (http://llvm.org/docs/ReleaseNotes.html) (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байт-код RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
В версию LLVM 2.9 включены наработки с реализацией расширенных методов оптимизиации и генерации кода (в частности, задействованы новые возможности современных ARM-систем), в Clang и libc++ улучшена поддержка стандарта C++'0x, значительно расширена функциональность отладчика LLDB (http://lldb.llvm.org/). Из новшеств также можно отметить:
- В LLVM-форнтэнде Clang, улучшена поддержка языков C, C++ и Objective-C. Проведена работа по обеспечению поддержки некоторых новых возможностей C++'0x, таких как rvalue-ссылки и шаблонов с переменным числом аргументов (variadic). Проведена большая работа над ошибками, налажена поддержка "__label__", продолжена работа (http://linuxforum.kz/index.php?/topic/4317-clang/page__view__findpost__p__12913) по обеспечению возможности сборки Linux-ядра. Реализован и включен по умолчанию анализатор TBAA (Type Based Alias Analysis), который позволяет в определенных ситуациях существенно повысить оптимизации загрузки и сохранения (для отключения TBBA необходимо использовать опцию "-fno-strict-aliasing");
- В DragonEgg, плагине к набору компиляторов GCC 4.5, заменяющем оригинальные оптимизаторы и генераторы кода GCC на аналоги, созданные в рамках проекта LLVM, повышена стабильность работы при компиляции кода на языке Fortran и Java, улучшена обработка ассемблерных inline-вставок, добавлена базовая поддержка типа __float128;
- Добавлен новый бэкенд для виртуальных ISA-чипов NVIDIA PTX (Parallel Thread Execution);
- Добавлена встроенная поддержка ассемблера для ELF-файлов;
- Улучшена реализация техники оптимизации во время динамического связывания (LTO - Link Time Optimization), что позволило ускорить процесс сборки и обеспечить поддержку компиляции таких больших приложений, как Firefox 4;
- Определение циклов аналогичных по действию функциям memset и memcpy и автоматическая замена цикла на вызов функции из libc (реализации memset и memcpy в libc как правило оптимизированы);
- Улучшены средства для отладки оптимизированного кода;
- Подготовлена инфраструктура для базирующейся на регионах оптимизации (region based optimizations);
- Улучшено использование кода, учитывающего состояние регистров. Переписан код, занимающийся распределением регистров (register allocator);
- Полностью переработан код использования набора инструкций MMX, добавлена поддержка наборов инструкций 3dNow! и 3DNowA;
- Ускорена работа бэкенда для платформы ARM, обеспечена поддержка оптимизации для процессоров Cortex-A8 и Cortex-A9,
По заявлению разработчиков LLVM 2.9 будет последним релизом серии 2.x. В версии 3.0 планируется отказаться от поддержки фронтэнда llvm-gcc в пользу Си/C++/Objective-C компилятора Clang (http://clang.llvm.org/) и GCC-плагина DragonEgg (http://dragonegg.llvm.org/). В настоящее время Clang является более оптимальным решением для сборки проектов на языке Си, а DragonEgg является хорошим решением для разработчиков, заинтересованных в интеграции LLVM в GCC.
Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:
- KLEE (http://klee.llvm.org/) - символьный анализатор и генератор тестовых наборов;
- Runtime-библиотека compiler-rt (http://compiler-rt.llvm.org/);
- llvm-mc (http://llvm.org/releases/2.6/docs/ReleaseNotes.html#mc) - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
- VMKit (http://vmkit.llvm.org/) - виртуальная машина для Java VM и .NET VM;
- Реализация функционального языка программирования Pure (http://pure-lang.googlecode.com/);
- LDC (http://www.dsource.org/projects/ldc) - компилятор для языка D;
- Roadsend PHP (http://code.roadsend.com/rphp) - оптимизатор, статический и JIT компилятор для языка PHP;
- Виртуальные машины для Ruby: Rubinius (http://rubini.us/) и MacRuby (http://www.macruby.org/);
- Unladen Swallow (http://code.google.com/p/unladen-swallow/) - реализация языка Python;
- LLVM-Lua (http://code.google.com/p/llvm-lua/)
- FlashCCompiler (http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf) - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.
opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30161)