编程语言EF速度测试(3):fannkuch

这是一个专门的编程语言/编译器速度测试/对比网站(http://shootout.alioth.debian.org/)给出的题目,

以下是EF源代码:

//fannkuch
public final class 启动类 <作者 = "liigo">
{
	public static main()
	{
		int n = 11;
		int time = 运行环境.取启动时间();
		控制台.输出("Pfannkuchen(", n, ") = ", fannkuch(n), "\n");
		控制台.输出行("time(ms): ", 运行环境.取启动时间() - time);
		控制台.输入文本();
	}

	static int fannkuch(int n)
	{
		int[] perm = new int[n];
		int[] perm1 = new int[n];
		int[] count = new int[n];
		int flips;
		int flipsMax;
		int r;
		int i;
		int k;
		int didpr;
		int n1 = n - 1;

		if( n < 1 ) return 0;

		for(i=0; i<n; i++) perm1[i] = i;
		/* initial (trivial) permu */
		r = n;
		didpr = 0;
		flipsMax = 0;
		for(;;)
		{
			if( didpr < 30 )
			{
				for( i=0;i<n;i++ ) 控制台.输出(1+perm1[i]);
				控制台.输出行("");
				didpr++;
			}
			for(;r!=1;r--)
			{
				count[r-1] = r;
			}
			if(!(perm1[0]==0 || perm1[n1]==n1) )
			{
				flips = 0;
				for( i=1;i<n;i++ )
				{
					perm[i] = perm1[i];
				}
				k = perm1[0];

				/* cache perm[0] in k */
				do
				{
					/* k!=0 ==> k>0 */
					int j;
					for( {i=1; j=k-1;}; i<j; {i++; j--;} )
					{
						int t_mp = perm[i];
						perm[i] = perm[j];
						perm[j] = t_mp;
					}
					flips++;
					/* * Now exchange k (caching perm[0]) and perm[k] */
					j=perm[k];
					perm[k]=k;
					k=j;
				}
				while(k != 0);
				if( flipsMax < flips )
				{
					flipsMax = flips;
				}
			}
			for(;;)
			{
				if( r == n )
				{
					return flipsMax;
				}
				/* rotate down perm[0..r] by one */
				int perm0 = perm1[0];
				i = 0;
				while( i < r )
				{
					k = i+1;
					perm1[i] = perm1[k];
					i = k;
				}
				perm1[r] = perm0;

				count[r] -= 1;
				if( count[r] > 0 )
				{
					break;
				}
				r++;
			}
		}
	}
}

这个EF程序,在我的机器上,运行耗时约37 秒。相应的VC6最佳优化后运行耗时约5.8 秒。

其它编程语言/编译器的表现,请看这里:http://shootout.alioth.debian.org/gp4/benchmark.php?test=fannkuch&lang=all

总的来说,EF表现不坏。比不少编程语言(如C++, JAVA, C#, D, Fortran, Pascal)慢很多,又比另外不少编程语言(如Erlang, Python, Ruby, Perl, PHP, Lua, Groovy, SmallTalk, JavaScript)快很多。

进一步分析的话:EF作为编译型语言,通常比其它编译型语言都慢(毕竟EF编译器尚未优化),最多慢7倍;EF通常比解释型语言都要快,往往快数倍、数十倍,以至上百倍。

还有很多测试题目,有时间再继续。想了解EF语言,请到EF官方博客:http://blog.csdn.net/efdev/

你可能感兴趣的:(编程,erlang,Debian,D语言,pascal)