我用C,Perl和Python编写了一个简单的程序,该程序将变量递增到10亿。我没想到不同语言之间不会有太大的区别,但是很惊讶地看到巨大的区别。这些程序仅计10亿个:
在c:
int main() {
int c = 0;
while (c < 1000000000) {
c++;
}
}
在Perl中:
#! /usr/bin/env perl
use strict;
use warnings;
my $x = 0;
while ($x < 1000000000) {
$x++;
}
在Python中:
#!/usr/bin/env python
i = 0
while i < 1000000000:
i += 1
使用zsh / bash时间函数的运行时间为:
对于c:1.78s用户0.01s系统98%cpu 1.813总计
对于perl:29.86s用户0.13s系统99%cpu 30.205总计
对于Python:71.96s用户0.32s系统98%cpu比例1:13.16
我很难相信c比perl快15倍,比Python快35倍。对于这样一个简单的程序,这似乎很疯狂吗?为什么差异很大?
由于perl变量是无类型的(并且实际上可以在执行过程中更改其有效类型),因此对它们的每个操作(例如
而且,perl并不将算术运算的结果限制为int。相反,它会动态更新变量的类型,例如从有符号的int到无符号的int到两倍,以最好地保留结果的值和准确性。
这意味着perl必须为一个简单的补充:与C相比,编译器知道两个arg都是有符号整数,并且不关心结果是否溢出;并且可以将加法映射到单个CPU加法指令