Для тех, кто не следит пристально за развитием Clang/LLVM, сообщаю, что вышла версия 3.3. LLVM продолжает развиваться семимильными шагами и новый релиз, как заявлено, является первым, поддерживающим все возможности C++11, добавлена поддержка целого пакета новых таргетов, а также появилось несколько интересных инструментов на базе инфраструктуры LLVM. появился.
Оптимизатор также продолжает развиваться — появился автовекторизатор, который по умолчанию работает на -O3, многое сделано для улучшения существующих оптимизаций.
Кому интересны подробности — добро пожаловать под кат. Начнем с поддержки C++11. Заявлена полная поддержка, включая поддержку библиотек таких важных функций, как, например, std::regex. О завершении работы над C++11 в транке было объявлено в Блог LLVM еще в апреле и сейчас фронтенд-разработчики заняты поддержкой проекта следующего стандарта, который называется C++1y. Говорят, что после того, как после выпуска C++11 было обнаружено несколько досадных недостатков, Бьёрн Страуструп заявил, что не выпустит новый стандарт, пока все возможности не будут реализованы хотя бы в одном компиляторе.
Так что остается только приветствовать активность разработчиков clang. Для тех, кто готов начать использовать C++11 прямо сейчас в существующих проектах, мы предлагаем специальную акцию.
С помощью этой утилиты вы можете автоматически преобразовывать старые циклы в циклы for на основе диапазона, использовать nullptr вместо инициализации указателей нулями, менять тип объявлений переменных на auto, где это необходимо, и добавлять переопределение в объявления виртуальных функций.
Отрадно отметить, что этот инструмент разработан сотрудниками компании Intel, которая начинает все больше инвестировать в LLVM наряду с Apple и Google. Еще один интересный инструмент, ставший возможным благодаря открытости и расширяемости Clang, — это clang-формат .
Он позволяет форматировать исходный код по заданному стилю, но при этом отличается от аналогов тем, что, используя различные компоненты Clang, получает информацию о синтаксической структуре кода, достаточную для полного переформатирования, практически не фокусируясь на от форматирования исходного кода (за редким исключением: например, он может оставлять пустые строки, разделяющие логические блоки кода, и сохранять привязку комментария к комментируемым сущностям).
При этом clang-format не использует весь парсер Clang, что позволяет использовать его для любых фрагментов исходного кода, напоминающих корректный код C++.
И если во времена C можно было обойтись относительно простыми подходами, то обилие синтаксических структур в C++ и их зависимость от контекста требуют от такого инструмента достаточно глубокого понимания кода.
Если вас интересуют подробности, рекомендую посмотреть видео с конференции, где один из разработчиков рассказывает об этом инструменте: материалы конференции найдите «clang-format — автоматическое форматирование для C++».
Кстати, также доступны плагины для Vim и Emacs, позволяющие форматировать текст на лету.
Оптимизатор также внес хорошие улучшения.
Основным нововведением является автовекторизатор цикла, включенный по умолчанию в -O3. Как известно, чуть меньше года назад Apple начала активно продвигать создание автовекторизатора и теперь мы можем увидеть первые плоды этих усилий.
Объективно оценивая состояние проекта, стоит отметить, что хотя лучший на рынке автовекторизатор для x86 (реализованный в Intel Compiler) еще в лучшем случае много лет разработки и конкуренция с GCC тоже не в пользу новичок, но даже относительно простое решение может дать пользователю заметные преимущества.
Ведь, как известно, 80% результата достигается 20% усилий.
И пусть никто меня не упрекает в моей принадлежности к Intel, думаю, многие согласятся с этой оценкой.
Перечислять более мелкие улучшения в оптимизации бессмысленно.
Скажу лишь, что когда дело доходит до скалярных оптимизаций, Clang готов конкурировать и с GCC, и с Intel Compiler, а иногда даже побеждать этих оптимизационных зубров.
LTO (оптимизация времени соединения) тоже преуспевает — но хотя результаты хорошие, один из архитекторов признает, что существуют фундаментальные проблемы, которые еще предстоит решить.
Заинтригованный столь смелым заявлением, советую посмотреть основной доклад товарища Чендлера «Оптимизация в LLVM – цифры, пример и взгляд в будущее» на ту же тему.
Release Notes на удивление проигнорировали одну из самых сильных сторон Clang — его непревзойденную точность и детальную диагностику, над которой они также продолжают работать (скажем прямо, на фоне такого конкурента разработчикам GCC стало стыдно и они тоже хорошо продвинулись в этом направлении ).
В семействе средств динамической проверки кода также есть пополнение, так называемые санитайзеры – помимо Адрес- И Нить- добавлен Дезинфицирующее средство памяти .
Для тех, кто использует статическую проверку кода, есть и хорошие новости — Статический анализатор Clang теперь поддерживает несколько новых типов проверок и может выходить за рамки конструкторов и деструкторов C++.
Новый выпуск включает поддержку новых целей, наиболее заметными из которых являются графические процессоры AArch64 и AMD R600. Также в списке есть IBM z/Architecture S390 — я думаю, поддержка такой архитектуры уже является признаком зрелости компилятора.
Некоторых может заинтересовать серьезно улучшенная серверная часть PowerPC и поддержка MIPS. Доступны официальные примечания к выпуску здесь , а сам компилятор для различных платформ можно скачать Здесь .
Теги: #Clang #llvm #c++11 #программирование #C++ #компиляторы
-
Грядущий Кризис Систем Интернет-Коммуникаций
19 Oct, 24 -
Установка Esxi 5.1 На Nuc (Dc3217By)
19 Oct, 24 -
Медицина Будущего. Взгляд Программиста
19 Oct, 24 -
C&++: Закон Больших Двойок
19 Oct, 24 -
Необходим Ли Метод Options В Службах Rest?
19 Oct, 24 -
10 Скриптов Jquery Для Улучшения Интерфейса
19 Oct, 24