Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
2
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Книги для программистов: https://t.me/booksforits

CPYTHON

PYTHON

2023

Книги для программистов: https://t.me/booksforits

ББК 32.973.2-018.1 УДК 004.43 Ш81

Шоу Энтони

Ш81 Внутри CPYTHON: гид по интерпретатору Python. — СПб.: Питер, 2023. — 352 с.: ил. — (Серия «Библиотека программиста»).

ISBN 978-5-4461-1925-7

CPython, самая популярная реализация Python, абстрагируется от сложностей ОС и предоставляет платформу для создания масштабируемых и высокопроизводительных приложений. Каждому python-разработчику на какой-то стадии необходимо будет узнать, как работает CPython. Это позволит в полной мере использовать его мощь и оптимизировать приложения. ВыразберетесьсосновнымиконцепциямивнутреннегоустройстваCPythonинаучитесь:читать исходный код интерпретатора CPython и свободно ориентироваться в нем; вносить изменения в синтаксис Python и компилировать их в вашу собственную версию CPython; понимать внутреннюю реализацию таких структур, как списки, словари и генераторы; управлять памятью CPython; масштабировать код Python за счет параллелизма и конкурентного выполнения; дополнять базовые типы новой функциональностью; выполнять наборы тестов; профилировать и проводить бенчмарк Python-кода и исполнительной среды; отлаживать код C и Python на профессиональном уровне; изменять или обновлять компоненты библиотеки CPython, чтобы они могли использоваться в будущих версиях.

16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)

ББК 32.973.2-018.1 УДК 004.43

Права на издание получены по соглашению с DevAcademy Media Inc. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

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

ISBN 978-1775093343 англ.

© Real Python (realpython.com)

ISBN 978-5-4461-1925-7

© Перевод на русский язык ООО «Прогресс книга», 2022

 

© Издание на русском языке, оформление ООО «Прогресс книга», 2022

 

© Серия «Библиотека программиста», 2022

Книги для программистов: https://t.me/booksforits

Оглавление

Об авторе...........................................................................................................................

13

О группе редакторов......................................................................................................

13

Предисловие.........................................................................................

14

Введение................................................................................................

16

Как использовать эту книгу........................................................................................

17

Дополнительные материалы и учебные ресурсы................................................

18

Загрузка исходного кода CPython.......................................................

21

Что в исходном коде?....................................................................................................

22

Настройка среды разработки..............................................................

24

IDE или редактор?.........................................................................................................

24

Настройка Visual Studio...............................................................................................

25

Настройка Visual Studio Code....................................................................................

28

Настройка Vim................................................................................................................

36

Выводы...............................................................................................................................

40

Компиляция CPython............................................................................

41

Компиляция CPython на macOS..............................................................................

42

Компиляция CPython на Linux.................................................................................

44

Книги для программистов: https://t.me/booksforits

6    Оглавление

 

Установка специализированной версии.................................................................

46

Знакомство с Make.........................................................................................................

46

Make-цели CPython.......................................................................................................

48

Компиляция CPython на Windows..........................................................................

51

Профильная оптимизация..........................................................................................

56

Выводы...............................................................................................................................

58

Грамматика и язык Python...................................................................

59

Почему CPython написан на C, а не на Python....................................................

60

Спецификация языка Python.....................................................................................

62

Генератор парсеров.........................................................................................................

66

Повторное генерирование грамматики..................................................................

67

Выводы...............................................................................................................................

71

Конфигурация и ввод...........................................................................

73

Конфигурация состояния............................................................................................

75

Структура данных конфигурации среды выполнения......................................

77

Конфигурация сборки..................................................................................................

79

Сборка модуля из входных данных.........................................................................

80

Выводы...............................................................................................................................

85

Лексический анализ и парсинг с использованием

 

синтаксических деревьев....................................................................

87

Генерирование конкретного синтаксического дерева........................................

88

Парсер/токенизатор CPython....................................................................................

91

Абстрактные синтаксические деревья....................................................................

96

Важные термины..........................................................................................................

104

Пример: добавление оператора «почти равно»..................................................

104

Выводы.............................................................................................................................

109

Книги для программистов: https://t.me/booksforits

Оглавление

7

Компилятор.........................................................................................

110

Исходные файлы..........................................................................................................

111

Важные термины..........................................................................................................

111

Создание экземпляра компилятора.......................................................................

112

Флаги будущей функциональности и флаги компилятора..........................

114

Таблицы символических имен.................................................................................

116

Основная компиляция................................................................................................

121

Ассемблер........................................................................................................................

128

Создание объекта кода................................................................................................

131

Использование Instaviz для вывода объекта кода............................................

133

Пример: реализация оператора «почти равно»..................................................

134

Выводы.............................................................................................................................

139

Цикл вычисления................................................................................

140

Исходные файлы..........................................................................................................

141

Важные термины..........................................................................................................

141

Построение состояния потока.................................................................................

142

Построение объектов кадров....................................................................................

143

Выполнение кадра........................................................................................................

150

Стек значений................................................................................................................

153

Пример: добавление элемента в список................................................................

157

Выводы.............................................................................................................................

161

Управление памятью..........................................................................

163

Выделение памяти в C................................................................................................

163

Проектирование системы управления памятью Python................................

167

Аллокаторы памяти CPython...................................................................................

169

Область выделения объектной памяти и PyMem.............................................

178

Книги для программистов: https://t.me/booksforits

8    Оглавление

 

Область выделения сырой памяти.........................................................................

181

Нестандартные области выделения памяти.......................................................

181

Санитайзеры выделенной памяти..........................................................................

183

Арена памяти PyArena................................................................................................

185

Подсчет ссылок.............................................................................................................

186

Сборка мусора...............................................................................................................

192

Выводы.............................................................................................................................

201

Параллелизм и конкурентность........................................................

203

Модели параллелизма и конкурентности............................................................

205

Структура процесса.....................................................................................................

205

Многопроцессорный параллелизм.........................................................................

208

Многопоточность.........................................................................................................

230

Асинхронное программирование............................................................................

242

Генераторы......................................................................................................................

243

Сопрограммы.................................................................................................................

249

Асинхронные генераторы..........................................................................................

254

Субинтерпретаторы.....................................................................................................

255

Выводы.............................................................................................................................

259

Объекты и типы..................................................................................

260

Примеры этой главы...................................................................................................

261

Встроенные типы..........................................................................................................

262

Типы объектов...............................................................................................................

263

Тип type............................................................................................................................

264

Типы bool и long............................................................................................................

268

Тип строки Юникода...................................................................................................

272

Словари............................................................................................................................

282

Выводы.............................................................................................................................

287

Книги для программистов: https://t.me/booksforits

Оглавление

9

Стандартная библиотека....................................................................

288

Модули Python..............................................................................................................

288

Модули Python и C......................................................................................................

290

Набор тестов.......................................................................................

293

Запуск набора тестов в Windows............................................................................

293

Запуск набора тестов в Linux или macOS............................................................

294

Флаги тестирования....................................................................................................

295

Запуск конкретных тестов........................................................................................

295

Модули тестирования.................................................................................................

296

Вспомогательные средства тестирования............................................................

297

Выводы.............................................................................................................................

298

Отладка................................................................................................

299

Обработчик сбоев.........................................................................................................

299

Компиляция поддержки отладки...........................................................................

300

LLDB для macOS..........................................................................................................

301

GDB...................................................................................................................................

305

Отладчик Visual Studio..............................................................................................

307

Отладчик CLion............................................................................................................

309

Выводы.............................................................................................................................

314

Бенчмаркинг, профилирование и трассировка...............................

315

Использование timeit для микробенчмарка.......................................................

316

Использование набора тестов производительности Python.........................

318

Профилирование кода Python с использованием cProfile.............................

322

Профилирование кода C в DTrace.........................................................................

325

Выводы.............................................................................................................................

330

Книги для программистов: https://t.me/booksforits

10    Оглавление

 

Что дальше?........................................................................................

331

Создание расширений C для CPython..................................................................

331

Улучшение приложений Python.............................................................................

332

Участие в проекте CPython.......................................................................................

333

Дальнейшее обучение.................................................................................................

336

Приложение. Введение в C для Python-программистов.................

338

Препроцессор C............................................................................................................

338

Базовый синтаксис C..................................................................................................

341

Выводы.............................................................................................................................

348

Благодарности.....................................................................................

349

ОТ ИЗДАТЕЛЬСТВА

Ваши замечания, предложения, вопросы отправляйте на comp@piter.com (издательство­ «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Книги для программистов: https://t.me/booksforits

Что говорят читатели о книге

«Внутри CPython»

Мне бы очень хотелось, чтобы такая книга была у меня много лет назад, когда я только изучала Python. После чтения этой книги ваша квалификация повысится, и вы сможете решать еще более сложные задачи, которые улучшат наш мир.

Кэрол Уиллинг, ключевой разработчик CPython и участница управляющего совета CPython

Глава «Параллелизм и конкурентность» — одна из моих любимых. Я уже давно старался глубже разобраться в теме, и ваша книга оказалась чрезвычайно полезной.

Конечно, после чтения этой главы я не смог устоять перед искушением прочитать остальное. С нетерпением жду свой печатный экземпляр, когда он выйдет! Ранее я прочитал вашу статью «Guide to the CPython Source Code», которая разожгла во мне желание больше узнать о внутреннем устройстве CPython.

О Python написаны десятки обучающих книг, но я еще не встречал ни одной, которая объясняла бы самым любознательным тонкости внутреннего устройства.

В настоящее время я сам обучаю языку Python свою дочь, и эта книга входит в ее список обязательного чтения. Сейчас она изучает информационные системы в Университете штата Джорджия.

Милан Пател, вице-президент (крупного инвестиционного банка)

В книге Энтони меня больше всего впечатляет то, как все шаги по внесению изменений в кодовую базу CPython объединяются в доступную и понятную процедуру. Книга воспринимается как своего рода «недостающее руководство». Разобраться в языке C, основе Python, было очень интересно, и я нашел для себя ответы на некоторые давнишние вопросы. Особенно много полезного — в главе, посвященной управлению памятью в CPython. «Внутри

Книги для программистов: https://t.me/booksforits

CPython» — превосходный (и уникальный) ресурс для всех, кто желает вывести свои знания Python на более высокий уровень.

Дэн Бейдер, автор книги «Python Tricks»1 и редактор сайта Real Python

Книга помогла мне лучше понять, как работает лексический анализ и парсинг в Python. Я рекомендую ее, если вы действительно хотите разобраться в теме.

Флориан Далиц, питонист

Исчерпывающее описание внутренних механизмов Python. Как ни странно, по этой теме почти нет хороших источников информации. Материал излагается доступно как для начинающих, так и для опытных пользователей Python.

Абхишек Шарма, специалист по Data Science

1 Бейдер Д. Чистый Python. Тонкости программирования для профи. — СПб.: Питер.

Книги для программистов: https://t.me/booksforits

ОБ АВТОРЕ

Энтони Шоу — заядлый питонист, участник Python Software Foundation.

Энтони занимался программированием с 12 лет. Любовь к Python он обрел спустя 15 лет, когда ему пришлось какое-то время просидеть в отеле в Сиэттле (штат Вашингтон). С тех пор Энтони исследует Python, пишет о нем и создает учебные курсы, забыв обо всех остальных языках, которые он прежде изучал.

Энтони также участвует в малых и больших проектах с открытым исходным кодом, включая CPython, и является участником Apache Software Foundation.

Страсть Энтони — разбираться в сложных системах, упрощать их и обучать других людей.

О ГРУППЕ РЕДАКТОРОВ

Джим Андерсон давно программирует на разных языках. Он работал над встроенными системами, разрабатывал распределенные системы сборки, занимался управлением сторонними исполнителями и участвовал во многих, многих собраниях.

Джоанна Яблонски — редактор сайта Real Python. Естественные языки интересуют ее не меньше, чем языки программирования. Ее любовь к головоломкам, поиску закономерностей и всевозможным мелочам привела к тому, что она выбрала карьеру переводчика. Прошло совсем немного времени, и она влюбилась в новый язык — Python! Джоанна присоединилась к команде Real Python в 2018 году и с тех пор помогает питонистам повышать их профессиональный уровень.

Джейкоб Шмитт уже много лет занимается редактированием академических

итехнологических образовательных материалов — как в печатном виде, так

ив интернете. После присоединения к команде Real Python в 2020 году он редактирует учебники, статьи и книги, написанные разносторонней командой талантливых писателей и разработчиков.

Книги для программистов: https://t.me/booksforits