Привет, Хабр!
Я подумал о том чего мне не хватает в Python, и что мне не нравится.
Здесь и далее под Python я имею ввиду эталонную реализацию Python — Cpython.
Дисклеймер: это мое субъективное мнение, оно может не совпадать с Вашим.
Я с удовольствием программирую на Python, но у любой технологии (языка программирования в частности) есть свои недостатки, хотя возможно Вы не согласитесь со мной.
Статья не имеет цели развести холивар. Не забывайте об этом при написании комментариев).
1. Отсутствие const
Это наверное один из самых первых пунктов, который приходит в голову. Константы это реально удобно, они могут существенно уменьшить число ошибок в коде. Например, предположим у Вас есть число Пи и константа Pi. Возможен случай когда Вы по невнимательности перепутаете Pi, скажем, с переменной Pii и измените значения числа.
В Питоне нет поддержки констант.
Конечно, Вы можете называть переменные большими буквами и считать их константами (не изменять их).
Но проблема в том, что это не прописано в PEP8. Т.е если Вы присвоите значение переменной CONSTANT, Ваша IDE никогда не скажет Вам, что Вы делаете что-то не так.
Конечно, Вы можете использовать костыли чтобы сделать константы, например
этот класс со Stackoverflow.
2. Низкая производительность
Здесь я имею в виду производительность именно кода на Cpython. Если питоновский скрипт использует для тяжелых вычислений библиотеку на Си, то все становится гораздо быстрее.
Вся стандартная библиотека по максимуму написана на Питоне, не на Си.
С одной стороны это увеличивает ее портируемость (на альтернативные реализации вроде PyPy).
С другой стороны это существенно снижает скорость. Например, стандартный модуль json имеет простое и понятное апи, но с другой стороны значительно медленнее сторонней реализации ujson (написан на Си).
3. Отсутствие switch и цикла с постусловием
Когда я спрашивал знакомых питонистов, что им не хватает в языке многие сказали, что конструкции switch и цикла do/while как в Си подобных языках.
как мог бы выглядеть switch и do/while в Python#switch вместо кучи if
switch a:
case 1:
b=1
case 2:
b=3
default:
b=5
#вместо этого приходится писать while True: if not условие:break
do:
print(i)
while i<5
Примеры, понятное дело выдуманные, но согласитесь, что это приятнее.
4. Обратная совместимость не всегда хороша
Иногда нарушение обратной совместимости бывает нужным чтобы сделать что-то более понятным и удобным, но если отличий очень много, как между 2 и 3 версией, то это боль.
Конечно, можно без особых проблем переписать скрипт со 2 версии на 3, благо есть официальное руководство.
Но согласитесь, неприятно, что для работы всех программ на Питоне нужно иметь 2 интерпретатора: 2 версии и 3. По-прежнему число проектов на 2 версии велико.
Кстати, в 4 версии Python обратную совместимость вроде как опять сломают (PEP401)
кратко о PEP 401Все очень просто.
Оператор != заменяют на <>
Вместо того чтобы писать 1!=1 мы будем писать 1<>1
Опробовать новый оператор можно уже сейчас:
from __future__ import barry_as_FLUFL
print(barry_as_FLUFL) #_Feature((3, 1, 0, 'alpha', 2), (4, 0, 0, 'alpha', 0), 262144)
1!=1 #выбросит SyntaxError
UPD: Умные люди в комментариях сказали, что это первоапрельская шутка от разработчиков. Ничего не могу сказать по этому поводу, в PEP ничего не было сказано про шутку.
Но несмотря на это, в Python все равно множество обновлений привели к нарушению обратной совместимости, например версия 3.7
5. Спорные пункты
К ним можно отнести GIL и синтаксис Питона.
Кому-то не нравится синтаксис тем что он не похож на сишный.
Однако, как правило, чем больше кодишь на питоне, тем больше нравится его специфика)
По поводу GIL многие скажут, что это однозначный минус, т.к ограничивается параллельность вычислений.
Могу сказать, что основные причины использования GIL это:
Однопоточные сценарии выполняются значительно быстрее, чем при использовании других подходов обеспечения потокобезопасности;
Простая интеграция библиотек на C, которые зачастую тоже не потокобезопасны;
Простота реализации.
Кстати, есть реализации Python без GIL, например IronPython, Jython.
В Cython можно выключать GIL.
На этом все.
А что Вы хотели бы видеть в Питоне и чего Вам не хватает?
Пишите Ваше мнение в комментариях.
комментарии (114)