- Clang
- Содержание
- Обзор
- История развития
- Русские Блоги
- Введение в Clang компилятор
- Что такое компилятор clang?
- Преимущества и недостатки компилятора clang
- Установить LLVM + лязг
- Бинарная установка
- Исходная установка
- Используйте Clang для компиляции программ на C
- Интеллектуальная рекомендация
- Используйте Maven для создания собственного архетипа скелета проекта (4)
- Станция интерпретации больших данных B пользуется популярностью среди гигантов района «призрачные животные» Цай Сюкуня.
- Вопрос A: Алгоритм 7-15: алгоритм кратчайшего пути Дейкстры
- Учебный дневник — перелистывание страниц
- Нулевое основание для отдыха-клиента
- Вам также может понравиться
- Подробно объясните, как новички используют sqlmap для выполнения инъекционных атак на базы данных mysql.
- Vue заметки сортируют, пусть вам начать с Vue.js:. 04_3 Сетевое приложение: AXIOS плюс Вью
- Шаблон алгоритма конной повозки
- 35 Line Code, чтобы получить метод исследования событий (ON)
- Образ докера: gitlab
- Clang. Часть 1: введение
- Что такое Clang?
- Как работает Clang?
- Clang AST
- Как использовать Clang?
- Clang Plugin
- LibTooling (Clang Tool)
- LibClang
- Начинаем работать с Clang
Clang
лицензия Университета Иллинойса (англ.)
Clang является фронт-эндом для языков программирования C, C++, Objective-C и Objective-C++ (англ.), использующим для оптимизации и кодогенерации фреймворк LLVM.
Целью проекта является создание замены GNU Compiler Collection (GCC). Разработка ведется согласно концепции open source; в проект вовлечены несколько крупнейших в разработке ПО корпораций, включая Google и Apple. Исходный код доступен на условиях BSD-подобной лицензии.
Содержание
Обзор
Clang — это компилятор для C-подобных языков, созданный специально для работы на базе LLVM. Комбинация Clang и LLVM предоставляет набор инструментов, позволяющих полностью заменить GCC. Благодаря архитектуре, основанной на библиотеках, Clang (как и LLVM) легко встраивается в другие приложения.
Одной из главных задач Clang является поддержка инкрементной компиляции, позволяющей более тесно интегрировать компилятор и графический интерфейс среды разработки, в отличие от GCC, который был создан для работы в классическом цикле «компиляция-линковка-отладка». В отличие от GCC, ориентированного преимущественно на кодогенерацию, Clang стремится предоставить универсальный фреймворк для парсинга, индексации, статического анализа и компиляции языков семейства Си. В частности, Clang не производит упрощений исходного кода на этапе парсинга (как это делает GCC), гарантируя точное воспроизведение исходного текста в AST.
В отличие от GCC Clang изначально спроектирован для максимального сохранения информации в ходе процесса компиляции, в том числе сохранения «внешнего вида» исходного кода. Эта особенность позволяет Clang создавать развернутые контекстно-ориентированные сообщения об ошибках, понятные как для программистов, так и для сред разработки. Модульный дизайн компилятора позволяет использовать его в составе среды разработки для индексирования кода, подсветки синтаксиса и рефакторинга.
Clang поддерживает большинство распространенных опций GCC.
История развития
В таблице представлены только наиболее значительные события.
Источник
Русские Блоги
Введение в Clang компилятор
Что такое компилятор clang?
clang — это внешний интерфейс набора инструментов компилятора LLVM для компиляции C, C ++ и Objective-C. Целью проекта LLVM является предоставление альтернативы GNU Compiler Suite (gcc), разработанному под эгидой Apple, а его исходный код лицензирован по лицензии BSD-подобного открытого источника от Университета Иллинойса в Урбане-Шампейне.
Преимущества и недостатки компилятора clang
По сравнению с gcc, clang имеет следующие преимущества:
- Скорость компиляции выше: на некоторых платформах скорость компиляции clang значительно выше, чем у gcc.
- Меньший объем памяти: память, занимаемая AST, генерируемым clang, обычно составляет примерно одну пятую от памяти gcc.
- Модульная конструкция: clang использует модульную конструкцию на основе библиотеки, что упрощает интеграцию с IDE и повторное использование для других целей.
- Диагностическая информация очень удобочитаема: в процессе компиляции clang создаст и сохранит большое количество подробных метаданных (метаданных), которые будут более удобны для отладки и отчетов об ошибках.
- Дизайн стал более понятным и простым, понятным, легко расширяемым и укрепляющим. По сравнению с gcc, который имеет более старую кодовую базу, кривая обучения будет более плавной.
В настоящее время Clang все еще находится в процессе непрерывного совершенствования. По сравнению с gcc, Clang необходимо укреплять в следующих аспектах:
- Требуется поддержка большего количества языков: помимо C / C ++ / Objective-C, gcc также поддерживает другие языки, такие как Fortran / Pascal / Java / Ada / Go. В настоящее время Clang в основном поддерживает только четыре языка: C / C ++ / Objective-C / Objective-C ++.
- Необходимо усилить поддержку C ++: поддержка clang для C ++ все еще отстает от gcc, и clang также необходимо усилить поддержку C ++.
- Нужно поддерживать больше платформ: поскольку gcc давно популярен, он широко используется, и поддержка различных платформ также завершена. В настоящее время clang поддерживает следующие платформы: Linux / Windows / Mac OS.
Установить LLVM + лязг
Бинарная установка
- Чистая среда Windows:
можно загрузить сhttp://llvm.org/releases/Загрузите соответствующий установочный пакет для установки. Последняя версия3.8。
Исходная установка
- Первым делом загрузите код llvm:
- Второй шаг — войти в каталог llvm / tools и загрузить код clang.
- Третий шаг — войти в каталог llvm / projects и загрузить код compiler-rt:
- Четвертый шаг — создать сборку каталога на том же уровне, что и llvm в каталоге, где находится llvm, и собрать в нем llvm и clang:
Используйте Clang для компиляции программ на C
Использование clang в основном аналогично gcc, мы можем написать скрипт, чтобы проверить, установлен ли компилятор:
Тогда нам просто нужно войти в оболочку python hello_c.py clang То есть, если вы видите строку вывода «hello world», компилятор уже работает нормально.
Интеллектуальная рекомендация
Используйте Maven для создания собственного архетипа скелета проекта (4)
Один, базовое введение в Maven Во-вторых, скачайте и настройте Maven Три, настроить домашнее зеркало на Али В-четвертых, создайте содержимое скелета архетипа В-пятых, создайте проект через архетип 6. .
Станция интерпретации больших данных B пользуется популярностью среди гигантов района «призрачные животные» Цай Сюкуня.
Автор | Сюй Линь Ответственный редактор | Ху Вэйвэй Предисловие Недавно Цай Сюкунь отправил письмо юриста на станцию B. Содержание письма юриста показало, что «на станции B имеется большое кол.
Вопрос A: Алгоритм 7-15: алгоритм кратчайшего пути Дейкстры
Название Описание Во взвешенном ориентированном графе G для исходной точки v задача о кратчайшем пути от v до оставшихся вершин в G называется задачей кратчайшего пути с одной исходной точкой. Среди ш.
Учебный дневник — перелистывание страниц
Используйте плагин Layui.
Нулевое основание для отдыха-клиента
Предисловие: статья, обобщенная, когда я только что связался с тестом API, в дополнение к остальному клиенту этот инструмент сам, некоторые из мелких пониманий API, я надеюсь помочь тому же белую белу.
Вам также может понравиться
Подробно объясните, как новички используют sqlmap для выполнения инъекционных атак на базы данных mysql.
Шаг 1. Откройте для себя инъекцию Со мной все было нормально, когда я был свободен, я случайно нажал на чужой блог и обнаружил, что ссылка заканчивается на id, поэтому я проверил его вручную. Результа.
Vue заметки сортируют, пусть вам начать с Vue.js:. 04_3 Сетевое приложение: AXIOS плюс Вью
В предыдущем разделе мы ввели основное использование AXIOS, по сравнению с нативным Ajax, который при условии, что способ является более простым и, а сетевые данные теперь в состоянии получить его ров.
Шаблон алгоритма конной повозки
Блог гангстеров Тележки, запряженные лошадьми, используются для решения проблемы самой длинной подстроки палиндрома. Основное внимание уделяется подстрокам, а не подпоследовательностям. Если вы хотите.
35 Line Code, чтобы получить метод исследования событий (ON)
Об авторе: Чжу Сяою,Личный публичный номер: языковой класс большой кошки Эта проблема научит вас этой большой классе Cat.Как написать наиболее эффективное метод исследования событий с 35 Line R Code C.
Образ докера: gitlab
GitLab Docker images Both GitLab CE and EE are in Docker Hub: GitLab CE Docker image GitLab EE Docker image The GitLab Docker images are monolithic images of GitLab running all the necessary services .
Источник
Clang. Часть 1: введение
Что такое Clang?
Я провёл последние несколько месяцев, работая с Clang, фронтендом LLVM. Clang умеет парсить и анализировать любой исходный код на языках семейства С (C, C++, ObjectiveC, и т.п. ) и имеет удивительную модульную структуру, которая делает его простым в использовании.
Если вы ищете статический анализатор кода, я настоятельно рекомендую Clang, он существенно превосходит другие статические анализаторы (такие, как CIL. ) и хорошо документирован. Также список рассылки Clang очень активен и полезен, если вы застряли на чём-то.
Лично я использую Clang для статического анализа драйверов ввода-вывода ядра Linux, включая драйвера камеры и драйвера DRM графической карты. Код ядра, особенно код драйвера, может быть очень сложным и трудным для анализа, но Clang позволяет нам легко поддерживать его. Давайте посмотрим, что можно сделать с его помощью.
Как работает Clang?
В большинстве случаев, Clang запустит препроцессор (который разворачивает все макросы) и парсит исходник, превращая его в абстрактное синтаксическое дерево (AST). C AST работать гораздо проще, чем с исходным кодом, но вы всегда можете получить ссылки на исходник. Фактически, каждая структура в Clang-е, используемая для представления кода (AST, CFG и т.п.), всегда имеет ссылку на оригинальный исходник, полезный для целей анализа, рефакторинга и т.п.
если вам нужно анализировать и модифицировать код на уровне исходника, Clang лучше, чем LLVM. Анализ с помощью LLVM означает, что вы можете использовать язык внутреннего представления LLVM, похожий на ассемблер.
Clang AST
Практически каждый компилятор и статический анализатор использует AST для представления исходного кода. AST, используемое в Clang, очень детализированное и сложное, но вы получите удовольствие, изучая различные классы элементов Clang AST. Ниже приводится краткое введение в Clang AST, но самый простой путь изучить его, это просто делать дампы AST для простых исходников, и смотреть, какое AST им соответствует.
В общем, Clang AST сделано из двух очень гибких классов: Decl и Stmt. У обоих есть множество подклассов, вот несколько примеров:
FunctionDecl — прототип или объявление функции
BinaryOperator — бинарный оператор, например (a + b)
CallExpr — вызов функции, например, foo(x);
Большинство классов имеют «говорящие» имена, например, ForStmt, IfStmt, и ReturnStmt. Вы поймёте суть AST, поиграв с ним несколько минут. Вы можете найти документацию по классам AST, поискав что-либо вроде “Clang FunctionDecl.”
Как использовать Clang?
Clang может использоваться как прямая замена gcc и предлагает несколько крутых инструментов статического анализа. Как программист (а не как нормальный пользователь!), вы можете получить доступ к всей мощи clang, используя его как библиотеку одним из трёх способов, в зависимости от того, как вы решите.
Для начала, ознакомьтесь с описанием интерфейсов clang. В дополнение к тому, что написано в этом описании, я выделю другие существенные различия между различными интерфейсами clang.
Clang Plugin
Ваш код является плагином, и запускается каждый раз заново для каждого файла исходника, что означает, что вы не можете сохранять глобальную информацию или другую контекстную информацию между двумя разными исходными файлами (но вы можете запустить плагин для множества файлов последовательно). Плагин запускается путём передачи соответствующих опций системе компиляции (Clang, Make и т.п.) через аргументы командной строки. Это похоже на то, как вы включаете оптимизацию в GCC (т.е. «-O1»). Вы не можете запустить какую-либо свою задачу до или после того, как исходный файл будет проанализирован.
LibTooling (Clang Tool)
Ваш код — обычная программа на С++, с нормальной функцией main(). LibTooling используется для запуска некоторого анализа на исходном коде (с множеством файлов, при желании) без запуска обычного процесса компиляции. Новый экземпляр кода для анализа (и новый AST) будет создан для каждого нового файла исходника (как и в случае Clang Plugin), но вы можете сохранять контекстную информацию между файлами исходников в своих глобальных переменных. Так как у вас есть функция main(), вы можете запускать какие-либо задачи перед или после того, как clang завершит анализ ваших исходных файлов.
LibClang
LibClang хорош тем, что это стабильный API. Clang периодически меняется, и если вы используете Plugin или Libtooling, вам нужно будет править ваш код, чтобы отслеживать эти изменения (но это не так сложно!). Если вам нужен доступ к Clang API из языков, отличных от C++ (например, из Python), вы должны использовать LibClang.
Примечание: LibClang не даёт полный доступ к AST (только высокоуровневый доступ), но другие два варианта дают. Как правило, нам нужен полный доступ к AST.
Если вы не можете решить, что использовать, я бы порекомендовал начать с интерфейса LibTooling. Он проще, и работает так, как вы ожидаете. Он предлагает гибкость и полный доступ к AST, как и Plugin, без потери глобального контекста между исходными файлами. LibTooling не сложнее в использовании, чем Plugin.
Начинаем работать с Clang
Сейчас, когда вы знаете основы, давайте начнём! Эта инструкция будет работать на любой версии Linux (и, возможно, OS X), но тестировалось на Ubuntu. Вы можете получить LLVM и Clang, проделав следующие шаги (взято из официальной инструкции к Clang):
Скачать и установить (например, с помощью apt-get) все необходимые пакеты.
(Типичный дистрибутив Linux идёт со всем необходимым, кроме subversion).
Смените директорию на ту, в которую вы хотите установить LLVM (например,
/static_analysis/). Будем называть её директорией верхнего уровня. Выполните следующие команды в терминале:
Компиляция LLVM и Clang займёт некоторое время.
Для проверки запустите:
Можно протестировать Clang, запустив классический пример Hello World:
В этом руководстве я использую Clang 3.4 на Ubuntu 13.04, но вы можете использовать другие варианты и того, и другого.
Сейчас перейдём к программированию на Clang.
Источник