Size: a a a

2021 July 29

A

Alexander in Modern::Perl
Но факт в том, что они дико медленные
источник

A

Alexander in Modern::Perl
Надо свои бенчмарки откопать
источник

a

allter in Modern::Perl
Нет, нет вызова функции.

sub foo () { 42 }
говорит, что значение "подпрограммы" foo не зависит от аргументов. И его значение подставляется на место "вызова" foo в компайлтайме. Но сравнивать имеет смысл, если результат константы скаляр. Для других данных (хэшрефов) оптимизации может и не произойти - все зависит от того, как это значение используется.
источник

A

Alexander in Modern::Perl
Спорить не стану, компа под рукой нет. В свободное время займусь, посмотрю
источник

a

allter in Modern::Perl
Нет. Под капотом use constant создает сабы с пустым прототипом, которые инлайнятся (их физически как  сабы нет, можете каким- нибудь Deparse'ом посмотреть)
источник

a

allter in Modern::Perl
То, что в base.pm и других подобных местах говорится о том, что constant.pm "медленный" - относится только к тому, что обработка предложения "use constant XXX ...;"  - это require модуля, с последующим вызовом метода import и т.д. Тогда как просто определение  сабы с пустым прототипом - это, условно, просто разбор данного кода в исходнике. Т.е. ручное определение константной сабы ускоряет только это создание константы, а не скорость использования получившихся констант - она такая же, как у constant.pm
источник

W

Warstone in Modern::Perl
@PerlBanjoBot $ perl -MO=Concise,-exec -e 'sub foo() { 42} print foo . "\n"'
источник

P

PerlBanjoBot in Modern::Perl
-e syntax OK
1  <0> enter v
2  <;> nextstate(main 3 -e:1) v:{
3  <0> pushmark s
4  <$> const(PV "42\n") s/FOLD
5  <@> print vK
6  <@> leave[1 ref] vKP/REFC
https://PerlBanjo.com/778559d157
источник

W

Warstone in Modern::Perl
Ответ выше. Быстрее сделать нельзя.
источник

GK

Grigoriy Koudrenko in Modern::Perl
источник

GK

Grigoriy Koudrenko in Modern::Perl
Да даже perldoc напрямую говорит что это все инлайнится на стадии BEGIN
источник

VG

Vadim Goncharov in Modern::Perl
ВНЕЗАПНО
источник

SZ

Sergey Zhmylove in Modern::Perl
Лол
источник

SZ

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

SZ

Sergey Zhmylove in Modern::Perl
Блин, уже показали :(
источник

A

Alexander in Modern::Perl
интересное дело
источник

A

Alexander in Modern::Perl
погонял сейчас бенчмарки и constant оказался быстрее
источник

A

Alexander in Modern::Perl
хотя пару лет назад ситуация была ровно обратная
источник

A

Alexander in Modern::Perl
щас perlbrew накачу, погоняю тесты под версией из прода
источник

AP

Anton Petrusevich in Modern::Perl
я в детстве пробовал этот совет кота матроскина. без разницы :)
источник