LINUX.ORG.RU

Perl мертв. Да здравствует Perl!


0

0

JT Смит, президент Plain Black, создатель WebGUI, и однин из незамеченных, но успешно использующих Perl в бизнесе, недавно послал мне это эссе. Он дал мне(O'Reilly) разрешение издать это полностью здесь.

Каждый день, я задумываюсь о том, почему я пишу на Perl а не на PHP, Java, C#, Ruby, Python, или [подставте ваш любимый язык сюда]? Люди говорят что, "Perl не используется больше" или, "Рубин - рулез..."

Есть миллионы программистов Perl во всем мире. Perl 5 активно поддерживается, и Perl 6 находится в развитии. Больше чем 3000 Модулей Perl были выпущены в 2006г, и вдвое больше должны быть выпущены в этом году. Действительность состоит в том, что Perl является совсем не мертвым.

>>> Взято с сайта =>



Проверено: Shaman007 ()
Ответ на: комментарий от sv75

>> В Perl6 будет и "у нас" подобные "компромиссы с общественностью" > Судя по этому письму в Перл6 все будет....

И ещё не известно ли, будет. :( Уже идут вялые попытки форков perl 5.8 (kurila perl и т.п.), а что будет дальше - вообще непонятно. Но это ведь не проблемы языка

> не очень, а никаких компромиссов в Питоне я не вижу. Там нет разделения ссылки-не ссылки. есть деление muttable/unmutttable, и ссылок на вторые не бывает, а у первых ссылки всегда.

А разве нахождение в составе сложного типа (той же последовательности) не может считаться ссылкой? Какая принципиальная разница между "ref=[0]" и "$ref = do{ \(my $a)};", если смысл один и тот же: ref указывает на некое значение, которое может принимать значения как ссылочных(mutable), так и нессылочных(immutable) классов?

А то что tuple добавили в скалярные значения - это просто деталь реализации. Я уверен, через определённое время в динамических скриптовых языках будут не только tuple - "массивы", но и другие "замороженные" объекты ["замороженных"] классов - с целью передачи по значению и для разного рода оптимизаций по скорости.

Принципиально ничего особенно выдающегося в Питоне нет, по сравнению с Перл. На каждое удобство использования найдётся какая-нибудь нетривиальная мелочь, которую всё равно надо будет знать. Единственное, за что его стоит благодарить - за отступы - реально красиво и удобно для ревьюера. :)

allter149
()
Ответ на: комментарий от allter149

> Я уверен, через определённое время в динамических скриптовых языках будут не только tuple - "массивы", но и другие "замороженные" объекты ["замороженных"] классов - с целью передачи по значению и для разного рода оптимизаций по скорости.

В Ruby можно любой объект заморозить :)

> Единственное, за что его стоит благодарить - за отступы - реально красиво и удобно для ревьюера.

Вот как? А обычно перловики больше всего ругают как раз отступы.

Hjorn
()
Ответ на: комментарий от yk4ever

>А что, у перла с поддержкой винды совсем задница, да?

Нет, все нормально, есть активстейт например, я даже компилятор в .exe видел, и он даже работал (ну правда на совсем простеньком скрипте sms->pop3->web chat потоковый гейте)

anonizmus
()
Ответ на: комментарий от allter149

> Какая принципиальная разница между "ref=[0]" и "$ref = do{ \(my $a)};", если смысл один и тот же:

Вот-вот. Если разницы нет, зачем писать больше?

Бритва Оккама: отсекаем лишнее. Один синтаксис для списков, этого достаточно. Всё, что не скаляр - передаётся по ссылке. Всё! Больше ничего не нужно запоминать.

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

yk4ever
()
Ответ на: комментарий от sv75

Подскажи где читать (и почему этого некто не делает?)

Включи просмотр всех постов в этом топике и сделай поиск по включению schneeflocke.org я там кидал ссылки на основные книжки по теме.

anonizmus
()
Ответ на: комментарий от allter149

> не буду больше экспериментировать с форматированием.

Так есть же опция "Удалить комментарий" (в течении часа). За неимением функции просмотра посылаемого сообщения, хоть какая-то возможность исправиться.

> Единственное, за что его стоит благодарить - за отступы - реально красиво и удобно для ревьюера. :)

Ты чего? Отступы это один надуманный плюс против 10-и реальных минусов. :-) В тред http://www.linux.org.ru/jump-message.jsp?msgid=1956779 .

mihalych ★★★
()
Ответ на: комментарий от yk4ever

> Так ты теперь объясни, зачем в перле нужны эти стрёмные "->" и два синтаксиса для описания списков, если все остальные скриптовые языки прекрасно обходятся без них, обеспечивая как минимум ту же функциональность?

Невежественно думать, что урезав что-то настолько фундаментальное в языке, не урезается тем самым его функциональность, либо требуются всякие подпорки и введение излишних сущностей, дабы залатать все появившиеся щели. Рассмотрим простые присваивания.

@array2 = @array;
$array_ref2 = $array_ref;

Для тех, кто не знает Perl (что они делают вовсе в этом треде), вторая строка аналогична Питоновскому присваиванию массива, а вот первая строчка создаёт новый массив, копируя в него элементы первого. Понятия работа-над-оригиналом и работа-над-копией фундаментальны. В Perl они выражены близким к идеалу способом, и для каждого понятия есть свой синтаксис.

Тут всё логично и просто. Попробуй отыскать аналогичные строки на Питоне и сравни с Перловыми:

@array = @another_array;
@$array_ref = @$another_array_ref; # replace array elements with others
return @constant_array; # return a copy
($return_value1, $return_value2) = func_returning_1_value();
($return_value1, $return_value2) = func_returning_4_values();
func(@three_params);
func($first_param, @second_and_third_params);
@copied_function_params = @_;
$original_function_params = \@_;
($a, $b, @rest) = @array;
($a, $b, %rest) = @_;
(@array1, $scalar, @array2)
(@array1, @$array_ref, @array2)
(\@array1, $array_ref, @array2)

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

mihalych ★★★
()
Ответ на: комментарий от mihalych

> нелеп Python, раз вынуждает вводить

Заткнись, ничтожество. 

Ссылка:
In : a = [1,2,3]

In : b = a

In : b[1]='you suck'

In : b
Out: [1, 'you suck', 3]

In : a
Out: [1, 'you suck', 3]


Копирование:
In: c = [1,2,3]

In: d = c[:]

In: d[1] = 'you really suck'

In: d
Out: [1, 'you really suck', 3]

In: c
Out: [1, 2, 3]

Для полной прочитски черепа от вытеснившего мозг студня из @$*^$@$@^#!*@*$!# можно сделать import copy и удариться головой об бетонную плиту.

Перловики бьются в последней агонии, безумно вращая глазами и жалобно скуля о воображаемых достоинствах инфернальной мешанины из спец. символов, которую они по ошибке и скудоумию считают языком программирования. Уже завтра они будут никому не нужны и с заунывным чавканием потонут в липких болотах навозного кода, который успели наплодить за свою нелепую жизнь.

Perl? Ha ha ha. Try Python! http://www.strombergers.com/python/perl-ha-ha-ha-python.gif

anonymous
()
Ответ на: комментарий от mihalych

> Тут всё логично и просто. Попробуй отыскать аналогичные строки на Питоне и сравни с Перловыми: 

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

array = another_array                        # refers the same array
array = another_array[:]                     # shellow copy via slice or
array = copy.copy(another_array)             # the same
array = copy.deepcopy(another_array)         # deep copy

val1, val2 = func_returning_1_values(), None # если правильно понял
val1, val2 = func_returning_2_values()       # i.e. return "hello", "world"
val1, val2 = func_returning_4_values()[:2]   # опять же если правильно понял перловый аналог
func(*three_params)
func(fst, *scnd_and_thrd)

a, b, rest = arr[0], arr[1], arr[2:]

array1 + [scalar] + array2                  # <=> (@array1, $scalar, @array2)

И где тут, простите, нелепость, лишние сущности?? Наоборот, все на порядок понятнее. И какие-такие загадочные проблемы вы все же имеете в виду?



xonix
()
Ответ на: комментарий от sv75

>> А то, что новичкам может быть сложно сразу использовать всё богатство синтаксиса, так если ровнятся на новичков, то и язык выйдет исключительно для новичков.

> Никак нет! Просто сделайте язык, в котором даже новичок сможет быстро использовать все богатство синтаксиса.

НОВИЧОК в любом языке (даже в русском) ВСЁ богатство синтаксиса использовать по определению НЕ СМОЖЕТ. А когда сможет, то уже не будет новичком. А в Perl из-за массы синонимичных конструкций (по аналогии с естественным языком) есть и простые, понятные конструкции для новичков, и идиомы для продвинутых, и плохо понимаемый жаргон для углубившихся. Есть выбор для каждого, есть куда двигаться, если пожелаешь...

mshock
()
Ответ на: комментарий от mshock

> А в Perl из-за массы синонимичных конструкций (по аналогии с естественным языком) есть и простые, понятные конструкции для новичков, и идиомы для продвинутых, и плохо понимаемый жаргон для углубившихся.

А потом новичок встречает код, где вся эта хренотень встречается ВМЕСТЕ, и у него идёт из ушей пар. Когда вы, наконец, поймёте, что TIMTOWTDI - вредный принцип?

yk4ever
()
Ответ на: комментарий от mihalych

> Отступы это один надуманный плюс против 10-и реальных минусов.

Какие минусы-то? Ай-ай, код на питоне в виде бутылочек оформить нельзя!

Если принять мысль, что питон - язык не для баловства, а для серьёзной разработки приложений - то полезность отступов станет строго очевидной.

yk4ever
()
Ответ на: комментарий от anonymous

>Уже завтра они будут никому не нужны и с заунывным чавканием потонут в липких болотах навозного кода, который успели наплодить за свою нелепую жизнь.

%-)) Завтра который год никак наступить не может, а мифическая смерть перла (до которой еще нужно дожить кстати) невыгодна питонофилам, это вроде как очевидно %)

>Perl? Ha ha ha. Try Python! http://www.strombergers.com/python/perl-ha-ha-ha-python.gif

В агонии бьются питонщики, что-то мне кажется что пик его популярности уже прошел, успокойтесь, все будет хорошо, в конце концов сейчас вон рынок жилья растет, рабочие на стройки нужны, цемент таскать, не пропадете %-)

anonizmus
()
Ответ на: комментарий от yk4ever

>Если принять мысль, что питон - язык не для баловства, а для серьёзной разработки приложений - то полезность отступов станет строго очевидной.

идиотия это. Как хочу так и пишу, если какой то придурок мне навязывает отступы (которые я итак использую, но навязывания не потерплю) - пошел он на хер, завтра начнет навязывать еще что-нибудь, нах это надо ?

Вам самим, пистонщикам, не противно что ваш язык спроектирован для идиотов которые не в состоянии отступы самостоятельно использовать, без принуждения ? Т.е. я правильно понимаю - он развивается в ту сторону что бы его использовали обезьяны ? Лет через пять можно будет просто нажимать рандомно на кнопки и он будет за тебя код писать %) Круто, ага.

anonizmus
()
Ответ на: комментарий от mihalych

> Тут всё логично и просто.

Ты действительно считаешь, что нагромождение порезанных цензурой матюгов типа $@# проще и логичнее явного копирования типа copy(a) или a = b[:] ? У меня возникает мысль внести перл в запрещенные для использования языки в таком случае - негативное влияние на мозг у него видимо не слабее чем у жабы... :(

sv75 ★★★★★
()
Ответ на: комментарий от anonizmus

> Как хочу так и пишу,

Чудакам, плующим на стандарты кодирования, слабо Б-гу, не место в питоне! Да и вообще в программировании. Впрочем иди на перл, может быть там еще пара-тройка таких невменяемых найдется.

sv75 ★★★★★
()
Ответ на: комментарий от mshock

> А когда сможет, то уже не будет новичком.

А ты все-таки прикинь объемы синтаксиса Перла, Питона и скажем C# 3.0.

> и плохо понимаемый жаргон для углубившихся.

Сравни с русским языком - там речь углубившегося в русский язык грамотного человек понятна всем, а речь пионера-паддонка - только его одногодкам. А в перле наоборот выходит, чем ты углубился сильнее, тем твой код менее понятен чайниками? Нафиг, нафиг такой стиль.

sv75 ★★★★★
()
Ответ на: комментарий от anonizmus

> Вам самим, пистонщикам, не противно что ваш язык спроектирован для идиотов которые не в состоянии отступы самостоятельно использовать, без принуждения ?

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

sv75 ★★★★★
()
Ответ на: комментарий от sv75

>В некотрых странах за брошенный окурок берут штраф. Вам наеврное противная мысль об этом, да?

Мне да, противно, я бы еще в рыло давал за такое, штрафа мало. А указывать мне как я должен писать свой же код - это уже нарушение приваси, давай поставим тебе в сортир камеру и будем отслеживать правильно ты срешь, извиняюсь за выражение, и если нет - подавать на стульчак разряд 550вольт.

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

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

anonizmus
()
Ответ на: комментарий от anonymous

>Ссылка:
>In : a = [1,2,3]
...
>Копирование:
>In: c = [1,2,3]

И в чём тут разница, кроме а и с?

vadiml ★★★★★
()
Ответ на: комментарий от sv75

> У меня возникает мысль внести перл в запрещенные для использования языки

для себя можно что угодно запрещать :)

а вот другие должны сами выбирать

я когда 3 года назад взялся за перл, одной из причин его использования был именно С-подобный синтаксис и возможность сделать 1 действие 2-3 способами (тоже как в С)

PS мне когда-то когда-то в институте преподаватель высказывал за то, что я делал отступы в фортране :) , там это не принято, а он, как оказалось, ни чего кроме фортрана и ассемблера для 580-й серии процессоров не знал.

vadiml ★★★★★
()
Ответ на: комментарий от Hjorn

>> Я уверен, через определённое время в динамических скриптовых языках будут не только tuple - "массивы", но и другие "замороженные" объекты ["замороженных"] классов - с целью передачи по значению и для разного рода оптимизаций по скорости.

> В Ruby можно любой объект заморозить :)

Надо же, какая досада: всё, что я придумываю уже оказывается придуманным до меня другими! :-)

>> Единственное, за что его стоит благодарить - за отступы - реально красиво и удобно для ревьюера.

> Вот как? А обычно перловики больше всего ругают как раз отступы.

Ну, я тоже ругаю — но только в смысле отсутствия возможности вставить в форум. Просто я насмотрелся разных модулей CPAN, написанных в виде письма Дяди Фёдора родителям: часть отступов табами, часть - пробелами, а часть - mc-индентами (чётные - табами, нечётные - табами + 4 пробела). :-E Так что для применения "бойцами" данная фича была бы полезна. Хорошо бы в Perl можно было бы так енфорсить coding style, например, с помощью прагмы.

И вообще, бОльшая часть тех, кто ругает, сами грамотно отступают и красиво оформляет. Но для таких, кто выбрали питон такие констрайнты были бы в пору.

allter149
()
Ответ на: комментарий от allter149

Вообще, нехороший какой-то спор получается: единоутробные потомки ругают на чём свет предка своего - ведь и Python, и PHP, и Ruby свою родословную ведут от Perl!

Причём предка живого, который помирать и не собирается.

mshock
()
Ответ на: комментарий от allter149

> а часть - mc-индентами (чётные - табами, нечётные - табами + 4 пробела). :-E

стандарт в MySQL -- отступ 2 пробела, 8 пробелов заменяются табом, всё, что длиннее 80 символов -- переносится на следующую строку. В тоже время код очень строен и понятен. Когда я разбирался с их кодом, у меня в редакторе стояло 1 таб == 4 пробела, и всё форматирование поехало.

в большинстве случает отступ в 8 пробелов -- это уж очень много, на экран не влазит. А когда приходится много разбираться с чужим кодом, длину таба не уменьшишь.

> Хорошо бы в Perl можно было бы так енфорсить coding style, например, с помощью прагмы.

есть программы, прогнав через которые можно получить нужное форматирование (но мне, например, лень таким заниматься, я лучше сразу сделаю как надо)

vadiml ★★★★★
()
Ответ на: комментарий от allter149

> что бы можно было задать в перечне формальных параметров способ работы с ними): > f( Type x, Type& y, const Type& z) > Боюсь только, что такой язык в ближайшее время не родится.

Ты хочешь сказать, что Perl 6 в ближайшее время не родится? Так вроде бы первая версия на конец этого/начало нового года запланирована. Там и не такое будет, можно например указать с помощью where, что второй параметер принимает нечетные числа от 10 до 20 (и эта проверка, заданная в заголовке функции будет скомпилирована).

Только многие всё же думают, что это всё от лукавого. Такие проверки лучше делать программистом в runtime в самой функции. Динамический же, слава богу, язык.

mihalych ★★★
()
Ответ на: комментарий от anonizmus

> Как хочу так и пишу, если какой то придурок мне навязывает отступы (которые я итак использую, но навязывания не потерплю) - пошел он на хер, завтра начнет навязывать еще что-нибудь, нах это надо ?

Я представил себе инженера который говорит: "Как хочу так и черчу, если какой-то придурок навязывает мне ГОСТы - пошёл он на хер..." и его дальнейшую карьеру.

Отступы - рулез. Ибо они

1) создают Coding Standard, что существенно облегчает совместную разработку приложений;

2) избавляют от мельтешащих перед глазами и совершенно ненужных { }

yk4ever
()
Ответ на: комментарий от anonizmus

> Как хочу так и пишу, если какой то придурок мне навязывает отступы

Вдогонку: а что мешает остальным сказать "если какой-то придурок навязывает мне {}"? Когда ты пишешь на каком-либо языке, ты всегда связан его ограничениями. Чего кипятиться-то?

yk4ever
()
Ответ на: комментарий от mihalych

>> что бы можно было задать в перечне формальных параметров способ работы с ними): > f( Type x, Type& y, const Type& z) > Боюсь только, что такой язык в ближайшее время не родится.

> Ты хочешь сказать, что Perl 6 в ближайшее время не родится? Так вроде бы первая версия на конец этого/начало нового года запланирована.

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

> Там и не такое будет, можно например указать с помощью where, что второй параметер принимает нечетные числа от 10 до 20 (и эта проверка, заданная в заголовке функции будет скомпилирована).

И что, в определении функции в P6 можно будет сказать, что вот этот объект передаётся, его можно изменять внутри функции (как любое другое имя/переменную, но вовне функции он вернётся в оригинальном виде)?

> Только многие всё же думают, что это всё от лукавого. Такие проверки лучше делать программистом в runtime в самой функции. Динамический же, слава богу, язык.

Естественно. Типизация и проверки должны быть опциональными. Но по опыту больших проектов наличие их (в легковесном исполнении) очень и очень нужно.

allter149
()
Ответ на: комментарий от sv75

> У меня возникает мысль внести перл в запрещенные для использования языки в таком случае

Перл - Practical-but-Esoteric Rabid Language.

yk4ever
()
Ответ на: комментарий от yk4ever

> А недостаток налицо: из заголовка определения функции невозможно понять, что ей следует передавать.

Во первых, в Perl можно указыватьв в заголовке такие вещи, как минимальное число параметров и другие вещи относительно по-ссылке/по-значению (которые я даже не хочу начинать объяснять тем, кто знает лишь Питон). А с помощью модуля так и вовсе можно именные параметры в заголовке указать и не использовать @_.

Но всё же лучше вовсе ничего не описывать в заголовке, чем обязательно быть загнанными в узкие рамки описания заголовков.

У меня полно функций с разными API (наборами параметров, различающимися по типу или значению), которые я анализирую в run-time. Жёсткая система задания параметров функции Питон только мешает мне.

Я хочу например делать (псевдо-запись):

obj.name # get name
obj.name("Piter Bolen") # set name
obj.name("Piter", "Bolen") # set name by first_name and second_name

Или указывать первый опциональный параметр какого-то типа (хэш), а за ним обязательные параметры (стринги), или позволять альтернативные параметры и их число, отличающиеся типом. В Перл я ничем не ограничен. Диспачинг параметров делаю в run-time как мне угодно. Вот и выходит, что в Питоне я бы только и делал, что указывал (**params) и не использовал бы ничего иного. И чем же это лучше положения в Перл? Ничем.

mihalych ★★★
()
Ответ на: комментарий от anonizmus

> А указывать мне как я должен писать свой же код - это уже нарушение приваси, давай поставим тебе в сортир камеру

Объясни мне, как так получилось, что ты код в сортире пишешь?

Или ты намекаешь, что производимый тобой код эквивалентен содержимому унитаза?

yk4ever
()
Ответ на: комментарий от mshock

> единоутробные потомки ругают на чём свет предка своего - ведь и Python, и PHP, и Ruby свою родословную ведут от Perl! Причём предка живого, который помирать и не собирается.

Дедушке пора на пенсию.

Он конечно до сих пор любит рассказывать, как пулял по фрицам из трёхлинейки, работал в колхозе на тракторе и таскал на майских праздниках усатый портрет Ларри Виссарионовича Уолла. Но в нынешнюю постиндустриальную эпоху ностальгические трели его гармошки уже смотрятся как-то архаично.

yk4ever
()
Ответ на: комментарий от vadiml

> > Хорошо бы в Perl можно было бы так енфорсить coding style, например, с помощью прагмы.

> есть программы, прогнав через которые можно получить нужное форматирование (но мне, например, лень таким заниматься, я лучше сразу сделаю как надо)

Есть даже перловые модули, но они используют фильтры, поэтому я боюсь их использовать.

А perl tidy, когда я использовал, не умел (и вряд ли умеет сейчас) разделять block braces и hashref braces. А я предпочитаю, что бы block braces всегда были на уровне отступов вызывающего блока. Типа (весьма гротескный пример):

sub f ( $ )
{
my $res = eval
{
map
{
# some long code
+{
# constructing hashref
a => 1,
b => 2,
}
}
grep
{
# another long code
}
map { $short_op++; $_ } grep /xyz/,
map
{
# another map
}
@list;
};
if ( $@ )
{
# ..
}
}

allter149
()
Ответ на: комментарий от vadiml

> > Хорошо бы в Perl можно было бы так енфорсить coding style,
> > например, с помощью прагмы.

> есть программы, прогнав через которые можно получить нужное
форматирование (но мне, например, лень таким заниматься, я лучше 
сразу сделаю как надо)

Есть даже перловые модули, но они используют фильтры, поэтому я 
боюсь их использовать.

А perl tidy, когда я использовал, не умел (и вряд ли умеет сейчас)
разделять block braces и hashref braces. А я предпочитаю, что бы 
block braces всегда были на уровне отступов вызывающего блока. 
Типа (весьма гротескный пример):

sub f ( $ ) 
{
  my $res = eval
  {
    map 
    {
      # some long code
      +{
        # constructing hashref
        a => 1,
        b => 2,
      }
    }
      grep 
      {
        # another long code
      }
        map { $short_op++; $_ } grep /xyz/, 
          map 
          {
            # another map 
          } 
            @list;
  };
  if ( $@ )  
  {
    # ..
  }
}

allter149
()
Ответ на: комментарий от xonix

> # если правильно понял

Нет, неправильно понял. В Perl я могу выбрать, возвратить ли сслыку на массив (как в Питоне, в нём есть только ссылки), или N ссылок или других значений. В Питоне мне придётся для этого вложеную структуру создать и ссылку на неё возратить, в Перл это делается на лету, list-context.

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

mihalych ★★★
()
Ответ на: комментарий от mihalych

> В Питоне мне придётся для этого вложеную структуру создать и ссылку на неё возратить, в Перл это делается на лету, list-context.

Не совсем понял, что там в питоне нельзя на лету сделать. Можешь пример перлового кода показать?

yk4ever
()
Ответ на: комментарий от mihalych

> Нет, неправильно понял. В Perl я могу выбрать, возвратить ли сслыку 
> на массив (как в Питоне, в нём есть только ссылки), или N ссылок или 
> других значений. В Питоне мне придётся для этого вложеную структуру 
> создать и ссылку на неё возратить, в Перл это делается на лету, 
> list-context.

Весьма не факт, что это хорошо. Ты сможешь понять, что из себя 
представляет переменная $result, не исследуя потроха функций f, g и h в 
примере ниже?

sub f { my @l = ( 3, 2, 1 ); return @l; }
sub g { return ( 3, 2, 1 ) }
sub h { my @l = ( 3, 2, 1 ); return wantarray ? @l : 42; }
$result = f( 19 );
$result = g( 19 );
$result = h( 19 );

allter149
()
Ответ на: комментарий от mihalych

> Я хочу например делать (псевдо-запись):

> obj.name # get name
> obj.name("Piter Bolen") # set name
> obj.name("Piter", "Bolen") # set name by first_name and second_name 

Какая, право слово, херь - одним методом читать и писать значение! Давайте опишем нормальную проперть:

class MopernTalking(object):
    def get_name(self): return self._name
    def set_name(self, val):
        if type(val)==tuple or type(val)==list: 
            self._name = ' '.join(val)
        else: self._name = val
    name = property(get_name, set_name)
    
mt = MopernTalking()
mt.name = 'Piter Bolen'
mt.name = 'Piter', 'Bolen'
print mt.name

yk4ever
()
Ответ на: комментарий от mihalych

> Вот и выходит, что в Питоне я бы только и делал, что указывал (**params) и не использовал бы ничего иного.

Я имел в виду (*params), ну не суть. Всё равно работать с автоматическим @_ удобнее. :-)

P.S. От дискуссии временно отстраняюсь. Работа.

mihalych ★★★
()
Ответ на: комментарий от vadiml

> а вот другие должны сами выбирать

У нас на курсе *все* выберут C#. При запрещении C# - C++/Qt. При запрещении C++ - Java. А, еще будут легаси Delphi/C++ Builder. Проверял. Поэтому для создания некоторого разнообразия приходится *запрещать*. :(

sv75 ★★★★★
()
Ответ на: комментарий от mshock

> Вообще, нехороший какой-то спор получается: единоутробные потомки ругают на чём свет предка своего - ведь и Python, и PHP, и Ruby свою родословную ведут от Perl!

Ну и что! Формально к примеру христианство и ислам идут от иудаизма, но вы попробуйте это кому-то рассказать! ;)

sv75 ★★★★★
()
Ответ на: комментарий от sv75

"У нас на курсе *все* выберут C#. При запрещении C# - C++/Qt. При запрещении C++ - Java. А, еще будут легаси Delphi/C++ Builder."

Нужно выбирать предметную область, язык значения не имеет ( будет целиком определен предметной областью)

kryl
()
Ответ на: комментарий от allter149

Нет просто запросы кучки очень богатых людей в данный момент не могут полностью отменить законы природы, которые диктуют удовлетворять реальные нужды людей, а не кошельки и фантазии быдловатых барыжников разного толка. IMHO: Такого рода природные закономерности будут властвовать всегда:)

anonymous
()
Ответ на: комментарий от allter149

> Ты сможешь понять, что из себя представляет переменная $result, не исследуя потроха функций

Зачем потроха? На всех языках правильным способом понимания API функции является чтение её документации.

mihalych ★★★
()
Ответ на: комментарий от sv75

> Ты действительно считаешь, что нагромождение порезанных цензурой матюгов типа $@# проще и логичнее явного копирования типа copy(a) или a = b[:] ?

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

@new_array = @array;
@new_array = @array1, @array2;
@array1 = @array2 = (); # reset several arrays at once
($value, @array1, @array2) = (1, 2);
@array = %hash;
%new_hash = %hash;
%reversed_hash = reverse %hash;
($arg1, $arg2, %rest) = @_;

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

> У меня возникает мысль внести перл в запрещенные для использования языки в таком случае - негативное влияние на мозг у него видимо не слабее чем у жабы... :(

Неумный у тебя пост получился и выводы какие-то неадекватные. Прямо боязно становится за твоих студентов с таким недальновидным подходом к их обучению. :) :( Неудивительно тогда, что там у вас выходят сплошные виндузятники.

mihalych ★★★
()
Ответ на: комментарий от yk4ever

> Отступы - рулез. Ибо они

> 1) создают Coding Standard, что существенно облегчает совместную разработку приложений;

Отступы используются нормальными программистами во всех языках для читабельного выделения уровней. Питон тут ничем положительным не выделяется, только ислючительно отрицательным, потому как отступы в нём значимы _и_ полноценных альтернатив им никаких не предлагается. В свою очередь, во всех языках есть проблема с отступами, определить ли один уровень как 2 пробела, 3, 4, 5, 8 или как таб или использовать табо-пробелы. Так что никакого Coding Standard отступы не создают. Ты путаешь отступы с Coding Style.

> 2) избавляют от мельтешащих перед глазами и совершенно ненужных { }

Значит ты не видешь, какие большие возможности открываются при указании конца блока? Отмена обязательной индентации, возможность разбить код как угодно, хоть в одну строку, многострочные инлайновые функции, крайне возросшая читабельность при глубине уровней или чтении по бумаге, работа с полноценным блоком как с примитивом языка и другое, обсуждённое до дыр в предыдущем треде про Перл.

По-моему, это хороший критерий отсева программистов при приёме на работу, спросить про "мельтешащих перед глазами и совершенно ненужные фигурные скобки". Если программист кичится своим агресивным невежеством, то лично мне на работе такой не нужен.

mihalych ★★★
()
Ответ на: комментарий от yk4ever

> Какая, право слово, херь - одним методом читать и писать значение! Давайте опишем нормальную проперть

Это ты так сказал, потому как Питон не позволяет с лёгкостью создавать такие мулти-методы и принято вводит взамен излишние сущности (проперти)?

Кстати, не поверишь, но не раз случалось писать getter, который принимает параметр (формат там или подобное) и от setter-а его лишь проверкой аргументов сделаешь. В Перле это легко.

Вот будет в Perl 6 и описание параметров и полноценные мулти-функции (function overloading), но чует моё сердце, милее определения одной именной функции и собственного диспатчинга в ней я не найду, буду всё с @_ оперировать, супер удобно. :) Благо такая опция в Perl 6 оставлена.

mihalych ★★★
()
Ответ на: комментарий от allter149

> всё из-за того, что они поменяли приоритеты операторов и поменяли их самих

Ну, всё относительно. Приорететы C не очень плохи, но в Perl 6 так много новых операторов, почему бы ревизию не сделать? Для интереса, какие конкретные нарекания? Обычно замена "? :" на "?? !!" многим не нравится, но по-моему это не суть. Главное, что это тот же Perl до самых костей, и никак не Python, и даже не Ruby, с их намеренными урезаниями возможностей. :)

> И что, в определении функции в P6 можно будет сказать, что вот этот объект передаётся, его можно изменять внутри функции (как любое другое имя/переменную, но вовне функции он вернётся в оригинальном виде)?

Так точно, указание полного C++ подобного синтаксиса это самое базисное. Кроме этого можно будет указать такие правила для параметров, что ни одному существующему языку не снились, и, думаю, не приснятся; хотя, кто знает, что будет лет через 100. ;-)

А также C++ подобные мульти-функции, опять же на новом уровне. А ещё и macro (compile-time functions). Ну и operator overloading останется, конечно же, только можно будет изобретать свои операторы, состоящие из любой комбинации любых символов юникода (проверял в pugs, всё работает, и "Σ" и "!!!" и "x" и "(C)" и "такой-хитроназванный-оператор"). В обшем, весело. :)

http://dev.perl.org/perl6/doc/design/syn/S06.html

Много нового, согласен. Но радует то, что и многое из старого (как @_) оставлено, так что можно почти сразу начинать на новом языке программировать.

mihalych ★★★
()
Ответ на: комментарий от yk4ever

> Дедушке пора на пенсию.

Работаеющий пенсионер жив-здоров, бодр и весел, в следующем году 6-ку родить собирается... :-)

А если серьёзно, я - за то, чтобы знать не один язык и каждый язык применять к месту: на Perl я пишу короткие скрипты для автоматизации админиовских задач, на Java - работаю с базами данных в корпоративной системе, на Ruby on Rails - быстро делаю и отлаживаю web-приложения, на C писал программу сопряжения с нестандартным устройством.

> Ну и что! Формально к примеру христианство и ислам идут от иудаизма, но вы попробуйте это кому-то рассказать! ;)

Цивилизованные культурные люди стараются не участвовать в религиозных войнах и вполне могут договариваться и сотрудничать.

mshock
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.