[Moscow.pm] Why Perl?
Alexander Lourier
aml на rulezz.ru
Ср Фев 3 12:53:05 PST 2010
On Wednesday 03 February 2010 18:35:33 Dmitry Arsentiev wrote:
> >> Питон проще, порог вхождения как минимум вдвое ниже,
> >> для экспериментов идеален.
> >
> > Было бы здорово услышать аргументацию. Не флейма ради, а чтобы
> > понимать и упоминать.
>
> Спросил у коллеги, который пробовал сам выучить Пёрл,
> а потом стал программировать на Питоне.
>
> Во-первых, отступы. Не так страшны. как их малюют.
+1. Одна строчка настроек для vim позволяет ставить их автоматически и стирать одним нажатием на backspace. А то, что даже в чужом коде визуально
видно, какой оператор к блоку какой вложенности относится - это вообще супер.
> В-пятых. Ссылки, разыменование ссылок.
> Я спросил у коллеги, он сказал, что такого разнообразия игр со сслыками,
> как в перле, в питоне нету.
> Т.е. всякие \() , \&funcfoo, %{ $refhash } и т.д. - нету их.
Точнее, всё это есть, но доступно через функции с длинными названиями. Быстро, как в перле создать копию хеша, имея ссылку на него, дописать туда пару
ключей, не получается - это превращается в колбасу из трех функций из стандартной библиотеки вместо { %$orig_hash, key1 => 1, key2 => 1 }, Код не
получается писать так же быстро, как на Перле. Кстати, в литературе отмечают, что питонячий синтаксис специально задумывался для быстрой разработки.
Убрать лишние скобки, лишние символы, лишние ключевые слова для объявления переменных и т.д. Это все помогает, но без перловых всяких \() не
получается такого удобства.
> Правда, в питоне нету автовивификации, насколько я знаю..
> И это единственный крупный минус питона перед перлом в моих глазах.
Справедливости ради, это часто бывает и причиной ошибок. Ошибся в названии поля вместо $self->{field}->[$i] написал $self->{fieid}->[$i] - и
разбирайся потом, откуда баг растет. Ни одного ворнинга при этом.
> В-шестых. Объекты перла слизаны с объектов питона.
> Поэтому здесь питон не хуже перла.
Уу, они совсем разные. Совсем. В перле объекты мне нравятся в сто раз больше. У меня довольно специфичная задача - онлайн-игрушка. Запускаются
толстенные демоны, которые хранят в себе игровое состояние, и управляются событиями от игроков. В код постоянно вносятся изменения - от мелких фиксов
до крупных нововведений.
И сложность в том, что нужно, не прерывая работу сервера, не останавливая процесс, на лету перезагружать код. В перле благословение объекта - это
просто присвоение строчки с названием класса. А в питоне каждый класс - это сам по себе объект, и экземпляры этого класса знают то, что они
принадлежат к этому классу, храня в себе ссылку на объект класса, а не просто строчку с его названием.
При перезагрузке файла с исходником программы перл замещает все функции в пакете на новые скомпилированные, и при вызове методов старых объектов будут
вызываться уже новые функции. А в питоне создается новый объект класса, в него компилируется новый код. А старые объекты как ссылались на старый
объект класса, так и продолжают ссылаться. И не пересоздав объект, изменить его класс невозможно. Это порождает необходимость использования костылей
для перезагрузки питонячьих классов - вручную смотреть таблицы методов, переписывать их из нового объекта класса в старый и т.д.
> В-седьмых, сопровождать чужой код на питоне
> проще, чем сопровождать чужой код на перле.
> Последнее иногда просто невозможно.
> Т.е. уход крутого разработчика означает сперва "обожествление",
> а потом и омертвение оставленного разработчиком кода.
100%. Я нуб в питоне, но легко читаю его библиотечный код, чтобы разобраться в особенностях работы. В перле это намного сложнее - подменяются функции,
переопределяются всякие autoload'ы - пока разберешься в особенностях реализации, уже забудешь, как это все вместе работать должно.
PS. Вот за что я люблю moscow.pm - все-таки классная тут аудитория собралась. Можно спокойно без флейма обсуждать оффтопиковые технологии. Видно, что
пишут люди, для которых язык программирования - не религия, а инструмент для решения задач.
Подробная информация о списке рассылки Moscow-pm