Вчера состоялся выпуск новой версии компилятора LLVM 3.3, результат шести месяцев работы десятков разработчиков, которые внесли свой вклад.
LLVM (Low Level Virtual Machine) — оптимизирующий компилятор и интерпретатор, позволяющий компилировать программы на С, C++, Objective-C, Fortran, Ada, Haskell, Java, Python, Ruby, JavaScript, GLSL. В рамках проекта LLVM разработан фронтенд Clang для языков C и C++. Целью проекта является создание замены GNU Compiler Collection (GCC).
Разработчики пишут, что это «большой релиз»: в версии 3.3 улучшена поддержка архитектур AArch64 и AMD R600 GPU, добавлена поддержка IBM z/Architecture S390 и сделано множество улучшений для MIPS и бэкенда PowerPC, в том числе поддержка инструкций PowerPC 2.04/2.05/2.06 и встроенного ассемблера.
Качество кода, который генерирует LLVM, значительно повысилось. Автоматический векторизатор (блок компилятора, генерирующий векторные операции) производит гораздо лучший код во многих случаях и включен по умолчанию в опции -O3. Появился новый Superword-Level Parallelism (SLP)-векторизатор (пока отключат по умолчанию, тесты показывают неоднозначный результат), а также реализовано множество других улучшений.
LLVM 3.3 — важный релиз для фронтенда Clang, который теперь полностью поддерживает все функции стандарта C++11. На сегодняшний день это единственная полная реализация в компиляторах этого стандарта, включая такие важные функции библиотеки C++11 как std::regex.
Clang теперь поддерживает символы Unicode в идентификаторах, расширена функциональность модуля для статического анализа Clang Static Analyzer, разработан новый инструмент C++11 Migrator для помощи программистам в оптимизации старого кода под новые функции C++11. Еще один инструмент Clang Format позволяет внешним редакторам (vim, emacs и проч.) автоматически форматировать код Clang.
Независимые тесты показывают, что LLVM 3.3 превосходит LLVM 3.2 и конкурентов в некоторых бенчмарках.