perl syntax

From
Bulat Ziganshin (2:5093/4.126)
To
Dmitry Grebeniuk (2:5054/37.63)
Date
2005-04-05T23:04:28Z
Area
RU.PERL
* Originally in RU.PERL
Приятного тебе дня и незабываемой ночи, Dmitry!

Tuesday April 05 2005, Dmitry Grebeniuk writes to Bulat Ziganshin:
 DG>>>   В принципе, при желании можно было бы это же изобразить в
 DG>>> чисто функциональном стиле (разве что ловить End_of_file надо,
 DG>>> что не совсем функци- анально), и было бы всего лишь чуть-чуть
 DG>>> менее быстро.

 BZ>> насколько именно? :)  у тебя есть какие-то цифры на руках?

 DG>   У меня есть обоснованные прогнозы.  Я видел, как окамл оптимизирует
 DG> (в частности, хвостовую рекурсию),

оптимизация tail calls - это мелочь. главная проблема неэффективности функционального стиля программирования - равбота со значениями вместо работы с ячейками памяти и использование списков вместо массивов

 DG> поэтому расходы времени будут
 DG> только на выделение памяти и на GC:

по сравнению с несколькими ассемблерными командами это будет работать куда дольше :)))  думаешь, зря они вместо прямолинейного кода использовали такой неестественный подход? :)

 DG> выделение 4 байт на одну строку
 DG> (в
 DG> случае "wc -l"), а если учесть, что эти 4 байта будут в области памяти
 DG> "молодых" и будут нужны только очень короткое время, то становится
 DG> ясно, что эти расходы весьма не велики. Хотя, конечно, на досуге
 DG> поиграюсь -- самому интересны цифры. Только подскажите урл примера,
 DG> где на массивах реализуется wc.

пока не могу вспомнить. погугли что0нибудь вроде "programming languages shootout"

 BZ>>>> а что в нём сделано с передачей параметров!!!

 DG>>>   Кстати вот не надо :)  Изврат, конечно, но можно вполне
 DG>>> красивые вещи выписывать, для скриптов и веб-приложений -- самое
 DG>>> то.

 BZ>> да, я и говорю, что перл3 был отличным языком. всё, что свыше
 BZ>> простых списков/хешей - мама, не горюй

 DG>   Вам не нравятся ссылки?

проблема в том, что стандартные функции принимают списки/хеши в развёрнутом виде. соответственно, на программисте лежит удовольствие по созданию/разыменовыванию всех этих ссылок. в ruby сделано лучше - там все объекты представлены ссылками и использование ссылок совершенно прозрачно. ты можешь написать что-то вроде:

x = { "a" => [1, 2, {"b"=>nil}] }

затем передать эту переменную в процедуру или наоборот - возвратить её. доступ ко всем элементам и их изменение прозводится напрямую:

x["c"] = x["a"][2]["b"]
x["a"][3] = x["a"][2].keys

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


Bulat, mailto:bulatz-AT-fort.tatarstan.ru, ICQ: work 15872722, home 11849833

... Иногда для того, чтобы изменить свое восприятие мира,
... люди пытаются изменить сам мир
--- GoldED+/W32 1.1.2
 * Origin: Чубайс Бессмертный - повелитель Тьмы (2:5093/4.126)
SEEN-BY: 450/208 452/25 100 454/9 455/15 461/33 74 106 640 464/34 465/204
SEEN-BY: 467/24 469/125 478/44 65 550/150 5068 4600/126 4614/9 4623/56 4625/9
SEEN-BY: 4626/100 4632/10 4635/99 1024 4641/444 4642/27 48 4657/50 5001/50
SEEN-BY: 5002/76 5002 5003/34 5010/53 146 5011/13 5015/4 28 214 5019/5 5020/52
SEEN-BY: 5020/115 128 133 150 175 486 600 642 744 794 921 958 968 982 1100
SEEN-BY: 5020/1169 1212 1234 1626 1642 1653 1826 1829 1930 2044 2200 2345 2908
SEEN-BY: 5020/4400 4441 5021/2 5023/11 5024/1 73 5025/19 5030/69 195 382 436
SEEN-BY: 5030/611 920 1016 1039 1520 1688 5031/7 63 5032/11 20 5033/21 35
SEEN-BY: 5034/8 5035/38 63 5036/13 5037/21 36 5038/4 5040/33 47 5041/4 5045/7
SEEN-BY: 5045/42 5047/47 5049/6 157 5050/9 41 47 5051/35 5053/16 38 5054/1 8 9
SEEN-BY: 5054/35 36 37 45 50 66 67 81 85 5055/177 5056/16 5058/77 5059/2 9 20
SEEN-BY: 5060/90 5062/4 7 5063/41 51 5064/7 35 36 5070/26 66 948 5071/22
SEEN-BY: 5075/37 5077/70 5079/49 5083/13 5090/23 105 5093/4 27 33 57 5096/18
SEEN-BY: 5100/113 6023/1 6033/2727 6070/5 6096/10
PATH: 5093/4 5020/52 5054/1 37