per*_*lit 7 c ruby python perl
到现在为止,我一直在用Perl编写程序.我决定试试python并注意到一些差异.虽然perl内置了ARGV,regex等,但这些必须在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;
Run Code Online (Sandbox Code Playgroud)
蟒蛇
#!/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
Run Code Online (Sandbox Code Playgroud)
红宝石
#!/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
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
Perl
实际0m0.006s
用户0m0.002s
sys 0m0.004s
蟒蛇
实际0m0.075s
用户0m0.061s
sys 0m0.013s
红宝石
实际0m0.017s
用户0m0.008s
sys 0m0.008s
C
实际0m0.003s
用户0m0.001s
sys 0m0.002s
我的测试在某种程度上有缺陷吗?
我已经读过python更适合大型程序(见这里).那么它会超越perl吗?他们的内存使用情况如何?
我正在编写一些大型应用程序作为守护进程在我的VPS上运行,它具有有限的RAM,所以我的真正目标是最小化内存使用.
有几个问题......
您的测试没有累积足够的运行时间,您可能主要测试解释器的启动开销,甚至不能非常准确地测量.
我不在乎Perl或Python是否比Ruby快10倍,我想使用我认为最好的语言...我最有动力写的那个......我认为它可以写出漂亮的代码.
这篇文章很老,当然不包括Ruby.
不,这就是我期望看到这些语言的相对性能的地方。
更彻底的面向对象语言,如 Python 和 Ruby,本质上速度较慢,尤其是这两种语言,因为它们是解释性的。(好的python可以编译,但是还是慢)
Python 被认为更适合大型程序的原因是,随着复杂性的增加,它更容易组织。要保持大量相互关联的 Perl 脚本的可管理性需要非常严格。尤其是当两周后你还无法阅读它们时。=o)
在大多数情况下,程序员的时间与 CPU 时间一样重要。