我刚刚对Scala,Java和C进行了比较。以下是我运行的代码和我得到的结果:
Java(原始数据类型):
class test {
public static void main(String args[]) {
long t1=System.nanoTime();
for (int i=0; i<1000000000; i++) {
}
long t2 = System.nanoTime();
System.out.println((t2-t1));
}
}
输出:1181601584
C:
#include <stdio.h>
#include <time.h>
int main() {
clock_t t1=clock();
for (int i=0; i<1000000000; i++) {
}
clock_t t2= clock();
printf("%u",(t2-t1)/(double)CLOCKS_PER_SEC);
return 0;
}
输出:2233382994
的Scala:
object test {
def main(args: Array[String]) {
val nos = 1 to 1000000000
val t1 = System.nanoTime
for (i<-nos) {
}
val t2 = System.nanoTime
println(t2-t1)
}
}
输出:12392282270
Java(盒装):
class test {
public static void main(String args[]) {
Long t1=System.nanoTime();
for (Integer i=0; i<1000000000; i++) {
}
Long t2 = System.nanoTime();
System.out.println((t2-t1));
}
}
输出:20756681957
现在,我的问题是,如果原始的东西比装箱的反零件更快,我们为什么要选择使用面向对象的语言?我同意以面向对象的方式编写大型项目要容易得多,但如果效率和速度是我们所寻求的(就像在服务器和超级计算机中一样,而且我认为更快的软件对于家庭用户来说更好) ,为什么世界上的任何人都试图在Scala中编写他的代码?更深层次的问题甚至是为什么这些慢速语言出现了?
答案 0 :(得分:5)
选择语言的主要因素并非总是(甚至极少)表现。你会在这两者中选择哪一个:
您是否真的认为最终用户关心响应时间是2还是20毫秒?那些时间太短,以至于无法区分。但是,与2天的开发相比,30天的开发是巨大的。每天1000美元,这是非常不同的。
此外,您的基准存在缺陷。
此外,您不使用OOP来使用Integer而不是int。您可以使用OOP以更直观的方式操作由多个字段和方法组成的复杂对象。
答案 1 :(得分:1)
几乎没有实用的基准。有可能你的C和Java编译器立即优化了空循环,而在Scala中它并不那么容易,因为循环的Scala版本涉及方法调用,必须首先检查效果。
答案 2 :(得分:1)
因为有时候,大多数时候,紧密循环的速度通常是你问题中最少的。