Performance 为什么perl比d语言快?

Performance 为什么perl比d语言快?,performance,perl,Performance,Perl,简单地编写hello world程序(下面是D和perl的代码)在perl(解释语言)中比在D(编译语言)中更快。为什么? 为什么?代码似乎是99%的系统调用(printf),perl可能会很好地优化周围的循环。我要说的是,尝试一些更复杂的东西,它不太依赖于单个系统调用 此外,考虑到perl部分关注于补充/替换Unix工具箱(sed、awk),对perl进行快速启动优化也是有意义的。因此,对于像这样的紧凑型程序,它的性能要比其他动态语言好,我想这并不奇怪。Perl使用了一个输出缓冲区,因此代码没

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


为什么?

代码似乎是99%的系统调用(printf),perl可能会很好地优化周围的循环。我要说的是,尝试一些更复杂的东西,它不太依赖于单个系统调用


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

Perl使用了一个输出缓冲区,因此代码没有做同样的事情,并且Perl程序需要更少的系统调用。
试试
$|=1禁用输出缓冲区,或使用D中的stringbuilder获得更具可比较性的结果


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

我认为,这个问题更适合堆栈溢出,所以我将其标记。但以防万一——代码是99%的系统调用(printf),perl可能会很好地优化周围的循环。我要说的是,尝试一些更复杂的东西,而不是过于依赖于单个系统调用。@Eduardo这就是答案。请注意,在Perl中,源代码是在运行时编译的,因此可以比严格解释的语言更快地执行。千万不要试图与Hello World程序这样的琐碎程序进行任何性能比较。结果永远不会有意义。我记得很多年前看到类似的东西“证明”Forth比纯汇编语言更快。正如Eduardo所说,D并没有得到很好的优化,尤其是在编译器方面。“LDC已经编译了大量的D代码,但仍应被视为*beta*质量。”(摘自(强调部分添加))。我的猜测是,由于Eduardo所说的系统调用,同样的D代码在C中(当然使用stdio.h)和经过优化编译后的性能只比perl稍好一些;D可能正在做一些与Java类似的事情,并将
a
b
的串联视为
新的StringBuffer(“a”).append(“b”).toString()
(而Perl中的一个只是抛出一堆字节,因为
\n
在编译时被解析)。
//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