[Moscow.pm] Кто-нибудь это видел?

Orlovsky Alexander nordicdyno на yandex.ru
Пт Ноя 16 14:46:54 PST 2007


> > Но по-моему такое поведение мапов и грепов --вполне предсказуемое, если вспомнить как они устроены в перле. Который, в свою очередь, совсем не функциональный язык программирования. ;)
> Ну да, у них предназначение в потоки строится, причём поток на самом 
> деле не оптимизирован и выполняется не паралельно.
> изза этого волшебные копирования памяти, а в питоне тупле - это struct[] 
> поэтому очень быстрый, я сам когда увидел - офигел.

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

А в случае с мапом и грепом мы получаем неявное копирование всего массива, т.к. по сути справа от передачи ссылки на функцию обработки, мы передаем список параметров. С фором и форичем это не так, там по-сути итератор по массиву без копирования чего либо куда либо, . 

> > Кстати о языках. Темы на четверг уже расписаны, но на будущее хотелось бы послушать про другие языки программирования, которые применяет уважаемая публика. 
> > Или можно здесь обсудить. Может завтра напишу сюда письмо с новой темой, если я еще своим спамом никого не утомил :)
> Рано ещё, про перл не наболтались, хотя обзорная лекция слабые стороны 
> перла по сравнению с другими языками, это будет очень круто, но есть 
> одна проблема, собрать эти сведения воедино - адский труд, я например 
> пока не готов к такому.

Не надо ацкого туда, хотелось бы простого и непринужденного общения, типа я юзаю то-то и это круто потому что... =)
Я вот сейчас интересуюсь языками R, Lua и erlang-ом с Haskell-ем =)
Но интересоваться и использовать в работе для реальных задач -- это две большие разницы.
Так что если есть люди знакомые с этими языками и они готовы поделиться своими мыслями и наработками -- это было б здорово! Т.к. у меня до всего руки без достаточного стимула вряд ли дойдут или дойдут нескоро. А вот если мне расскажут как все круто, и как много я теряю не юзая то-то и то-то -- то это совсем другое дело :)))

> Бенч вот:
> #!/usr/bin/perl
> # -*- Mode:cperl; Encoding:utf-8 -*-
>            Rate    grep     map     for foreach
> grep     294/s      --    -28%    -67%    -71%
> map      408/s     39%      --    -55%    -60%
> for      898/s    206%    120%      --    -11%
> foreach 1012/s    244%    148%     13%      --
> Compilation finished at Sat Nov 17 00:17:17


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

for
timethis 10000: 104 wallclock secs (74.05 usr +  0.11 sys = 74.16 CPU) @ 134.84/s (n=10000)
Foreach
timethis 10000: 105 wallclock secs (74.66 usr +  0.12 sys = 74.78 CPU) @ 133.73/s (n=10000)
Grep
timethis 10000: 218 wallclock secs (154.03 usr +  0.31 sys = 154.34 CPU) @ 64.79/s (n=10000)
Map
timethis 10000: 247 wallclock secs (175.13 usr +  0.32 sys = 175.45 CPU) @ 57.00/s (n=10000)

больше похоже на правду ;)
В этом тесте конечно не видно сколько памяти отжирается, но в случае с мапом и грепом в 2 раза больше должно чем с форами. (можешь проверить)

код бенчилки:
timethis($N,  sub { for (@d) {$_++}; }      );
print "Foreach\n";
timethis($N,  sub { foreach (@c) { $_++}; } );
print "Grep\n";
timethis($N,  sub { grep {$_++; 1} @b }     );
print "Map\n";
timethis($N,  sub { map {$_++} @a; }        );

(массивы те же)


Подробная информация о списке рассылки Moscow-pm