[Moscow.pm] Быстрая конкатенация строк

Warstone@list.ru warstone на list.ru
Вт Мар 10 09:33:19 PDT 2015


1) А теперь у получившейся переменной замени 1 символ и увидь как скорость просела еще сильнее.
2) 
warstone на dev:~$ perl -e 'my $a="qwe"; my $b = substr($a, 1, 1); print "$a\t$b\n"; $b = "t"; print "$a\t$b\n"; substr($a, 1, 1) = "t"; print "$a\t$b\n"'
qwe     w
qwe     t
qte     t
Я не знаю что ты там изобретаешь, но наверно 3й вариант для тебя.

cабстр в SV кладет поинтер на оригинальную строку со смещением.

Вторник, 10 марта 2015, 18:42 +03:00 от Andrey Kovbovich <akovbovich на gmail.com>:
>Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я прогнал тест и выяснилось 1) скорость зависит от длины строки 2) версия с перестановкой указателей - это ты про что? нужны как бы мутабельные строки, или ты хочешь сказать что сабстр делайт элиас для исходных строк?
>
>10 марта 2015 г., 18:25 пользователь  Warstone на list.ru < warstone на list.ru > написал:
>>Потому что substr не копирует строку, он только в SV указатель на строку меняет. Это фишка конкретно сабстера. По этому его скорость работы не зависит от размеров строки и смещения в ней.
>>join и конкат создает новую строку (очевидно)
>>
>>
>>Вторник, 10 марта 2015, 17:21 +03:00 от Andrey Kovbovich < akovbovich на gmail.com >:
>>>Отвечая на свой же вопрос - потому что join и concat предварительно делают что-то наподобие my$z=" "x((length$x)+(length$y)); Т.к. такое выражение выравнивает substr к показателям join и concat. Кстати, еще вопрос, где у Перла функция конкатенации (та, что символ-точка)? В CORE::* не нашел. Мне нужен кодереф от нее.
>>>
>>>2015-03-10 17:03 GMT+03:00 Andrey Kovbovich  < akovbovich на gmail.com > :
>>>>Кто-нибудь знает, за счет чего substr быстрее?
>>>>
>>>>$ perl -MBenchmark=cmpthese -wE'my$x="0"x1_000_000;my$b="1"x100_000;cmpthese(10000,{concat=>sub{my$z=$x.$b;},substr=>sub{my$z="";substr$z,(length$z),(length$x),$x;substr$z,(length$z),(length$b),$b;},join=>sub{my$z=join("",$x,$b)}});'
>>>>         Rate   join concat substr
>>>>join   3922/s     --    -0%   -58%
>>>>concat 3937/s     0%     --   -57%
>>>>substr 9259/s   136%   135%     --
>>>>
>>>
>>>-- 
>>>Moscow.pm mailing list
>>>moscow-pm на pm.org |  http://moscow.pm.org
>>
>>
>>--
>>Moscow.pm mailing list
>>moscow-pm на pm.org |  http://moscow.pm.org
>>
>
>-- 
>Moscow.pm mailing list
>moscow-pm на pm.org |  http://moscow.pm.org

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150310/8d94836e/attachment.html>


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