This article说明了一些原因F#的表现偶尔比C#好。它在其中说#"首先"只有F#生成尾调用的部分。
究竟是什么意思?为什么它会提升性能呢?对于我的国际象棋应用来说,这一件事实际上可能在F#和C#之间建立或断开,它使用了大量的递归。
答案 0 :(得分:2)
性能将更多地取决于您实现程序的方式而不是语言。对于某些事情,F#可能会更好地生成IL,而对于其他人来说,C#编译器会更好。在选择语言时,您应该考虑其他事情,而不仅仅是表现。
如果您正在编写国际象棋程序来学习F#,请尝试一下,它是一种非常棒的语言,只是因为您正在使用而不期待超级快速的程序一种功能语言。
编辑以回答新问题:
F#编译器确实生成了具有tail.
操作码的IL,而C#编译器并没有这样做。这本身并不能使F#比C#更快或更具性能,正如你在上面的原始答案中所看到的那样,但确实可以在你的特定国际象棋应用程序中有所作为,因为你说的是大量使用了递归。 / p>
作为旁注,CLR可以在运行时生成一些更简单的尾调用优化,因此对于x64环境中的更简单的函数,即使是由C#编译器生成的IL也可能具有尾调用优化。