Size: a a a

2020 December 17

IB

Ivan Bessarabov in use Perl or die;
Я не мерил, но ожидаю что между for($i=0; и for(my $i=0; разница видна не будет (при одном цикле в коде), а вот my $x и просто $x разнизца в прозводительности будет.

Но большую часть кода нужно писать не с огладкой на прозводительность, а с оглядкой на удобнство сопровождения. (и тут второй вариант лучше)
источник

АК

Алексей Клименко... in use Perl or die;
Ivan Bessarabov
Я не мерил, но ожидаю что между for($i=0; и for(my $i=0; разница видна не будет (при одном цикле в коде), а вот my $x и просто $x разнизца в прозводительности будет.

Но большую часть кода нужно писать не с огладкой на прозводительность, а с оглядкой на удобнство сопровождения. (и тут второй вариант лучше)
> разнизца в прозводительности будет.

Так и что быстрее-то?
источник

IB

Ivan Bessarabov in use Perl or die;
я ожидаю что вот этот вариант быстрее

my $x,$i;
for($i=0;$i<999;$i++){
 $x = $arr[$i];
 ...
}
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
> разнизца в прозводительности будет.

Так и что быстрее-то?
а чо, сложно самому померить?
источник

IB

Ivan Bessarabov in use Perl or die;
но нужно мерить
источник

VG

Vadim Goncharov in use Perl or die;
use Benchmark из коробки доступен, использовать его просто
источник

АК

Алексей Клименко... in use Perl or die;
Ivan Bessarabov
я ожидаю что вот этот вариант быстрее

my $x,$i;
for($i=0;$i<999;$i++){
 $x = $arr[$i];
 ...
}
Но по логике резолвинга имён, чтобы «увидеть» my снаружи, перлу нужно проверить два уровня видимости.

Например,

my $x = 1;
{
 my $x = 2;
 say $x;
}

– если убрать второй икс, то до первого будет на один шаг проверок больше.
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
а чо, сложно самому померить?
Потому что это может быть negligible, например если Перл понимает, что и так и эдак хер один (ведь мы референс на иск нигде не берём) – то и внутри оптимизируется одинаково.
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
Но по логике резолвинга имён, чтобы «увидеть» my снаружи, перлу нужно проверить два уровня видимости.

Например,

my $x = 1;
{
 my $x = 2;
 say $x;
}

– если убрать второй икс, то до первого будет на один шаг проверок больше.
он при компиляции их резольвит
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
Потому что это может быть negligible, например если Перл понимает, что и так и эдак хер один (ведь мы референс на иск нигде не берём) – то и внутри оптимизируется одинаково.
ну так померить и выяснить это =)
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
он при компиляции их резольвит
Ну так он же «видит», что тут магия my не используется.
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
ну так померить и выяснить это =)
Есть разные факторы. Я не спрашиваю, что быстрее, я спрашиваю, что ДОЛЖНО быть быстрее.

Иначе зачем бы мне спрашивать вообще.
Кто тут эксперт по перлу, я что ли?
источник

AO

Alexander Onokhov in use Perl or die;
Алексей Клименко
Есть разные факторы. Я не спрашиваю, что быстрее, я спрашиваю, что ДОЛЖНО быть быстрее.

Иначе зачем бы мне спрашивать вообще.
Кто тут эксперт по перлу, я что ли?
тут не важно, что быстрее.  Это несущественно.
источник

AO

Alexander Onokhov in use Perl or die;
#!/usr/bin/perl
use strict;
use warnings;

use Benchmark qw(:all) ;

cmpthese( -5, {
   'Outer' =>
       sub {
           my ($x, $i);
           for( $i = 0; $i < 999; $i++ ){
               $x = $i;
           }
       },
   'Inner' =>
       sub {
           for( my $i = 0; $i < 999; $i++ ) {
               my $x = $i;
           }
       },
});

END

        Rate Inner Outer
Inner 23419/s    --  -23%
Outer 30512/s   30%    --
источник

АК

Алексей Клименко... in use Perl or die;
Alexander Onokhov
тут не важно, что быстрее.  Это несущественно.
Ну вон, тут сказали, что переменные уровня пакета якобы быстрее локальных.

Но когда я в один файл собрал тысячу пакетов каждый с тремя our – то прогрузка файла замедлилась на порядок!
источник

АК

Алексей Клименко... in use Perl or die;
Alexander Onokhov
#!/usr/bin/perl
use strict;
use warnings;

use Benchmark qw(:all) ;

cmpthese( -5, {
   'Outer' =>
       sub {
           my ($x, $i);
           for( $i = 0; $i < 999; $i++ ){
               $x = $i;
           }
       },
   'Inner' =>
       sub {
           for( my $i = 0; $i < 999; $i++ ) {
               my $x = $i;
           }
       },
});

END

        Rate Inner Outer
Inner 23419/s    --  -23%
Outer 30512/s   30%    --
        Rate Inner Outer
Inner 23419/s    --  -23%
Outer 30512/s   30%    --

– Что это значит, в итоге что быстрее?
источник

АК

Алексей Клименко... in use Perl or die;
Это время или скорость?
источник

AO

Alexander Onokhov in use Perl or die;
частота. Outer быстрее
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
Ну вон, тут сказали, что переменные уровня пакета якобы быстрее локальных.

Но когда я в один файл собрал тысячу пакетов каждый с тремя our – то прогрузка файла замедлилась на порядок!
загрузка - это компиляция/парсинг, но кого она волнует? речь про работу потом
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
загрузка - это компиляция/парсинг, но кого она волнует? речь про работу потом
источник