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