- •Об авторе
- •О группе редакторов
- •Предисловие
- •Введение
- •Как использовать эту книгу
- •Загрузка исходного кода CPython
- •Что в исходном коде?
- •Настройка среды разработки
- •IDE или редактор?
- •Настройка Visual Studio
- •Настройка Visual Studio Code
- •Настройка Vim
- •Выводы
- •Компиляция CPython
- •Компиляция CPython на macOS
- •Компиляция CPython на Linux
- •Установка специализированной версии
- •Знакомство с Make
- •Make-цели CPython
- •Компиляция CPython на Windows
- •Профильная оптимизация
- •Выводы
- •Грамматика и язык Python
- •Спецификация языка Python
- •Генератор парсеров
- •Повторное генерирование грамматики
- •Выводы
- •Конфигурация и ввод
- •Конфигурация состояния
- •Структура данных конфигурации среды выполнения
- •Конфигурация сборки
- •Сборка модуля из входных данных
- •Выводы
- •Генерирование конкретного синтаксического дерева
- •Парсер/токенизатор CPython
- •Абстрактные синтаксические деревья
- •Важные термины
- •Пример: добавление оператора «почти равно»
- •Выводы
- •Компилятор
- •Исходные файлы
- •Важные термины
- •Создание экземпляра компилятора
- •Флаги будущей функциональности и флаги компилятора
- •Таблицы символических имен
- •Основная компиляция
- •Ассемблер
- •Создание объекта кода
- •Использование Instaviz для вывода объекта кода
- •Пример: реализация оператора «почти равно»
- •Выводы
- •Цикл вычисления
- •Исходные файлы
- •Важные термины
- •Построение состояния потока
- •Построение объектов кадров
- •Выполнение кадра
- •Стек значений
- •Пример: добавление элемента в список
- •Выводы
- •Управление памятью
- •Выделение памяти в C
- •Проектирование системы управления памятью Python
- •Аллокаторы памяти CPython
- •Область выделения объектной памяти и PyMem
- •Область выделения сырой памяти
- •Нестандартные области выделения памяти
- •Санитайзеры выделенной памяти
- •Арена памяти PyArena
- •Подсчет ссылок
- •Сборка мусора
- •Выводы
- •Параллелизм и конкурентность
- •Модели параллелизма и конкурентности
- •Структура процесса
- •Многопроцессорный параллелизм
- •Многопоточность
- •Асинхронное программирование
- •Генераторы
- •Сопрограммы
- •Асинхронные генераторы
- •Субинтерпретаторы
- •Выводы
- •Объекты и типы
- •Примеры этой главы
- •Встроенные типы
- •Типы объектов
- •Тип type
- •Типы bool и long
- •Тип строки Юникода
- •Словари
- •Выводы
- •Стандартная библиотека
- •Модули Python
- •Модули Python и C
- •Набор тестов
- •Запуск набора тестов в Windows
- •Запуск набора тестов в Linux или macOS
- •Флаги тестирования
- •Запуск конкретных тестов
- •Модули тестирования
- •Вспомогательные средства тестирования
- •Выводы
- •Отладка
- •Обработчик сбоев
- •Компиляция поддержки отладки
- •LLDB для macOS
- •Отладчик Visual Studio
- •Отладчик CLion
- •Выводы
- •Бенчмаркинг, профилирование и трассировка
- •Использование timeit для микробенчмарка
- •Использование набора тестов производительности Python
- •Профилирование кода Python с использованием cProfile
- •Выводы
- •Что дальше?
- •Создание расширений C для CPython
- •Улучшение приложений Python
- •Участие в проекте CPython
- •Дальнейшее обучение
- •Препроцессор C
- •Базовый синтаксис C
- •Выводы
- •Благодарности
Предисловие
Язык программирования, созданный сообществом, способствует счастью своих пользователей по всему миру.
Гвидо ван Россум, «Речь в День короля»1
Мне нравится создавать инструменты, которые помогают нам учиться, наделяют нас возможностью творить и стимулируют обмениваться знаниями и идеями с другими людьми. Я испытываю трепет, благодарность и гордость, когда слышу, что эти инструменты и Python помогают в решении проблем реального мира — например, изменения климата или борьбы с болезнью Альцгеймера.
Я полюбила программирование 40 лет назад. Все эти годы я училась, писала много кода и делилась своими идеями с другими. Я видела кардинальные изменения в технологии, когда мир переходил от мейнфреймов к мобильным технологиям и повсеместному распространению чудес Всемирной паутины и облачных вычислений. У всех этих технологий, включая Python, есть нечто общее.
В какой-то момент все эти успешные нововведения были всего лишь идеей. Творцам — таким, как Гвидо, — приходилось идти на риск и действовать наудачу, чтобы двигаться вперед. Преданность делу, изучение методом проб и ошибок и совместное преодоление многих неудач заложили прочную основу для успеха и дальнейшего роста.
«Внутри CPython» поведет вас по пути исследования невероятно успешного языка программирования Python. Эта книга поможет разобраться, как
1 http://neopythonic.blogspot.com/2016/04/.
Книги для программистов: https://t.me/booksforits
О группе редакторов 15
работают внутренние механизмы CPython. Она даст представление о том, как ключевые разработчики создавали язык.
К сильным сторонам Python относится удобочитаемость кода и дружелюбное сообщество, посвятившее себя распространению знаний. Энтони учитывает эти сильные стороны при объяснении CPython, подталкивая вас к чтению исходного кода и объясняя структурные элементы языка.
Почему я хочу поделиться с вами книгой «Внутри CPython»? Мне бы очень хотелось, чтобы такая книга была у меня много лет назад, когда я только изучала Python. Но что еще важнее, я верю, что у нас, участников сообщества Python, есть уникальная возможность применить наш опыт в деле и помочь в решении сложных задач реального мира.
Я уверена, что после чтения этой книги ваша квалификация вырастет и вы сможете решать еще более сложные задачи и улучшать наш мир.
Надеюсь, что вам захочется больше узнать о Python, создать нечто новое, и вы обретете уверенность, чтобы поделиться своими творениями с миром.
«Сейчас лучше, чем никогда».
Тим Питерс, «Дзен Python»
Последуйте мудрому совету Тима и беритесь за дело.
С наилучшими пожеланиями,
Кэрол Уиллинг,
ключевой разработчик CPython и участница управляющего совета CPython
Книги для программистов: https://t.me/booksforits