为什么perl比d语言更快?

时间:2011-04-29 18:35:41

标签: performance perl

简单编程hello world程序(下面你有D和perl的代码)在perl(解释语言)中比在D(编译语言)中更快。为什么呢?

//D language (ldc compiler)

import tango.io.Stdout;
void main()
{
    int i=0;
    while (i<1000)
    {
     Stdout("Hola Món").newline;
     i = i+1;
    }
}

my $i = 0;
while ($i<1000)
{
    print "Hola Món\n";
    $i = $i+1;
}

时间是:

time perl hello.pm 

real    0m0.047s
user    0m0.004s
sys 0m0.012s

time ./hola
real    0m0.070s
user    0m0.044s
sys 0m0.012s

为什么?

2 个答案:

答案 0 :(得分:6)

似乎代码是99%系统调用(printf),而perl可能非常好地优化了周围的循环。我想说尝试一些更复杂的东西,不要过分依赖单一的系统调用。

此外,考虑到perl部分专注于补充/替换Unix工具箱(sed,awk),为快速启动优化perl是有意义的。所以我猜想,对于像这样的紧凑型程序,它的性能优于其他动态语言并不奇怪。

答案 1 :(得分:2)

Perl使用输出缓冲区,因此代码不会做同样的事情而你的Perl程序需要更少的系统调用。
在Perl中尝试$| = 1;来禁用输出缓冲区,或者在D中使用stringbuilder来获得更可比较的结果。

此外,D中的换行符看起来像是可以避免的运行时函数调用。要在D中获得最大性能,您可以尝试使用静态(编译时)函数并在编译时构建整个字符串。