Size: a a a

2021 July 29

AB

Alex Bush in Modern::Perl
надо было пробовать без сладкого чая 🙂
источник

DS

Dmitriy Shamatrin in Modern::Perl
Есть мнение что у кота был расчет на то, что колбаса упадет на пол и тогда она этому же коту и достанется
источник

SZ

Sergey Zhmylove in Modern::Perl
Ты потом код покажи
источник

A

Alexander in Modern::Perl
обязательно
источник

A

Alexander in Modern::Perl
я понял, почему у меня бенчмарки так отличались.
https://gist.github.com/ruzhnikov/16e28a0def72ac54a319aaeffcb8a2b6
источник

A

Alexander in Modern::Perl
когда мы используем constant вот в таком виде:
use constant FOO => "foo bar baz"; my $x = FOO;

то всё хорошо и быстро. И даже быстрее Readonly
источник

A

Alexander in Modern::Perl
но в реальном коде иногда приходится обращаться к константам через
__PACKAGE__->FOO; $self->FOO
и вот тогда всё плохо
источник

A

Alexander in Modern::Perl
 $ perl const_bench.pl 
                    Rate constant_arrow constant_object    readonly    constant
constant_arrow  2066450/s             --             -0%        -72%        -72%
constant_object 2075800/s             0%              --        -71%        -72%
readonly        7275096/s           252%            250%          --         -3%
constant        7494927/s           263%            261%          3%          --
источник

SZ

Sergey Zhmylove in Modern::Perl
Так я не понимаю, как ты планируешь ускорить обращение $ref->CONST относительно use constant?
источник

A

Alexander in Modern::Perl
package READONLY {
   use Readonly;
   Readonly::Scalar our $FOO => "foo bar baz";

   sub test {
       my $x = $FOO;
       my $y = $FOO;
       my $z = $FOO;

       my $res = $FOO . $FOO . $FOO;
   }
}

package READONLY_FROM_PACKAGE {

   sub test {
       my $x = $READONLY::FOO;
       my $y = $READONLY::FOO;
       my $z = $READONLY::FOO;

       my $res = $READONLY::FOO . $READONLY::FOO . $READONLY::FOO;
   }
}
источник

A

Alexander in Modern::Perl
работает так же быстро
источник

SZ

Sergey Zhmylove in Modern::Perl
Чем это отличается от our $FOO = 5; Internals::SvREADONLY($FOO, 1) ?
источник

A

Alexander in Modern::Perl
наверное тем, что мне не надо использовать Internals::SvREADONLY($FOO, 1)
источник

A

Alexander in Modern::Perl
и ещё какие-то костыли
источник

SZ

Sergey Zhmylove in Modern::Perl
Нет, оно не будет работать так же быстро, потому что оно не заинлайнит внутри sub READONLY::test
источник

SZ

Sergey Zhmylove in Modern::Perl
Костыли -- это пакеты с cpan
источник

A

Alexander in Modern::Perl
да ну господи,
 $ perl const_bench.pl 
                          Rate constant_object constant_arrow readonly readonly_from_package constant
constant_object       2226950/s              --            -2%     -67%                  -68%     -71%
constant_arrow        2274803/s              2%             --     -67%                  -67%     -71%
readonly              6813149/s            206%           200%       --                   -2%     -13%
readonly_from_package 6924558/s            211%           204%       2%                    --     -11%
constant              7786455/s            250%           242%      14%                   12%       --
источник

A

Alexander in Modern::Perl
работает так же быстро
источник

SZ

Sergey Zhmylove in Modern::Perl
Нет, у тебя не полное тестовое покрытые. Есть случаи, когда оно отсосет по скорости
источник

A

Alexander in Modern::Perl
например?
источник