- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
sub company_stuff_add_array_elems
{
my $list = shift;
my $count = 0;
foreach ( @$list )
{
$count += $_;
}
return $count;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−172
sub company_stuff_add_array_elems
{
my $list = shift;
my $count = 0;
foreach ( @$list )
{
$count += $_;
}
return $count;
}
List::Util::sum
http://perldoc.perl.org/List/Util.html
:)
Но зачем?
но все равно, код скорее всего говно.
но тем не менее, передача по стеку всего списка отностительно дорогая операция.
я когда то находил на перле писаный merge sort использующий ссылки на массив + индексы. чисто для сравнения сделал тривиальный merge sort. тривиальная реализация была всего лишь где-то на 10% медленее.
Не, я не стану спорить, что память дешевая, что у вас не крутится никаких других жрущих память процессов и из ваших 8гб у вас всегда "свободны" все 7гб и удвоенное потребление памяти из-за того что вы тупо копируете массивы для вас ничего не значит. А потеря производительности на разыменовывания в обмен на двойное потребление озу (да на нее надо тоже потратить время на malloc/realloc) смотрится куда более предпочтительной.
azazel:list-util-sum kain$ cat xs.pl
use strict;
use List::Util 'sum';
my @a = ( 1 .. 10**6 );
use Time::HiRes 'time';
my $t = time();
&sum( @a );
printf( '%.6f' . "\n", time() - $t );
azazel:list-util-sum kain$ perl xs.pl
0.015808
azazel:list-util-sum kain$ cat pp.pl
use strict;
sub company_stuff_add_array_elems
{
my $list = shift;
my $count = 0;
foreach ( @$list )
{
$count += $_;
}
return $count;
}
my @a = ( 1 .. 10**6 );
use Time::HiRes 'time';
my $t = time();
&company_stuff_add_array_elems( \@a );
printf( '%.6f' . "\n", time() - $t );
azazel:list-util-sum kain$ perl pp.pl
0.098781
разница производительности тут из-за того что List::Util это XS модуль писаный на С.
царское байтоёбство в моем перле, лол