Анонсирован (http://lists.cs.uiuc.edu/pipermail/llvm-announce/2014-Septem...) релиз проекта LLVM 3.5 (http://llvm.org) (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод (http://llvm.org/docs/BitCodeFormat.html) RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.Улучшения (http://llvm.org/releases/3.5.0/tools/clang/docs/ReleaseNotes...) в Clang 3.5:
- Достижение уровня самопересборки (self host) на платформах Linux/Sparc64 и FreeBSD/Sparc64;
- Начальная поддержка некоторых элементов будущего международного стандарта C++1z, идущего следом за стандартом C++ 14 (http://www.opennet.me/opennews/art.shtml?num=40408), полная поддержка которого уже реализована в Clang (Clang стал первым компилятором с поддержкой C++ 14);
- На платформе Windows задействован обновлённый MingW ABI для достижение совместимости с GCC 4.7 и более новыми выпусками;
- Значительный прогресс в реализации поддержки OpenMP. Добавлен разбор и анализ семантики для всех pragma, определённых в спецификации OpenMP 3.1 (http://www.opennet.me/opennews/art.shtml?num=31153), за исключением atomics и ordered. Runtime-библиотека (http://www.opennet.me/opennews/art.shtml?num=38110) OpenMP адаптирована для поддержки арихитектур ARM и PowerPC. Частично реализованы некоторые возможности OpenMP 4.0 (http://www.opennet.me/opennews/art.shtml?num=37635), такие как векторизация последовательных и параллелизированных циклов с использованием инструкции SIMD, и поддержка ускорения вычислений за счёт задействования дополнительных аппаратных вычислительных устройств.
- Средство проверки наличия атрибутов __has_attribute теперь учитывает поддержку заданного атрибута целевой платформой для которой осуществляется сборка (ранее проверялось лишь семантическое наличие атрибута без учёта его фактической поддержки);
- Поддержка генерации ремарок (флаг "-R"), диагностических сообщений о процессе компиляции, в том числе информирующих ("-Rpass") об использовании тех или иных оптимизаций для разных частей кода. Изучение ремарок позволяет разработчику увеличить эффективность оптимизации кода;- Расширены средства диагностики ошибок. Обеспечен вывод нефатального предупреждения вместо вывода ошибки при использовании неподдерживаемых флагов оптимизации GCC. Добавлены новые типы предупреждений: -Wabsolute-value, -Wtautological-pointer-compare и -Wtautological-undefined-compare.
Основные новшества (http://llvm.org/releases/3.5/docs/ReleaseNotes.html) LLVM 3.5:
- В реализацию интегрированного ассемблера для архитекстуры ARM добавлена поддержка многих директив и расширений GNU;
- В интегрированный ассемблер добавлена поддержка MIPS и PowerPC;
- Поддержка шестой редакции архитектур MIPS32 и MIPS64;
- Значительно улучшена поддержка архитектуры AArch64, в том числе улучшен процесс генерации кода, добавлена поддержка iOS и значительно ускорен процесс компиляции при выборе уровня оптимизации "-O0";
Из параллельно развивающихся проектов, основанных на 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 и .NET;
- Реализация функционального языка программирования 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/);
- LLVM-Lua (http://code.google.com/p/llvm-lua/)
- FlashCCompiler (http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf) - средство для компиляции кода на языке Си в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
- LLDB (http://lldb.llvm.org/) - новая (http://www.opennet.me/opennews/art.shtml?num=26907) модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; показывает крайне высокое быстродействие при отладке программ большого размера;
- emscripten (https://github.com/kripken/emscripten/wiki) - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
- sparse-llvm (https://github.com/penberg/sparse-llvm) - бэкенд, нацеленный (http://www.opennet.me/opennews/art.shtml?num=31636) на создание Си-компилятора, способного собирать ядро Linux.
- Portable OpenCL (http://www.opennet.me/opennews/art.shtml?num=32092) - открытая и независимая реализация стандарта OpenCL;
- CUDA Compiler (http://www.opennet.me/opennews/art.shtml?num=33800) - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
- Julia (http://www.opennet.me/opennews/art.shtml?num=33315) - открытый динамический язык программирования, использующий наработки проекта LLVM.
- Jade (https://github.com/orcc/jade) (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC);
- PNaCl (https://developers.google.com/native-client/pnacl-preview/ov...) (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры;
- PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
- Likely (http://www.liblikely.org/) - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
- LibBeauty (http://www.libbeauty.com/) - инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll);
- McSema (http://www.opennet.me/opennews/art.shtml?num=40375) - фреймворк для преобразования машинного кода в биткод LLVM;
- Swift (http://www.opennet.me/opennews/art.shtml?num=39912) - основанный на LLVM язык программирования, развиваемый компанией Apple;
- FTL (http://www.opennet.me/opennews/art.shtml?num=39784) (Fourth Tier LLVM) - JIT-компилятор для движка WebKit;
URL: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2014-Septem...
Новость: http://www.opennet.me/opennews/art.shtml?num=40520