- •Об авторе
- •О группе редакторов
- •Предисловие
- •Введение
- •Как использовать эту книгу
- •Загрузка исходного кода 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
- •Выводы
- •Благодарности
36 Настройка среды разработки
НАСТРОЙКА VIM
Vim — мощный консольный текстовый редактор. Чтобы процесс разработки с Vim был особенно эффективным, разместите пальцы на базовых клавишах (home keys1) клавиатуры. Все необходимые сокращения и команды будут у вас прямо под рукой.
ПРИМЕЧАНИЕ
В большинстве дистрибутивов Linux и в терминале macOS для vim опре делен синоним vi. В книге будет использоваться команда vim, но коман даvi тоже будет работать,если ввашей системе этот синоним существует.
В исходном состоянии Vim обладает базовой функциональностью и практически не превосходит такой текстовый редактор, как «Блокнот» (Notepad). Однако с некоторыми конфигурациями и расширениями Vim превращается в мощный инструмент для редактирования кода Python и C.
Расширения Vim хранятся в разных местах, включая GitHub. Для упрощения настройки и установки плагинов с GitHub можно воспользоваться менеджером плагинов, например Vundle.
Чтобы установить Vundle, выполните в терминале следующую команду:
$ git clone https://github.com/VundleVim/Vundle.vim.git \ ~/.vim/bundle/Vundle.vim
1 Клавиши «A», «S», «D», «F» — левая рука и «J», «K», «L» — правая. — Примеч. ред.
Книги для программистов: https://t.me/booksforits
Настройка Vim 37
После установки менеджера Vundle необходимо настроить Vim для загрузки ядра Vundle.
Мы установим два плагина:
1.Fugitive: строка состояния для Git с множеством сокращений для выполнения операций Git.
2.Tagbar: панель, упрощающая переход к функциям, методам и классам.
Чтобы установить эти плагины, сначала измените содержимое файла конфигурации Vim (обычно HOME .vimrc) и включите в него следующие строки:
cpython-book-samples 11 .vimrc
syntax on |
|
set nocompatible |
" отключить совместимость с Vi, обязательно |
filetype off |
" обязательно |
"установка пути среды выполнения для включения Vundle и инициализация set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
"Разрешить Vundle управление Vundle, обязательно
Plugin 'VundleVim/Vundle.vim'
"Ниже приводятся примеры различных поддерживаемых форматов.
"Команды Plugin должны располагаться между vundle#begin/end.
"Плагин в репозитории GitHub
Plugin 'tpope/vim-fugitive'
Plugin 'majutsushi/tagbar'
" Все команды Plugin должны быть добавлены до этой строки
call vundle#end() |
" |
обязательно |
filetype plugin indent on |
" |
обязательно |
"Автоматически открывать панель tagbar в файлах C, не обязательно autocmd FileType c call tagbar#autoopen(0)
"Автоматически открывать панель tagbar в файлах Python, не обязательно autocmd FileType python call tagbar#autoopen(0)
"Вывести строку состояния, не обязательно
set laststatus=2
" Установить статус как git status (branch), не обязательно set statusline=%{FugitiveStatusline()}
Чтобы загрузить и установить эти плагины, выполните следующие команды:
$ vim +PluginInstall +qall
На экране должны появиться сообщения о загрузке и установке плагинов, заданных в файле конфигурации.
Книги для программистов: https://t.me/booksforits
38 Настройка среды разработки
В ходе редактирования и анализа исходного кода CPython обычно возникает необходимость в быстром переключении между методами, функциями и макросами. Простой поиск по тексту не отличит вызов или определение функции от ее реализации. Однако вы можете воспользоваться приложением ctags1 и проиндексировать исходные файлы на разных языках в базу данных с обычным текстом. Чтобы проиндексировать заголовки CPython для всех файлов C и Python в стандартной библиотеке, выполните следующий код:
$./configure $ make tags
Теперь откройте файл Python ceval.c в Vim:
$ vim Python/ceval.c
Статус Git должен отображаться в нижней строке, а справа в окне появляется список функций, макросов и переменных:
1 http://ctags.sourceforge.net/.
Книги для программистов: https://t.me/booksforits
Настройка Vim 39
Откройте файл Python — например, Lib subprocess.py:
$ vim Lib/subprocess.py
На панели tagbar будет выведена информация об импортированных именах, классах, методах и функциях:
В Vim можно переключаться между окнами клавишами Ctrl+W, перемещаться на правую панель клавишей L и использовать клавиши со стрелками для перемещения вверх и вниз между функциями.
Нажмите Enter, чтобы перейти к реализации любой функции. Чтобы вернуться к панели редактора, нажмите Ctrl+W, а затем H.
СМ. ТАКЖЕ
На сайте VIM Adventures1 представлен занятный способ изучения и за поминания команд Vim.
1 https://vim-adventures.com/.
Книги для программистов: https://t.me/booksforits