?

Log in

No account? Create an account
программистское: перл - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

программистское: перл [май. 26, 2010|08:17 pm]
Anatoly Vorobey
(эта запись будет интересна разве что программистам)

Новости из мира Перла! Отличное интервью с Дамианом Конвеем и не менее интересная презентация Тима Банса Perl Myths 2009.

Если бы я хотел поиздеваться, я бы сказал, что и интервью и презентация сделаны в стиле "No, no, it's not dead, it's pining, you see. It's pining for the fjords". Но это шутки ради; на самом деле мне близка позиция этих двух авторов, хоть и раздражает немного поза все-идет-по-плану, когда речь заходит о Perl6. Все-таки нет, все далеко не шло по плану.

И тем не менее, в основном они правы. Во-первых, "haters gonna hate". С фанбоями Руби, или Питона, или Clojure, или еще чего, стремящимся обязательно доказать всем, насколько Перл мертв, спорить нет смысла, а лучше просто игнорировать. Факты против них, а мода изменчива. Во-вторых, новости на фронте Perl6 действительно в кои-то веки звучат заманчиво. Надо будет попробовать Rakudo при случае.

Я не пишу на Перле уже больше трех лет, с тех пор, как начал работать в Гугле. Кроме того, в последний год я особенно притерся к Питону, которым пользуюсь ежедневно. Многое в этом языке действительно прекрасно, и устроено лучше Перла. Кое-что намного хуже, и до сих пор мне мешает. Любопытно, как Питон отличается от Перла в этом смысле: я бы сказал, что свои важные недостатки он гораздо лучше прячет внутрь, чем Перл. Их не видно на поверхности, а только после того, как уже немного притерпелся к языку; и может быть оттого легче получается с ними смириться.

Если шестой перл станет реальностью в этом году, это будет весьма и весьма интересно. В своих замыслах и планах это был действительно многообещающий язык. Посмотрим, посмотрим...
СсылкаОтветить

Comments:
[User Picture]From: avva
2010-05-27 07:02 am
то, что obj.field_name и obj.method_name ведут себя по-разному: второе авто-магически bounds to obj.
(Ответить) (Parent) (Thread)
[User Picture]From: stas
2010-05-27 08:12 am
Я так понимаю, это чтобы методы можно было таскать туда-сюда и scope магически менялся? Этим кто-то реально пользуется?
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2010-05-27 08:26 am
это удобно тем, что если передать obj.method_name кому-то другому просто как функцию (или callable object если точнее), а тот другой это вызовет, то у вызванного method_name() будет правильный доступ к содержимому именно объекта obj. Пользуются. Но на мой вкус, сочетание этой магии и с другой стороны эксплицитного определения self сильно запутывает картину происходящего. И еще - не часто это важно, но когда программа должна существовать долго и память не расти неограниченно, то эта штука сильно мешает, потому что объект не сметется в мусор, пока где-то кто-то держит его метод, что может получиться случайно и без намерения вызывать.
(Ответить) (Parent) (Thread)
[User Picture]From: egormakarov
2010-05-29 10:11 pm
о, а это похоже питоновская инкарнация java/c# memory leak - в java так с экземплярами inner classes можно начудить, а в c# - с делегатами
(Ответить) (Parent) (Thread)
From: rainbow_beast
2010-05-31 09:24 am
Адобовский ActionScript 3 добавьте (уж не знаю, так ли в спецификации ECMAScript 4) - то же самое... Правда, учитывая, как активно там используются обработчики событий (они ж callbacks все) - там вообще мрак в этом плане...
(Ответить) (Parent) (Thread)
[User Picture]From: nec_p1us_u1tra
2010-05-27 10:36 am
Я например.

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

xxx.yyy.zzz_zzz_zzz (self.something(), second_param, third_param, self.debug)

где

def debug (self, level, message):
(Ответить) (Parent) (Thread)
[User Picture]From: helvegr
2010-05-27 10:37 am
Ну, строго говоря, field_name тоже может быть дескриптором. Например, property так реализованы.
(Ответить) (Parent) (Thread)
[User Picture]From: helvegr
2010-05-27 10:50 am
Вообще же я думаю, что при наличии нормального синтаксиса для partial application необходимость в этом хаке бы отпала.
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2010-05-27 10:55 am
ага.
(Ответить) (Parent) (Thread)