вторник, 30 августа 2011 г.

python 3

а вот например поскольку мне тут в последнее время приходится править разнообразные скрипты на питоне, решил внятно сформулировать, почему писон мне активно не нравится

Задумка в принципе неплоха - ф-ции как первокласные объекты, множественное наследование (которое впрочем все равно правильно умеет использовать хорошо если один программист из ста), наличие исключений и все такое. Дьявол впрочем как обычно кроется в деталях
  1. Использование отступов как элемент синтаксиса. Не надо мне заливать про то, что это несерьезная предъява в наше тяжелое время окончательно победивших IDE. Я например большую часть времени провожу в windbg far, и там эта фича дико раздражает каждую минуту. В python 3 для усугубления проблемы еще и табуляция была предана анафеме. Так что программиста на питоне можно безошибочно распознать по стертым в пыль кнопкам del & space, бгг
  2. С отказом от префикса типа переменной (как в perl - $,@,%) их типы приходится тупо запоминать. И снова здравствуй, проклятая венгерская нотация
  3. Клозуры ни разу не первокласные объекты. Например без ипользования nonlocal значение переменных во внешних ф-циях изменять нельзя ! По моему это уже не совсем клозуры. По крайней мере совершенно элементарные примеры из higher-order perl без мата, отладки и напильника не переносятся. Бедные студенты MIT, как же они теперь осилят курс SICP без антидепрессантов
  4. переход на python 3 по моему нескромному мнению не дал в плане удобства практически ничего - ну привели всякие внутренние методы к единообразному виду, range теперь ведет себя как xrange и все остальное - сущие мелочи. Зачем было полностью отказываться от обратной совместимости ? Полагаю исключительно в силу врожденной злобности автора
  5. С другой стороны вот за такое например
    В Python 3, при одинаковой близости к двум кратным значениям, округление будет выполнено до ближайшего четного кратного (например, значение 0.5 будет округлено до 0.0,  а значение  1.5 – до  2.0). Эта особенность представляет серьезную проблему переноса математических программ на Python 3.
     в нормальном обществе принято молча бить канделябром
  6. Исключения часто используются не по делу и даже встроенными ф-циями. Что хуже всего - нет никакого механизма узнать, какие именно исключения может выкинуть вызов ф-ции, так что написание долгоиграющих программ становится многословным и параноидальным занятием. Я не понимаю что мешало сделать аннотацию всех возможных типов исключений функции, как это сделано в java например
  7. в python 3 возможность перезапустить модуль с диска выпилена (ф-ции reload больше нету). Соотв-но невозможно писать всяких долгоживущих демонов, поведение которых должно время от времени меняться в полете
Есс-но это далеко не полный список претензий. Если мне не лень будет - допишу еще

Резюме - не взлетит. Отъест некоторую долю у php например, но в силу врожденной злобности и нестабильности психики автора никаких серьезных вещей на питоне делать строго не рекомендуется

7 комментариев:

  1. Python3 следует стандарту IEEE 754 http://en.wikipedia.org/wiki/IEEE_754-2008#Rounding_algorithms и по-умолчанию использует чередующееся округление для минимизации систематической погрешности при расчётах. Направленные округления также доступны:

    math.ceil(0.5),math.ceil(1.5)
    (1, 2)

    math.floor(0.5),math.floor(1.5)
    (0, 1)

    round(0.5),round(1.5)
    (0, 2)

    ОтветитьУдалить
  2. скажите пожалуйста какие еще нормальные языки следуют этому явно оторванному от жизни стандарту ?

    ОтветитьУдалить
  3. все что на .Net например http://msdn.microsoft.com/en-us/library/75ks3aby.aspx

    ОтветитьУдалить
  4. почему тогда в C/C++/Fortran описанного в python3 поведения не наблюдается ?

    ОтветитьУдалить
  5. ну почему же: http://linux.die.net/man/3/rint
    по-умолчанию ведёт себя как раз так

    ОтветитьУдалить
  6. Тоже читаете "Python - полный справочник"? =)

    "Я не понимаю что мешало сделать аннотацию всех возможных типов исключений функции, как это сделано в java например"

    То есть речь идет о том, чтобы сделать исключения частью интерфейса. В связи с этим изменение интерфейса (например, добавление еще одного возможного исключения) становиться болезненным. В общем, вариант не без недостатков. Кажется, подробнее где-то у Фаулера было.

    ***

    Лично мне в Python в первую очередь не нравится его вычурность, которая заключается в том, что каждый вызов метода или функции или даже обращения к атрибуту объекта является обращением к словарю. Практическая ценность от такого решения является для меня загадкой, а недостатки налицо: http://eax.me/python-benchmark/ (самопиар детектед)

    ОтветитьУдалить
  7. > Тоже читаете "Python - полный справочник"?
    использую эпизодически именно как справочник

    > сделать исключения частью интерфейса
    я про это не говорил. вполне можно было бы снабдить каждую ф-цию атрибутом - списком типов бросаемых исключений

    ОтветитьУдалить