一位朋友给我发了一份最新版本的 Delphi 和 Java 之间的比较(如果需要,可以使用源代码)。信不信由你(最好相信它)Java 现在比 Delphi 快得多,因为 Delphi 编译器不会利用现代 CPU 指令!“慢”Java 的重大突破。
我的问题是:我们如何在 Delphi 中使用现代 CPU 指令而不使用 ASM?
FastCode项目是上述问题的部分答案,但现在已被放弃。还有其他类似 FastCode 的项目吗?
这是另一篇文章,显示Java 和 C# 确实比 Delphi 快得多: http ://webandlife.blogspot.com/2011/12/c-performance-vs-delphi-performance.html
JAVA
import java.util.Date;
public class j
{
public static void xxx(int n, int m)
{
double t;
int i, j;
double d, r;
t = 0.0;
for (j = 1; j <= n; j++)
{
t = t / 1000.0;
for (i = 1; i <= m; i++)
{
t = t + i / 999999.0;
d = t * t + i;
r = (t + d) / (200000.0 * (i + 1));
t = t - r;
}
}
System.out.println(t);
}
public static void main(String [] args)
{
Date t1, t2;
t1 = new Date();
xxx(1, 999999999);
t2 = new Date();
System.out.println((t2.getTime() - t1.getTime())/1000);
t1 = new Date();
xxx(1, 999999999);
t2 = new Date();
System.out.println((t2.getTime() - t1.getTime())/1000);
}
}
25 秒
德尔福
program d;
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.DateUtils;
var
t1, t2: TDateTime;
procedure xxx (n: integer; m: integer);
var
t: double;
i, j: integer;
d, r: double;
begin
t:= 0.0;
for j:= 1 to n do
begin
t:= t / 1000.0;
for i:= 1 to m do
begin
t:= t + i / 999999.0;
d:= t * t + i;
r:= (t + d) / (200000.0 * (i + 1));
t:= t - r;
end;
end;
writeln(t);
end;
begin
t1:= Now;
xxx(1, 999999999);
t2:= Now;
writeln(SecondsBetween(t2,t1));
t1:= Now;
xxx(1, 999999999);
t2:= Now;
writeln(SecondsBetween(t2,t1));
end.
37 秒
似乎 Delphi 仍处于链的底部:http ://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
我想知道从这个角度来看,Lazarus 如何与 Delphi 进行比较。