Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 634794)
Контекстум
Руконтекст антиплагиат система

LLVM: инфраструктура для разработки компиляторов. Знакомство с основами LLVM и использование базовых библиотек для создания продвинутых инструментов (4000,00 руб.)

0   0
Первый авторЛопес
АвторыАулер Р.
ИздательствоМ.: ДМК Пресс
Страниц343
ID794565
АннотацияLLVM — новейший фреймворк для разработки компиляторов. Благодаря простоте расширения и организации в виде множества библиотек, LLVM легко поддается освоению даже начинающими программистами, вопреки устоявшемуся мнению о сложности разработки компиляторов. Сначала эта книга покажет, как настроить, собрать и установить библиотеки, инструменты и внешние проекты LLVM. Затем познакомит с архитектурой LLVM и особенностями работы всех компонентов компилятора: анализатора исходных текстов, генератора кода промежуточного представления, генератора выполняемого кода, механизма JIT-компиляции, возможностями кросс-компиляции и интерфейсом расширений. На множестве наглядных примеров и фрагментов исходного кода книга поможет вам войти в мир разработки компиляторов на основе LLVM. Издание предназначено энтузиастам, студентам, а также разработчикам компиляторов, интересующимся LLVM. Читатели должны знать язык программирования C++ и, желательно, иметь некоторые представления о теории компиляции.
ISBN978-5-97060-305-5
УДК004.4'422LLVM
ББК32.973.33
Лопес, Б.К. LLVM: инфраструктура для разработки компиляторов. Знакомство с основами LLVM и использование базовых библиотек для создания продвинутых инструментов / Р. Аулер; Б.К. Лопес .— Москва : ДМК Пресс, 2015 .— 343 с. — ISBN 978-5-97060-305-5 .— URL: https://rucont.ru/efd/794565 (дата обращения: 26.04.2024)

Предпросмотр (выдержки из произведения)

LLVM_инфраструктура_для_разработки_компиляторов._Знакомство_с_основами_LLVM_и_использование_базовых_библиотек_для_создания_продвинутых_инструментов.pdf
УДК 004.4'422LLVM ББК 32.973.33 Л77 Л77 Бруно Кардос Лопес, Рафаэль Аулер LLVM: инфраструктура для разработки компиляторов. / пер. с англ. Киселев А. Н. – М.: ДМК Пресс, 2015. – 342 с.: ил. ISBN 978-5-97060-305-5 LLVM – новейший фреймворк для разработки компиляторов. Благодаря простоте расширения и организации в виде множества библиотек, LLVM легко поддается освоению даже начинающими программистами, вопреки устоявшемуся мнению о сложности разработки компиляторов. Сначала эта книга покажет, как настроить, собрать и установить библиотеки, инструменты и внешние проекты LLVM. Затем познакомит с архитектурой LLVM и особенностями работы всех компонентов компилятора: анализатора исходных текстов, генератора кода промежуточного представления, генератора выполняемого кода, механизма JIT-компиляции, возможностями кросс-компиляции и интерфейсом расширений. На множестве наглядных примеров и фрагментов исходного кода книга поможет вам войти в мир разработки компиляторов на основе LLVM. Издание предназначено энтузиастам, студентам, а также разработчикам компиляторов, интересующимся LLVM. Читатели должны знать язык программирования C++ и, желательно, иметь некоторые представления о теории компиляции. Original English language edition published by Published by Packt Publishing Ltd., Livery Place, 35 Livery Street, Birmingham B3 2PB, UK. Copyright © 2014 Packt Publishing. Russian-language edition copyright (c) 2015 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-78216-692-4 (англ.) ISBN 978-5-97060-305-5 (рус.) Copyright © 2014 Packt Publishing © Оформление, перевод на русский язык, ДМК Пресс, 2015
Стр.5
Оглавление Об авторах ...................................................... 11 О рецензентах.................................................. 12 предисловие ................................................... 14 Содержание книги ......................................................................... 17 Что потребуется для работы с книгой ............................................ 19 Кому адресована эта книга ............................................................ 19 Типографские соглашения ............................................................ 20 Отзывы и пожелания ..................................................................... 21 Скачивание исходного кода примеров .......................................... 21 Список опечаток............................................................................ 22 Нарушение авторских прав ........................................................... 22 Глава 1. Сборка и установка LLVM ........................ 23 Порядок нумерации версий LLVM .................................................. 24 Установка скомпилированных пакетов LLVM ................................. 25 Установка скомпилированных пакетов с официального сайта ............... 25 Установка с использованием диспетчера пакетов ................................. 27 Сборка из исходных текстов .......................................................... 28 Системные требования ......................................................................... 28 Получение исходных текстов................................................................. 29 Сборка и установка LLVM ...................................................................... 30 Windows и Microsoft Visual Studio ........................................................... 37 Mac OS X и Xcode .................................................................................. 41 В заключение ................................................................................ 45 Глава 2. Внешние проекты .................................. 47 Введение в дополнительные инструменты Clang ........................... 47 Сборка и установка дополнительных инструментов Clang ..................... 49 Compiler-RT .......................................................................................... 50 Compiler-RT в действии ......................................................................... 51 Расширение DragonEgg ................................................................. 52 Сборка DragonEgg ................................................................................ 53
Стр.6
6 Оглавление Конвейер компиляции с применением DragonEgg и инструментов LLVM ............................................................................ 54 Пакет тестов LLVM ................................................................................ 56 Использование LLDB............................................................................. 57 Введение в стандартную библиотеку libc++ .......................................... 59 В заключение ................................................................................ 63 Глава 3. Инструменты и организация ................... 64 Введение в основные принципы организации LLVM ...................... 64 LLVM сегодня ................................................................................ 67 Взаимодействие с драйвером компилятора .................................. 71 Использование автономных инструментов .................................... 72 Внутренняя организация LLVM ...................................................... 75 Основные библиотеки LLVM .................................................................. 76 Приемы программирования на C++ в LLVM ........................................... 78 Эффективные приемы программирования на C++ в LLVM ..................... 80 Демонстрация расширяемого интерфейса проходов............................ 83 Реализация первого собственного проекта LLVM .......................... 84 Makefile ................................................................................................. 85 Реализация ........................................................................................... 87 Общие советы по навигации в исходных текстах LLVM .................. 89 Читайте код как документацию ............................................................. 89 Обращайтесь за помощью к сообществу .............................................. 90 Знакомьтесь с обновлениями – читайте журнал изменений в SVN как документацию ....................................................................... 90 Заключительные замечания .................................................................. 93 В заключение ................................................................................ 93 Глава 4. Анализатор исходного кода .................... 94 Введение в Clang........................................................................... 94 Работа анализатора исходного кода ..................................................... 95 Библиотеки ........................................................................................... 97 Диагностика в Clang ............................................................................ 100 Этапы работы анализатора Clang ................................................ 105 Лексический анализ ............................................................................ 105 Синтаксический анализ ...................................................................... 112 Семантический анализ........................................................................ 119 Все вместе .................................................................................. 122 В заключение .............................................................................. 126 Глава 5. промежуточное представление LLVM ..... 127 Обзор .......................................................................................... 127 Зависимость LLVM IR от целевой архитектуры .................................... 130
Стр.7
Оглавление 7 Основные инструменты для работы с форматами IR ................... 131 Введение в синтаксис языка LLVM IR ........................................... 132 Представление LLVM IR в памяти ........................................................ 136 Реализация собственного генератора LLVM IR ............................ 139 Сборка и запуск генератора IR ............................................................ 143 Как генерировать любые конструкции IR с использованием генератора кода C++ ........................................................................... 144 Оптимизация на уровне IR ........................................................... 145 Оптимизации времени компиляции и времени компоновки ................ 145 Определение проходов, имеющих значение ....................................... 147 Зависимости между проходами .......................................................... 149 Прикладной интерфейс проходов ....................................................... 151 Реализация собственного прохода ..................................................... 152 В заключение .............................................................................. 157 Глава 6. Генератор выполняемого кода ............... 158 Обзор .......................................................................................... 158 Инструменты генераторов кода .......................................................... 161 Структура генератора кода ......................................................... 162 Библиотеки генераторов кода ..................................................... 163 Язык TableGen ............................................................................. 165 Язык ................................................................................................... 167 Использование файлов .td с генераторами кода ................................. 168 Этап выбора инструкций ............................................................. 174 Класс SelectionDAG ............................................................................. 175 Упрощение ......................................................................................... 178 Объединение DAG и легализация ........................................................ 179 Выбор инструкций с преобразованием «DAG-to-DAG» ........................ 181 Визуализация процесса выбора инструкций ....................................... 184 Быстрый выбор инструкций ................................................................ 185 Планирование инструкций .......................................................... 186 Маршруты инструкций ........................................................................ 186 Определение опасностей ................................................................... 188 Единицы планирования ....................................................................... 188 Машинные инструкции ................................................................ 188 Распределение регистров ........................................................... 189 Объединение регистров ..................................................................... 191 Замена виртуальных регистров .......................................................... 196 Архитектурно-зависимые обработчики ............................................... 197 Пролог и эпилог .......................................................................... 198 Индексы кадров стека ......................................................................... 199 Инфраструктура машинного кода ................................................ 199
Стр.8
8 Оглавление Инструкции MC ................................................................................... 200 Эмиссия кода ..................................................................................... 200 Реализация собственного прохода для генератора кода ............. 203 В заключение .............................................................................. 206 Глава 7. Динамический компилятор .................. 208 Основы механизма динамической компиляции в LLVM ................ 209 Введение в механизм выполнения ...................................................... 210 Управление памятью ........................................................................... 212 Введение в инфраструктуру llvm::JIT ........................................... 213 Запись блоков двоичного кода в память .............................................. 213 JITMemoryManager ............................................................................. 214 Механизмы вывода целевого кода ...................................................... 214 Информация о целевой архитектуре ................................................... 215 Практика применения класса JIT ......................................................... 217 Введение в инфраструктуру llvm::MCJIT ...................................... 222 Механизм MCJIT ................................................................................. 223 Как MCJIT компилирует модули .......................................................... 224 Диспетчер памяти ............................................................................... 227 Использование механизма MCJIT ............................................... 228 Инструменты компиляции LLVM JIT ............................................. 231 Инструмент lli ...................................................................................... 231 Инструмент llvm-rtdyld ........................................................................ 232 Дополнительные ресурсы ........................................................... 233 В заключение .............................................................................. 234 Глава 8. Кросс-платформенная компиляция ....... 235 Сравнение GCC и LLVM ............................................................... 236 Триады определения целевой архитектуры ................................. 238 Подготовка инструментария ....................................................... 240 Стандартные библиотеки C и C++ ....................................................... 240 Библиотеки времени выполнения ....................................................... 241 Ассемблер и компоновщик ................................................................. 242 Анализатор исходного кода Clang ....................................................... 242 Кросс-компиляция с аргументами командной строки Clang ........ 244 Параметры драйвера, определяющие архитектуру ............................. 244 Зависимости ...................................................................................... 245 Кросс-компиляция .............................................................................. 246 Изменение корневого каталога ........................................................... 248 Создание кросс-компилятора Clang ............................................ 250 Параметры настройки ......................................................................... 250 Сборка и установка кросс-компилятора на основе Clang .................... 251 Альтернативные методы сборки .......................................................... 252
Стр.9
Оглавление 9 Тестирование .............................................................................. 254 Одноплатные компьютеры .................................................................. 254 Симуляторы ........................................................................................ 255 Дополнительные ресурсы ........................................................... 255 В заключение .............................................................................. 256 Глава 9. Статический анализатор Clang .............. 257 Роль статического анализатора ................................................... 258 Сравнение классического механизма предупреждений со статическим анализатором Clang ................................................... 258 Возможности механизма символического выполнения ....................... 262 Тестирование статического анализатора .................................... 265 Использование драйвера и компилятора ............................................ 265 Получение списка доступных средств проверки .................................. 266 Использование статического анализатора в Xcode IDE ....................... 268 Создание графических отчетов в формате HTML ................................ 269 Анализ больших проектов ................................................................... 269 Расширение статического анализатора Clang собственными средствами определения ошибок .....................................................275 Архитектура проекта ........................................................................... 275 Разработка собственного средства проверки ..................................... 277 Дополнительные ресурсы ........................................................... 287 В заключение .............................................................................. 289 Глава 10. Инструменты Clang и фреймворк LibTooling ................................... 290 Создание базы данных команд компиляции ................................ 290 Clang-tidy .................................................................................... 292 Проверка исходного кода с помощью Clang-tidy ................................. 293 Инструменты рефакторинга ........................................................ 294 Clang Modernizer ................................................................................. 295 Clang Apply Replacements .................................................................... 296 ClangFormat ........................................................................................ 298 Modularize ........................................................................................... 300 Module Map Checker ............................................................................ 308 PPTrace ............................................................................................... 309 Clang Query ......................................................................................... 311 Clang Check ........................................................................................ 313 Удаление вызовов c_str()..................................................................... 314 Создание собственного инструмента .......................................... 314 Определение задачи – создание инструмента рефакторинга кода на C++ ......................................................................................... 315 Определение структуры каталогов для исходного кода ....................... 315
Стр.10
10 Оглавление Шаблонный код инструмента .............................................................. 317 Использование предикатов AST .......................................................... 321 Создание обработчиков ...................................................................... 326 Тестирование нового инструмента рефакторинга ............................... 328 Дополнительные ресурсы ........................................................... 329 В заключение .............................................................................. 329 предметный указатель .................................... 331
Стр.11

Облако ключевых слов *


* - вычисляется автоматически
Антиплагиат система на базе ИИ