Python
29 March 2012

Ответ на Python vs Ruby

Пользователь eyeofhell недавно написал статью Python vs Ruby.
Знатный холивар получился. Не могу не поддержать. Сначала думал написать в комментарии — но ответ вышел слишком объемным.


О себе:
Я пишу на Питоне десять с лишним лет, с Руби знаком довольно поверхностно.
С недавних пор являюсь Python Core Developer с commit rights.

На последнем US PyCon в Санта-Кларе Гвидо ван Россум произнес замечательную речь — всем рекомендую посмотреть.

В частности, он указал, что Питон и Руби — почти что близнецы-братья. Различия между ними гораздо меньше, чем противопоставление этих языков всем остальным.
Давайте дружить, а не выяснять кто круче.

Теперь по конкретным претензиям к автору (по части Питона, конечно — пусть знающий рубист тоже скажет веское слово).

— Питон имеет встроенный модуль ssl. Из-за древних лицензионных дрязг с Микрософт (поправьте, если не так) в дистрибутив для Windows этот модуль не включается. На всех остальных ОС он есть.

— subprocess позволяет указывать параметры командной строки одной строчкой, при этом следует вызывать с параметром shell=True. Это не так лаконично, как просто скобки — но способ есть. К тому же следует понимать, что вызов подпроцесса далеко не всегда сводится к подстановке текстового вывода в переменную. Есть еще return code, stderr, интерактивность…

— Питон может импортировать модули по относительному пути. Это именно относительный путь для модулей, а не файлов. Модули должны лежать в пакетах (папках, в которых есть __init__.py). Читатели уже указали на этот момент.

— codecs.open позволяет указать кодировку для открываемого файла. open поддерживает параметр encoding для тех же целей.

— хорошо это или нет, но при использовании потоков операционной системы нет надежного способа уничтожить поток. Всегда есть риск того, что используемые ресурсы не освободятся (память, соединения с базой данных и прочие сокеты и т.д.) Поэтому Питон и не имеет такой возможности. Нужно послать потоку сообщение тем или иным способом, а уж там он сам обязан разобраться.

Прочее: как уже читатели отметили, некоторые части не включены в дистрибутив Питона, но доступны как сторонние библиотеки.

— pytz. Список timezone обновляется чаще, чем полуторагодичный период для выпуска нового Питона. В документации ссылки на pytz нет — поправим.

— шаблонизатор. Большее, чем string.Template в стандартную поставку не включили. Потому что не ясно, какой шаблонизатор устроил бы всех. jinja2, которым я пользуюсь — отличная штука. Опять же слишком быстро развивающаяся и слишком независимая, чтобы быть частью Питона как дистрибутива.

Полезных штук много. Но если библиотека включена в Стандартный Питон — она обязана сохранять обратную совместимость. Зачастую это слишком накладно и не позволяет развиваться быстро, выпуская релизы каждые три месяца а не раз в полтора года, как это делает Питон.

И, наконец, главное.
python2 уже мертв. Да, мы часто делаем bug-fixes. python2.7.3 будет скоро. Но Двойка закончилась два года назад.

Все больше и больше библиотек подтверждают свою поддержку Тройки.
— SQLAlchemy сделала это уже давно.
— Jinga2 — тоже.
— Pyramid — неделю назад.
— WebOb, от которого зависела Pyramid — в конце прошлого года.
— Django тоже перейдет на тройку — они обещали.

Ребята, Python3 — это ваше будущее, которое наступает на пятки. Будьте готовы!

UPD: Django 1.5, которая выйдет осенью, будет иметь экспериментальную поддержку Python 3.3

+93
34.7k 111
Comments 147
Similar posts
Top of the day