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

Andrey Kovbovich akovbovich на gmail.com
Вт Мар 10 08:42:00 PDT 2015


Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я
прогнал тест и выяснилось 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
> <https://e.mail.ru/compose/?mailto=mailto%3aakovbovich@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 <https://e.mail.ru/compose?To=moscow%2dpm@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/3299c06a/attachment.html>


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