Название: Оптимизирующие компиляторы. Структура и алгоритмы Автор: Константин Владимиров Издательство: АСТ Год: 2024 Страниц: 274 Язык: русский Формат: pdf, epub Размер: 10.1 MB
«Оптимизирующие компиляторы» – настольная книга специалиста, который решил не просто укрепить свои знания, но и вывести навыки на новый уровень.
Вместе с Константином Владимировым вы разберете теорию оптимизирующей компиляции – все те сложные преобразования, которые происходят с текстом программы на его пути к исполняемому файлу, узнаете, что такое тулчейны и каким этапам трансформации подвергается программа до того, как будет впервые запущена, а также закрепите полученные знания, выполняя задания.
В этой книге речь в основном пойдёт о компиляторах. Есть разные модули, написанные на разных языках разными программистами. И должна быть некая программа, которая помогает собрать их воедино и перевести на язык, который поймёт машина. Эта программа и есть компилятор в широком смысле. Она не столько выполняет, сколько организует (драйвит) этот процесс, запуская много других программ, которые и делают всё на пути от исходного кода к исполняемому файлу — то есть и трансляцию, и оптимизацию, и ассемблирование, и линковку. И чаще всего люди, когда говорят про компилятор, имеют в виду именно драйвер компиляции (например программу gcc).
Компилятор, в узком смысле, это одна из программ, вызываемых драйвером компиляции. Эта программа переводит код других программ с высокоуровневого языка на низкоуровневый, то есть делает их оптимизирующую трансляцию. Далее, когда я буду говорить о компиляторе как о программе, я буду иметь в виду именно «компилятор в узком смысле».
На самом деле даже в узком смысле компилятор — это слишком широкая тема, которую будет сложно описать в рамках одной книги. Отмечу сразу, в этой работе мы не будем касаться динамической (just in time, JIT) компиляции, бинарной трансляции и всего, что с ними связано. JIT-компиляторы — это, несомненно, тоже компиляторы в узком смысле. Но речь дальше пойдет исключительно про статические компиляторы. Многие из тех алгоритмов, которые будут рассмотрены ниже, вполне применимы и используются в системах динамической компиляции, но там есть сложные детали и нюансы, которые мне хотелось бы опустить. Будем считать, что здесь и далее я буду иметь в виду исключительно статический компилятор и исключительно такой, который в итоге осуществляет трансляцию с языка программирования общего назначения в язык ассемблера целевой архитектуры.
Автор имеет определённые языковые предпочтения: много лет используя и преподавая языки C и C++ (и разрабатывая компиляторы в основном на них и для них), я к ним в некотором роде привык. Поэтому, когда говорю о «каком-то» языке программирования, не уточняя, что это за язык, обычно я имею в виду что-то вроде C или C++: что-то статически типизированное, что-то компилируемое, что-то с явным управлением ресурсами, включая память и т.д. Тот язык псевдокода, на котором я буду описывать компиляторные алгоритмы, также будет подозрительно похож на современный высокоуровневый C++ (без некоторых технических деталей, выкинутых для краткости). Надеюсь, он окажется для читателя интуитивно понятен.
Скачать Оптимизирующие компиляторы. Структура и алгоритмы