什么是f#尾部调用?为什么它比c#有性能提升?

本文关键字:性能 为什么 尾部 调用 什么 | 更新日期: 2023-09-27 18:10:04

本文阐述了f#性能有时优于c#的一些原因。它在"first"一节中说,只有f#生成尾部调用。

这到底是什么意思?为什么它能提高性能?对于我的象棋应用来说,这可能决定了我是选择f#还是c#,因为它使用了大量的递归。

性能将更多地取决于您实现程序的方式而不是语言。对于某些事情,f#可能会更好地生成IL,而c#编译器则会更好地处理其他事情。在选择语言时,你应该考虑其他因素,而不仅仅是性能。

如果你正在编写国际象棋程序来学习f#,那就试一试吧,它是一门很棒的语言,只是不要因为你使用的是函数式语言就期望你能写出超级快的程序。


编辑回答新问题:

f#编译器确实生成了具有tail. op代码的IL,而c#编译器没有。这本身并不能使f#比c#更快或性能更好,正如你在上面我的原始答案中看到的那样,但确实可以在你的特定象棋应用中产生差异,因为你说递归被大量使用。

作为旁注,CLR可能会在运行时生成一些更简单的尾部调用优化,因此对于x64环境中的更简单的函数,即使是c#编译器生成的IL也可能具有尾部调用优化。

什么是f#尾部调用?为什么它比c#有性能提升?