Python — это язык «батареек», но так ли это? Недавний жаркий разговор на саммите по языку Python обвинил Python в утечке батарей, и внезапно разработчики ядра рассматривают возможность удаления вещей из стандартной библиотеки. Из-за чего весь этот шум?
Вопрос о том, где заканчивается язык программирования и начинается упакованный код, является сложным. Некоторые языки имеют стандартные библиотеки, которые не являются частью синтаксиса языка, но их лучше рассматривать как часть языка — вы можете быть уверены, что они доступны на любой платформе и версии. Сегодня стандартная библиотека Python-это то, на что полагаются многие программисты и компании.
Помимо стандартной библиотеки, существует также индекс пакетов Python (PyPI), он же Сырный магазин, который является почти стандартным хранилищем программного обеспечения для Python. Когда вы используете pip для установки пакета, именно оттуда загружается пакет.
PyPI великолепен, но он также иллюстрирует проблему с ответственным подходом к предоставлению «батарей». Если вам нужна конкретная функция — скажем, HTML — сервер, — то ввод «веб-сервер» приведет к 10 000 обращений. Если вы ограничите поиск «зрелыми» проектами, вы все равно получите 122. Какой из них вы используете? Вот как проекты тратят время впустую. Кроме того, у вас нет возможности узнать, что код является высококачественным, будет поддерживаться в будущем и не содержит вредоносных программ.
Это не означает, что стандартная библиотека не имеет проблем. В стандартной библиотеке есть HTML-сервер, но он ограничен HTTP и очень прост. Неясно, сколько любви и внимания он получает, и поэтому он может быть стандартным, но этого может быть недостаточно.
Выступление на саммите по языку Python в этом году, сделанное автором Twisted Эмбер Браун, подняло жару по этой проблеме и так разозлило Гвидо, что он ушел во время вопросов и ответов. Конференция была освещена А. Джесси Джирью Дэвисом на веб-сайте Python Software Foundation, и именно его аккаунт мы рекомендуем и полагаемся на него. По сути, Браун утверждает, что стандартная библиотека нарушена, потому что она не только содержит вещи, которые больше не должны быть в ней — например, NTP, но часто нуждается в поддержке пакетов PyPI, что делает ее существование почти бессмысленным.
“У «Питона» протекают батарейки,” сказал Браун. Она считает, что некоторые ошибки в стандартной библиотеке никогда не будут исправлены. И даже когда ошибки исправлены, библиотеки PyPI, такие как Twisted, не могут предполагать, что они работают на последнем Python, поэтому они должны навсегда сохранить свои обходные пути ошибок.
Список проблем продолжался, побуждая Гвидо прервать его::
— Ты можешь придерживаться одной темы? Мне очень жаль, но это всего лишь одна длинная напыщенная тирада. К чему вы клоните?”
Чуть позже, похоже, она все — таки дошла до одного-что стандартная библиотека душит инновации. Например, новая функция asyncio означает, что пакеты, которые обеспечивали асинхронный ввод-вывод, теперь будут игнорироваться, поскольку это «стандартный» способ выполнения работы. Конечно, пакет, для которого Браун так много сделал, является асинхронным пакетом ввода-вывода.
Это заставляет Гвидо снова спросить:
“Эмбер, к чему ты клонишь?” Браун сказала, что ее цель состояла в том, чтобы переместить asyncio в PyPI вместе с большинством новых функций. “Мы должны обнять Пайпи”, — увещевала она.
Вместо этого Ван Россум утверждал, что если команда Twisted хочет, чтобы экосистема развивалась, они должны прекратить поддерживать более старые версии Python и заставить пользователей обновляться. Браун признал этот момент, но сказал, что половина пользователей Twisted все еще работают на Python 2, и от них трудно отказаться. Дебаты в этот момент стали личными для Ван Россума, и он сердито ушел.
В стране Питонов не все полностью счастливы.
Выступление Брауна состоялось 18 мая. 20 мая список рассылки Python-Dev загорелся с началом текущей темы о PEP 594: Удаление разряженных батарей из стандартной библиотеки. Процитировать:
вот первая версия моего PEP 594, которая устарела и в конечном итоге удалила модули из стандартной библиотеки. PEP начался в прошлом году с обсуждения во время саммита по языку Python 2018
Это правда, что эта тема возникла в прошлом году, но это какое-то совпадение, что она возобновляется сейчас. Вы можете увидеть список модулей, которые будут удалены, в архиве списка рассылки. Излишне говорить, что и sockserver, и http.server находятся в списке.
Лично я, как и Гвидо, хотел бы, чтобы они остались. Они могут быть небезопасными, но они очень полезны для того, чтобы попробовать что-то. Различные комментарии о том, что он не используется для производственных серверов, вполне корректны, но он используется в приложениях Интернета Вещей, где требуется простой сетевой интерфейс.
Аргументы за и против конкретных модулей (мертвые, наполовину заряженные, наполовину полные?) это дает вам некоторое представление о том, насколько сложна эта проблема. Это также подчеркивает тот факт, что ни один объективный метод, по-видимому, не применим к этому процессу. Пустая трата пространства одним программистом — это «обязательная функция»другого. Изменения в стандартной библиотеке не будут обратно совместимы и, возможно, будут большим потрясением, чем переход с Python 2 на 3.
Python завоевал многих пользователей благодаря тому, что с ним легко начать работу. Диапазон функций, доступных «прямо из олова», если использовать метафору без батареи, является одной из причин того, что он так прост в использовании. Дело не в том, что стандартная библиотека не нуждается в некотором внимании, а в том, что удаление вещей из ядра-опасный шаг.
Удивительно, что такой успешный язык, как Python, не может найти добровольцев для обновления и улучшения многих стандартных библиотечных модулей.
Майк Джеймс-автор книги Programmer’s Python: Everything-это объект, опубликованный издательством I/O Press как часть библиотеки I Programmer. С подзаголовком «Что-то совершенно другое» книга предназначена для тех, кто хочет понять более глубокую логику в подходе, который Python 3 применяет к классам и объектам.