私はDが初めてで、単純なテストでJavaと比較しており、ネイティブ言語の方が高速である(またはほぼ同じ)ことを期待しています。しかし、再帰Dを使用した最初のテストでは、Javaよりも驚くほど遅いです(ほぼ2倍)。
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 64 ビット、JDK: 1.7.0_10 x64。
D:
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。
私は何を間違っていますか?ありがとう!