哪种脚本语言在性能上优于 Perl、Python 和 Ruby?
到目前为止,我一直在用Perl写程序。最近我决定试试Python,发现了几个不同之处。Perl里面自带了ARGV、正则表达式等功能,而在Python中这些功能需要先导入。
我觉得这让Python在性能上有优势,因为你只加载真正需要的东西。
于是,我分别用这两种语言写了一个演示程序来测试它们的性能。
Perl
#!/usr/bin/perl
exit(1) if $ARGV[-1] ne 'test';
print "Testing...\n";
my $a = 1.0;
my $i;
for (0 .. 500) { $a+=$a/100; }
printf "Result: %.5f\n", $a;
Python
#!/usr/bin/python
from sys import argv
if argv[-1] != 'test':
exit(1)
print 'Testing...'
a = 1.0
for i in range(0, 501):
a+=a/100
print 'Result: %.5f' %a
Ruby
#!/usr/bin/ruby
if ARGV[0] != "test"
exit(1)
end
print "Testing...\n"
a = 1.0
(0..500).each do a+=a/100 end
printf "Result: %.5f", a
C
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[]) {
if (strcmp(argv[1], "test") != 0) return(1);
printf("Testing...\n");
double a = 1.0;
int i;
for (i=0; i <= 500; i++)
a+=a/100;
printf("Result: %.5f\n",a);
return 0;
}
测试结果是:
Perl
实际时间 0m0.006s
用户时间 0m0.002s
系统时间 0m0.004s
Python
实际时间 0m0.075s
用户时间 0m0.061s
系统时间 0m0.013s
Ruby
实际时间 0m0.017s
用户时间 0m0.008s
系统时间 0m0.008s
C
实际时间 0m0.003s
用户时间 0m0.001s
系统时间 0m0.002s
我的测试有没有什么问题?
我听说Python更适合大型程序(见这里)。那它会比Perl更快吗?它们的内存使用情况怎么样?
我正在写几个大型应用程序,这些程序会在我的VPS上作为守护进程运行,而我的VPS内存有限,所以我真正的目标是尽量减少内存使用。
4 个回答
不,这正是我预期这些语言在性能上的表现。
像Python和Ruby这样更彻底的面向对象语言本身就比较慢,尤其是这两种语言,因为它们是解释型的。(当然,Python可以编译,但还是比较慢)
之所以认为Python更适合大型程序,是因为在程序复杂度增加时,它更容易组织和管理。要管理大量相互关联的Perl脚本需要很大的精力,尤其是当你两周后再看时,可能根本看不懂。=o)
在大多数情况下,程序员的时间和CPU的时间同样重要。
关于你提到的性能问题,其实没有一个统一的答案,而且基准测试几乎不能证明什么,性能是个很复杂的问题,不能仅靠一次测试来判断。现代的Perl语言提供了和其他优秀语言一样多的工具,帮助你管理复杂性,非常适合写大型程序。
至于内存效率,你可以说语言X的某个实现比语言Y的某个实现更省内存。但实际上,我觉得内存的使用情况会根据你编写代码和设计的方式有很大的不同。如果你已经很熟练使用某种语言,可能更好的是继续用那种语言,同时用省下的钱去买更多的内存。每个人的情况可能都不一样。
还有,看到评论后我想说:如果不先进行性能分析就想通过换语言来减少内存使用,这种做法真是太疯狂了。
这里有几个问题...
你的测试时间不够长,可能只是测量了程序启动时的开销,而没有准确地测量到实际运行的时间。
我不在乎Perl或Python比Ruby快10倍,我想用我认为最好的语言……就是我最有动力去写的那种……我觉得可以写出优美代码的语言。
esr的文章已经很旧了,肯定没有提到Ruby。