|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 06 Apr 2005 11:33:20 To : Bulat Ziganshin Subject : Re: perl syntax -------------------------------------------------------------------------------- Bulat Ziganshin -> Dmitry Grebeniuk @ Tue, 05 Apr 2005 22:04:29 +0400: DG>>>> В принципе, при желании можно было бы это же изобразить в DG>>>> чисто функциональном стиле (разве что ловить End_of_file надо, DG>>>> что не совсем функци- анально), и было бы всего лишь чуть-чуть DG>>>> менее быстро. BZ>>> насколько именно? :) у тебя есть какие-то цифры на руках? DG>> У меня есть обоснованные прогнозы. Я видел, как окамл оптимизирует DG>> (в частности, хвостовую рекурсию), BZ> оптимизация tail calls - это мелочь. главная проблема BZ> неэффективности функционального стиля программирования - равбота со BZ> значениями вместо работы с ячейками памяти Hу, Lisp, например, работает со значениями указателей. Если это не ячейки памяти... Hу, понятно, если мы все-таки о результирующем машинном коде, а не о том, с чем работает непосредственно программист. Ocaml не смотрел, не знаю. Собственно, лишних копирований значений (и структур) при функциональном стиле должен избегать компилятор. При самой тупой реализации проигрыш да, будет. BZ> и использование списков вместо массивов А это от алгоритмов зависит. Там, где важно константное время доступа к произвольному элементу, применяются векторы. Или хэши. Просто таких задач существенно меньше, чем кажется, если приходить из языков, где массивы есть, а списков и хвостовой рекурсии нет. BZ>>>>> а что в нём сделано с передачей параметров!!! DG>>>> Кстати вот не надо :) Изврат, конечно, но можно вполне DG>>>> красивые вещи выписывать, для скриптов и веб-приложений -- самое DG>>>> то. BZ>>> да, я и говорю, что перл3 был отличным языком. всё, что свыше BZ>>> простых списков/хешей - мама, не горюй DG>> Вам не нравятся ссылки? BZ> проблема в том, что стандартные функции принимают списки/хеши в BZ> развёрнутом виде. соответственно, на программисте лежит BZ> удовольствие по созданию/разыменовыванию всех этих ссылок. в ruby BZ> сделано лучше - там все объекты представлены ссылками и BZ> использование ссылок совершенно прозрачно. ты можешь написать BZ> что-то вроде: BZ> x = { "a" => [1, 2, {"b"=>nil}] } BZ> затем передать эту переменную в процедуру или наоборот - возвратить BZ> её. доступ ко всем элементам и их изменение прозводится напрямую: BZ> x["c"] = x["a"][2]["b"] BZ> x["a"][3] = x["a"][2].keys BZ> а в перле существует даже специальное руководство по тому, как BZ> делать массивы массивов, массивы хешей и т.д. с образцами кода - BZ> потому, что этот код даже для столь простых случаев оказывается не BZ> совсем очевиден С этим, в общем, согласен. Один вопрос. Предположим, у меня x = {"a" => [1,2], "b"=>[3,4]} Каким выражением (statement не интересует, нужно именно выражение) я могу получить из этого [[1,2],[3,4]] и [1,2,3,4]? В перле, с его четким разделением на список/массив и ссылку на массив (одно из весьма немногих в нем ортогональных мест), мне это понятно. А тут? -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru Дуля со смещенным центром тяжести --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/342604cdb77b5.html, оценка из 5, голосов 10
|