我是 D 的新手,我在简单的测试中将它与 Java 进行比较,并期望看到本机语言会更快(或大致相同)。但在我第一次使用递归 D 的测试中,它比 Java 慢(几乎两倍)。
Java(这是一个糟糕的 Java 性能测试,但它只是简单的想法):
public static void main(String... args) {
long before = System.nanoTime();
System.out.println(fibonacci(40));
System.out.println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - before));
}
static int fibonacci(int n) {
if (n < 2) {
return n;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
环境:Win7 64bit,JDK:1.7.0_10 x64。
丁:
import std.stdio;
import std.datetime;
void main(string[] args)
{
auto r = benchmark!(simplebench)(1);
writefln("%s", r[0].to!("msecs", int));
}
void simplebench() {
writeln(fibonacci(40));
}
int fibonacci(int n) {
if (n < 2) {
return n;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
环境:Win7 64bit,dmd 2.061,编译器选项:-noboundscheck -inline -O -release
Java ~570ms 和 D ~1011ms。
我究竟做错了什么?谢谢!