
- •Об авторе
- •О группе редакторов
- •Предисловие
- •Введение
- •Как использовать эту книгу
- •Загрузка исходного кода 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
- •Выводы
- •Благодарности

28 Настройка среды разработки
НАСТРОЙКА VISUAL STUDIO CODE
Microsoft Visual Studio Code — расширяемый редактор кода с онлайн-мага- зином плагинов.
Он прекрасно подходит для работы с CPython, поскольку поддерживает как C, так и Python, а также имеет встроенный интерфейс Git.
Установка
Редактор Visual Studio Code, часто называемый VS Code, загружается с сайта code.visualstudio.com в виде простой программы установки.
В исходной конфигурации VS Code содержит все необходимое для редактирования кода, однако с установкой расширений (extensions) возможностей становится больше.
Панель Extensions находится в верхнем меню: View Extensions:
На панели Extensions возможен поиск расширений как по имени, так и по уникальному идентификатору (например, ms-vscode.cpptools). В отдельных
Книги для программистов: https://t.me/booksforits

Настройка Visual Studio Code 29
случаях может быть несколько плагинов с одинаковым именем; чтобы быть уверенным в том, что вы устанавливаете именно тот, который вам нужен, используйте уникальный идентификатор.
Рекомендуемые расширения для этой книги
Некоторые полезные расширения для работы с CPython:
zz C/C++ (ms-vscode.cpptools) обеспечивает поддержку C/C++, включая IntelliSense, отладку и подсветку синтаксиса.
zz Python (ms-python.python) дает богатые возможности для редактирования, отладки и чтения кода Python.
zz reStructuredText (lextudio.restructuredtext) предоставляет разностороннюю поддержку reStructuredText — формата, использованного в документации CPython.
zz Task Explorer (spmeesseman.vscode-taskexplorer) добавляет на вкладку Explorer панель Task Explorer, упрощающую выполнение некоторых операций.
После установки этих расширений необходимо перезагрузить редактор.
Многие задачи, описанные в книге, требуют использования командной строки. Чтобы интегрировать терминал в VS Code, выберите команду Terminal New Terminal. Терминал открывается под редактором кода:
Расширенная навигация и развертывание кода
С установленными плагинами появляются новые возможности расширенной навигации в коде.
Книги для программистов: https://t.me/booksforits

30 Настройка среды разработки
Например, если щелкнуть правой кнопкой мыши на вызове функции в файле C и выбрать команду Go to References, то VS Code найдет другие ссылки на эту функцию в кодовой базе:
Команда Go to References очень удобна для нахождения правильной формы вызова функции.
Если щелкнуть или навести указатель мыши на макрос C, то редактор развернет макрос в скомпилированный код:
Чтобы перейти к определению функции, наведите указатель мыши на любой ее вызов, зажмите Cmd (macOS) или Ctrl (Linux и Windows) и кликните.
Книги для программистов: https://t.me/booksforits

Настройка Visual Studio Code 31
Конфигурирование файлов команд и запуска
VS Code использует папку .vscode в каталоге рабочего пространства. Если эта папка не существует, создайте ее. В ней можно сформировать следующие файлы:
zz tasks.json для определения сокращенных команд, запускающих ваш проект;
zz launch.json для настройки отладчика (см. главу «Отладка»); zz другие файлы, относящиеся к плагинам.
Создайте файл tasks.json в каталоге .vscode, если он еще не существует. Следующего описания команд в tasks.json будет достаточно для начала работы:
cpython-book-samples 11 tasks.json
{
"version": "2.0.0", "tasks": [
{
"label": "build", "type": "shell", "group": {
"kind": "build", "isDefault": true
}, "windows": {
"command": "PCBuild/build.bat", "args": ["-p", "x64", "-c", "Debug"]
}, "linux": {
"command": "make -j2 -s"
}, "osx": {
"command": "make -j2 -s"
}
}
]
}
При использовании плагина Task Explorer список настроенных команд будет отображаться в группе vscode:
Книги для программистов: https://t.me/booksforits

32 Настройка среды разработки
В следующей главе процесс сборки при компиляции CPython будет рассмотрен более подробно.
Настройка JetBrains CLion
У компании JetBrains есть IDE как для Python (PyCharm), так и для C/C++ (CLion).
В CPython используется код и на C, и на Python. Встроить поддержку C/ C++ в PyCharm не удастся, а CLion поддерживает Python.
ВАЖНО
Поддержкаmake-файлов(makefile)доступнатольковCLionверсий2020.2 и выше.
ВАЖНО
Для этого шага необходимо как сгенерировать makefile, запустив configure, так и cкомпилировать CPython.
Прочитайте главу «Компиляция CPython» для вашей операционной си стемы, а потом вернитесь к этой главе.
После первой компиляции CPython в корне каталога с исходным кодом появится makefile.
Книги для программистов: https://t.me/booksforits

Настройка Visual Studio Code 33
Откройте CLion и выберите на заставке вариант Open or Import. Перейдите в каталог c исходным кодом, выберите makefile и щелкните по кнопке
Open.
CLion спросит, хотите ли вы открыть каталог или импортировать makefile как новый проект. Выберите вариант Open as Project, чтобы импортировать файл как проект:
Перед импортированием CLion спросит, какую make-цель следует запустить. Оставьте вариант по умолчанию clean и продолжите выполнение:
Затем убедитесь в том, что вы можете собрать исполняемый файл CPython из CLion. Выберите в верхнем меню команду Build Build Project.
В строке состояния должен появиться индикатор прогресса сборки проекта.
Книги для программистов: https://t.me/booksforits

34 Настройка среды разработки
Когда задача выполнена, скомпилированный двоичный файл можно будет выбрать в конфигурации запуска/отладки.
Выберите команду Run Edit Conigurations, чтобы открыть окно конфигурации запуска/отладки (Run/Debug Configurations). В окне выберите команду + Makefile Application и выполните следующие действия:
1.Введите в поле Name имя cpython.
2.Оставьте в поле Target цель all.
3.В поле Executable откройте выпадающий список и выберите Select Other, затем найдите cкомпилированный двоичный файл CPython в каталоге с исходным кодом. Он будет называться python или python.exe.
4.В поле Program Arguments ведите аргументы программы, которые должны передаваться всегда (например, -X dev для включения режима разработки). Эти флаги будут рассмотрены позднее в разделе «Настройка конфигурации времени выполнения в командной строке».
5.В поле Working Directory введите макрос CLion $ProjectFileDir$:
Книги для программистов: https://t.me/booksforits

Настройка Visual Studio Code 35
Щелкните по кнопке OK, чтобы добавить данную конфигурацию. Этот шаг можно повторить сколько угодно раз для всех make-целей CPython. За полной информацией обращайтесь к разделу «Make-цели CPython» в главе «Компиляция CPython».
После этого конфигурация сборки cpython будет доступна справа наверху в окне CLion:
Чтобы протестировать ее, щелкните по кнопке со стрелкой или выберите команду Run Run ’cpython’ в верхнем меню. Снизу в окне CLion должна появиться панель REPL:
Отлично! Теперь вы сможете вносить изменения и быстро их применять командами Build и Run. Если в коде C установлены точки останова, вместо Run следует выбирать Debug.
В редакторе кода зажатие клавиши Cmd (macOS) или Ctrl (Windows и Linux) и щелчок мышью вызывает внутренние средства навигации:
Книги для программистов: https://t.me/booksforits