- •Об авторе
- •О группе редакторов
- •Предисловие
- •Введение
- •Как использовать эту книгу
- •Загрузка исходного кода 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
- •Выводы
- •Благодарности
Загрузка исходного кода CPython
Когда вы вводите команду python в консоли или устанавливаете дистрибутив Python с сайта Python.org, запускается CPython. CPython — одна из многих реализаций Python, разработкой и сопровождением которой занимаются разные команды разработчиков. Возможно, вам также доводилось слышать о таких альтернативах, как PyPy, Cython и Jython.
У CPython есть одна уникальная особенность: эта реализация содержит как среду выполнения, так и общую спецификацию языка, которая используется всеми остальными реализациями Python. CPython является официальной (или эталонной) реализацией Python.
Спецификация языка Python1 представляет собой документ с описанием языка Python. Например, в ней сказано, что assert — ключевое слово, а [] используется для индексирования, срезов и создания пустых списков.
Подумайте, какую функциональность вы ожидаете от дистрибутива Python:
zz Отображение интерактивного приглашения (REPL) при вводе команды python без указания файла или модуля.
zz Импортирование встроенных модулей (таких, как json, csv и collections) из стандартной библиотеки.
zz Установка пакетов из интернета командой pip.
1У Python нет спецификации в точном смысле слова, как для других языков программирования, но есть справочное руководство, которое описывает синтаксис и основную семантику языка: https://docs.python.org/3/reference/. — Примеч. ред.
Книги для программистов: https://t.me/booksforits
22 Загрузка исходного кода CPython
zz Тестирование приложений с использованием встроенной библиотеки unittest.
Все эти компоненты входят в дистрибутив CPython, который содержит намного больше, чем просто компилятор.
В этой книге будут рассмотрены разные элементы дистрибутива CPython: zz Спецификация языка.
zz Компилятор.
zz Модули стандартной библиотеки. zz Основные типы.
zz Средства тестирования.
ЧТО В ИСХОДНОМ КОДЕ?
Дистрибутив с исходным кодом CPython включает обширный набор инструментов, библиотек и компонентов, которые будут рассмотрены в этой книге.
ПРИМЕЧАНИЕ
В этой книге описана версия 3.91 исходного кода CPython.
Чтобы загрузить копию последней версии исходного кода CPython, можно воспользоваться git:
$ git clone --branch 3.9 https://github.com/python/cpython $ cd cpython
Примеры этой книги основаны на Python версии 3.9.
ВАЖНО
Переход на ветку 3.9 — очень важный шаг. Master-ветка обновляется ежечасно. Многие примеры и упражнения, приведенные в книге, вряд ли будут работать на master-ветке.
1 https://github.com/python/cpython/tree/3.9.
Книги для программистов: https://t.me/booksforits
Что в исходном коде? 23
ПРИМЕЧАНИЕ
Если на вашем компьютере нет Git, установите его с сайта git-scm.com. Также можно загрузить ZIP-файл2 исходного кода CPython прямо с веб-
сайта GitHub.
Если исходный код будет загружен в виде ZIP-файла, то в нем не будет данных истории, тегов или веток.
В только что загруженном каталоге cpython находятся следующие подкаталоги:
cpython/ |
|
|
|
Doc |
|
|
||
|
||
|
Grammar |
|
|
||
|
Include |
C |
|
||
|
Lib |
, Python |
|
||
|
Mac |
- macOS |
|
||
|
Misc |
† |
|
||
|
Modules |
, C |
|
||
|
Objects |
‡ ˆ ‰ |
|
||
|
Parser |
Š ‹ Python |
|
||
|
PC |
- ‹ Windows |
|
||
|
PCBuild |
- Windows |
|
||
|
Programs |
Š ‹ python ‹ ‹ |
|
||
|
Python |
Š ‹ CPython |
|
||
|
Tools |
• CPython |
|
||
|
m4 |
– ˆ make- (make›le) |
|
На следующем шаге мы займемся настройкой среды разработки.
1 https://github.com/python/cpython/archive/3.9.zip.
Книги для программистов: https://t.me/booksforits