-3

我刚刚对 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
,即 1.2 秒



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
,即 2.2 秒



斯卡拉:

    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
,即 12.4 秒



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
,即 20.8 秒

现在,我的问题是,如果原始的东西比盒装的对应物更快,我们为什么要选择使用面向对象的语言?我同意面向对象编写大型项目要容易得多,但如果效率和速度是我们所寻找的(就像在服务器和超级计算机中一样,而且我认为更快的软件对家庭用户来说更好) ,为什么世界上会有人尝试用 Scala 编写他的代码?一个更深层次的问题是,为什么会出现这些慢速语言?

4

3 回答 3

5

选择语言的主要因素并不总是(甚至极少)性能。你会在这两者之间选择哪一个:

  1. 语言 A 允许在 30 天内创建一个程序。每次用户交互的响应时间为 2 毫秒
  2. 语言 B 允许在 2 天内创建相同的程序。但是每次用户交互的响应时间是 20 毫秒。

你真的认为最终用户关心响应时间是 2 毫秒还是 20 毫秒?这些时间太小了,无法区分。但是与 2 天的开发相比,30 天的开发是巨大的。每天1000美元,这有很大的不同。

此外,您的基准测试存在缺陷。

而且,您不能使用 OOP 来使用 Integer 而不是 int。您使用 OOP 能够以更直观的方式操作由多个字段和方法组成的复杂对象。

于 2013-03-03T10:56:33.127 回答
1

几乎不是一个有用的基准。很有可能您的 C 和 Java 编译器会立即优化空循环,而在 Scala 中却不是那么容易,因为循环的 Scala 版本涉及方法调用,必须首先检查效果。

于 2013-03-03T11:15:46.357 回答
1

因为有时,通常,大多数时候,紧循环的速度是您最不关心的问题。

于 2013-03-03T11:57:52.913 回答