Официальный Релиз Llvm 3.3.

Для тех, кто не следит пристально за развитием Clang/LLVM, сообщаю, что вышла версия 3.3. LLVM продолжает развиваться семимильными шагами и новый релиз, как заявлено, является первым, поддерживающим все возможности C++11, добавлена поддержка целого пакета новых таргетов, а также появилось несколько интересных инструментов на базе инфраструктуры LLVM. появился.

Оптимизатор также продолжает развиваться — появился автовекторизатор, который по умолчанию работает на -O3, многое сделано для улучшения существующих оптимизаций.

Кому интересны подробности — добро пожаловать под кат. Начнем с поддержки C++11. Заявлена полная поддержка, включая поддержку библиотек таких важных функций, как, например, std::regex. О завершении работы над C++11 в транке было объявлено в Блог LLVM еще в апреле и сейчас фронтенд-разработчики заняты поддержкой проекта следующего стандарта, который называется C++1y. Говорят, что после того, как после выпуска C++11 было обнаружено несколько досадных недостатков, Бьёрн Страуструп заявил, что не выпустит новый стандарт, пока все возможности не будут реализованы хотя бы в одном компиляторе.

Так что остается только приветствовать активность разработчиков clang. Для тех, кто готов начать использовать C++11 прямо сейчас в существующих проектах, мы предлагаем специальную акцию.

Инструмент миграции 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++ #компиляторы

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.