Об авторе....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
Установка специализированной версии....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
Компилятор....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
Область выделения сырой памяти....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
Стандартная библиотека....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
Что дальше?....331
Создание расширений C для CPython....331
Улучшение приложений Python....332
Участие в проекте CPython....333
Дальнейшее обучение....336
Приложение. Введение в C для Python-программистов....338
Препроцессор C....338
Базовый синтаксис C....341
Выводы....348
Благодарности....349
CPython, самая популярная реализация Python, абстрагируется от сложностей ОС и предоставляет платформу для создания масштабируемых и высокопроизводительных приложений. Каждому python-разработчику на какой-то стадии необходимо будет узнать, как работает CPython. Это позволит в полной мере использовать его мощь и оптимизировать приложения. Вы разберетесь с основными концепциями внутреннего устройства CPython и научитесь: читать исходный код интерпретатора CPython и свободно ориентироваться в нем; вносить изменения в синтаксис Python и компилировать их в вашу собственную версию CPython; понимать внутреннюю реализацию таких структур, как списки, словари и генераторы; управлять памятью CPython; масштабировать код Python за счет параллелизма и конкурентного выполнения; дополнять базовые типы новой функциональностью; выполнять наборы тестов; профилировать и проводить бенчмарк Python-кода и исполнительной среды; отлаживать код C и Python на профессиональном уровне; изменять или обновлять компоненты библиотеки CPython, чтобы они могли использоваться в будущих версиях.