简单编程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
为什么?
答案 0 :(得分:6)
似乎代码是99%系统调用(printf),而perl可能非常好地优化了周围的循环。我想说尝试一些更复杂的东西,不要过分依赖单一的系统调用。
此外,考虑到perl部分专注于补充/替换Unix工具箱(sed,awk),为快速启动优化perl是有意义的。所以我猜想,对于像这样的紧凑型程序,它的性能优于其他动态语言并不奇怪。
答案 1 :(得分:2)
Perl使用输出缓冲区,因此代码不会做同样的事情而你的Perl程序需要更少的系统调用。
在Perl中尝试$| = 1;
来禁用输出缓冲区,或者在D中使用stringbuilder来获得更可比较的结果。
此外,D中的换行符看起来像是可以避免的运行时函数调用。要在D中获得最大性能,您可以尝试使用静态(编译时)函数并在编译时构建整个字符串。