Об авторе 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, чтобы они могли использоваться в будущих версиях.
5 причин купить эту книгу:
Первое исчерпывающее описание внутренних механизмов Python.
Вы сумеете читать исходный код интерпретатора CPython и свободно ориентироваться в нем.
Вооружившись углубленным пониманием CPython, усовершенствуете ваши Python-приложения.
Создадите собственные расширения Python на языке С.
И научитесь управлять памятью в CPython.