Как я решил сделать серию видео про устройство интерпретатора CPython
Привет, Хабр!
Давайте знакомиться: меня зовут Никита Соболев, я core-разработчик CPython, mypy и typeshed. Некоторое время назад я понял, что на русском языке довольно мало контента про устройство CPython внутри. В основном доклады с конференций и статьи. Где-то про память, где-то про GIL, где-то про парсер. Но чтоб системно и по всем основным частям в одном месте — такого я не нашел.
И решил сделать своё! Под катом я расскажу, как я делаю «Лучший курс по Питону»* на Ютюбе. Почему он бесплатный. И почему он такой, какой есть. А еще я расскажу, какая польза будет разработчикам от его просмотра.
* «Лучший курс по Питону» по версии CPython core-разработчиков в России : trollface:
Формат
Нельзя не сказать, что последнее время в интернете стало очень много образовательного контента. Обычно — не очень высокого качества. Даже на Ютюбе каждый день вылезают видео типа «Python за 5 часов», «Как поднять зарплату?» или очередные выборы очередного фреймворка для вебчика. Наверно, кому-то такое может быть полезно. Однако, более глубокий технический контент вымывается из публичной плоскости. Что для меня, как для большого любителя узнать побольше про детали устройства той или иной технологии — довольно печально.
Плюс, довольно много контента делает упор чисто на практику: «как решить задачу Ч или Ц?». Что уже, конечно, намного полезнее, но все еще не дает возможности утолить свою жажду знаний.
Ну и самое важное: почти все существующие курсы деляют для полных новичков. Если ты хочешь с уровня джуна качаться дальше — то ты сам по себе. Ищи, читай, смотри. Может быть в компании помогут. Если повезет.
С таким мыслительным фоном, я приступил к созданию своего концепта.
Что получилось?
Во-первых, я решил оставить за скобками вопрос «практической применимости». Можно ли где-то на практике применить оптимизацию инструкций байткода в CPython — каждый решает для себя сам. Вопрос, конечно, спорный. Много людей в комментариях пишут: «зачем мне знать, как устроен float
»? Ответ очень простой: знание внутренностей позволяет делать более надежные, простые и корректные решения.
Далее: каждое видео строится вокруг одной узкой темы и рассматривает её со всех сторон. Например: в видео про float
есть и про токенайзер, и про C структуру PyFloatObject
, и про вопросы точности и применимости данного объекта.
Ну и самое необычное: я решил сделать каждое видео разделенным на три части по уровню сложности. Для джунов, мидлов и сеньоров. Например: в видео про +
(да, про плюс) на уровне для джунов мы повторяем историю с __add__
, __radd__
и NotImplemented
. На уровне для мидлов уже говорим про более сложные вещи: атомарность __iadd__
, как работает приоритет операций через определение PEG-граммитики и про ast
для сложения. Ну, а на уровне для товарищей помидоров говорим про: оптимизацию байткода сложения, тайпслоты для сложения чисел и коллекций.
Такой подход дает возможность говорить об одной штуке с разных строн, что мне очень нравится и позволяет показывать множество частей CPython.
Ну и нельзя не упомянуть формат с интервью. Не все темы я могу подробно и полно изложить самостоятельно. Например: я плохо знаю историю стандрарта IEEE-754 (учитывая, количество версий и обновлений данного стандарта). Но, рассказать про него было необходимо. Я понял, что мне нужна помощь. И я пригласил члена рабочей группы по стандартизации чисел с плавающей точкой из IEEE для интервью об истории и будущем данного стандарта.
У меня уже побывали:
Mark Dickinson (https://github.com/mdickinson) — core-разработчик CPython с практическим интересом в числах
Michael Overton (https://cs.nyu.edu/~overton/) — автор книги про IEEE-754 и член рабочей группы IEEE по стандратизации чисел с плавающей точкой
Alex Waygood (https://github.com/AlexWaygood) — core-разработчик CPython, typeshed и ruff
И конечно же, все материалы (плюс дополнительные ссылки и практические задачки) лежат в репозитории на гитхабе: https://github.com/sobolevn/the-best-python-course
Самый важный для многих вопрос. Почему бесплатный? Кажется, что такой формат единственный возможный: чтобы привлечь известных людей участвовать в нем. И чтобы привлечь аудиторию к самим видео. Ну и я наивно верю, что знания должны быть доступны всем :)
Дальнейшие планы
Планов — очень много! Столько всего, про что нужно рассказать! Про устройство строк и планы по переходу на utf-8 внутри PyUnicodeObject
в новых версиях питона. Про функции, PyCodeObject
, tp_fastcall, PyFrameObject
, замыкания. Про symtable
и разные типы «переменных». Про классы и ООП (потребуется видео 3 или 4). Про разные аллокаторы и особенности их работы в режиме nogil
. А уж про typing
сколько всего можно рассказать, ух!
Суммарно я планирую сделать где-то 50 видео. А может и больше.
Для освещения сложных тем я буду и дальше приглашать интересных гостей, кто приложил руку к созданию технологии из темы видео. Так намного проще, чем все делать самому. И людям, возможно, интереснее.
Заключение
Если в вашей компании есть Python разработчики, и если вы хотите углубить их знания — то смело закидывайте в них ссылку на весь плейлист: https://www.youtube.com/playlist? list=PLbr8rVGhPD0WQgO97Ao67Q-QVuSbm_Zpz
Надеюсь, что людям будет полезно и интересно!