gpt4 book ai didi

Perl 优化器问题 : Will the perl compiler optimize away all of these temporary variables?

转载 作者:行者123 更新时间:2023-12-03 15:55:46 25 4
gpt4 key购买 nike

我有一个非常简单的算术,但为了可读性和正确性,我将它扩展为一堆临时变量。更容易阅读、更改和检查表达式的部分片段。

我的问题是,这段代码是否会因为它被扩展而在运行时受到影响?我不知道 perl 编译器是如何工作的,但是在 'C' 或类似的情况下,这些额外的(不完全)变量将被优化而不存在。

my $targetBasis = $$s{"basis"} * $nextBasisPct;
my $dollarsHeld = $$s{"basis"} * $$s{"held"};
my $targetDollars = $dollarsHeld + $opt{"buyDollars"};
my $targetShares = $targetDollars / $targetBasis;
my $newShares = $targetShares - $$s{"held"};
my $targetPrice = $opt{"buyDollars"} / $newShares;

谢谢。

-E

我刚刚完成了从一个看起来很糟糕的一个类轮的扩展,才发现它是正确的。如果没有理由这样做,我宁愿不把它放回不可读状态。

最佳答案

不。

下面是程序的编译版本

$ perl -MO=Concise,-exec a.pl
1 <0> enter
2 <;> nextstate(main 2 a.pl:2) v:*,&,{,x*,x&,x$,$
3 <0> padrange[$s:2,8; %opt:2,8; $targetBasis:2,8] vM/LVINTRO,range=3
4 <;> nextstate(main 3 a.pl:3) v:*,&,{,x*,x&,x$,$
5 <+> multideref($s->{"basis"}) sK/STRICT
6 <+> multideref($s->{"held"}) sK/STRICT
7 <2> multiply[t5] sK/2
8 <0> padsv[$dollarsHeld:3,8] sRM*/LVINTRO
9 <2> sassign vKS/2
a <;> nextstate(main 4 a.pl:4) v:*,&,{,x*,x&,x$,$
b <0> padsv[$dollarsHeld:3,8] s
c <+> multideref($opt{"buyDollars"}) sK
d <2> add[t7] sK/2
e <0> padsv[$targetDollars:4,8] sRM*/LVINTRO
f <2> sassign vKS/2
g <;> nextstate(main 5 a.pl:5) v:*,&,{,x*,x&,x$,$
h <0> padsv[$targetDollars:4,8] s
i <0> padsv[$targetBasis:2,8] s
j <2> divide[t9] sK/2
k <0> padsv[$targetShares:5,8] sRM*/LVINTRO
l <2> sassign vKS/2
m <;> nextstate(main 6 a.pl:6) v:*,&,{,x*,x&,x$,$
n <0> padsv[$targetShares:5,8] s
o <+> multideref($s->{"held"}) sK/STRICT
p <2> subtract[t11] sK/2
q <0> padsv[$newShares:6,8] sRM*/LVINTRO
r <2> sassign vKS/2
s <;> nextstate(main 7 a.pl:7) v:*,&,{,x*,x&,x$,$
t <+> multideref($opt{"buyDollars"}) sK
u <0> padsv[$newShares:6,8] s
v <2> divide[t13] sK/2
w <0> padsv[$targetPrice:7,8] sRM*/LVINTRO
x <2> sassign vKS/2
y <@> leave[1 ref] vKP/REFC
a.pl syntax OK

请注意,我首先在程序中添加了以下内容:
use strict;
my ($s, %opt, $targetBasis);

优化变量可以省去将一个值复制到它们中,但是将一个数值标量复制到另一个中是非常便宜的。

我会将代码保留为可读的形式。可读性远比节省几纳秒重要。

关于Perl 优化器问题 : Will the perl compiler optimize away all of these temporary variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com