F#和C#的CLR相同,那么为什么F#比C#快?

时间:2011-01-31 23:21:38

标签: c# f# clr

我很困惑,如果你开导我会很感激。 F#使用与C#相同的CLR,底层代码是相同的,那么当用F#编写函数时,如何建议函数运行速度比C#快?如果我只在C#中使用不可变变量并且性能需要尽可能高,那么为什么要使用F#?

7 个答案:

答案 0 :(得分:14)

底层代码是一样的吗? 疑。一般来说,F#在某些方面会更快,而在其他方面会更慢。 C#也是如此。甚至是VB。每种语言都有其优点。如果在大多数领域中存在整体性能,则它在编译器中。

如果我只在C#中使用不可变变量并且性能需要尽可能高,那么为什么要使用F#? 没有理由单独切换性能,如果事实上存在真正的差异,除非性能是你的问题。至于为什么切换,如果你只使用C#中的功能,我会说“不要切换”。

我喜欢F#。它解决的一些“问题”比C#好得多。但是,即使我有一个问题,它解决得更好,我不一定要切换,因为我必须考虑混合中的开发人员。目前,我知道这个组织中很少有人对F#有所了解,所以我必须做一个好的商业案例才能转换。

最终,您必须查看“业务问题”并确定路径。您必须将“更好”的语言视为组合的一部分,但您还必须检查核心能力等。

答案 1 :(得分:10)

1)如果你编写的C#代码和F#代码被编译成完全相同的IL(CLR的中间语言),那么代码将表现出相同的性能特征。但是,在C#和F#中实现相同的算法并不能保证生成完全相同的IL,因此实际性能可能会有所不同。我相信在实践中,有时F#代码会更快,但有时候C#会更快。

2)除了性能之外,选择实现语言的原因有很多。例如,对于某些问题域,有些人发现F#比C#更简洁,可读,更容易推理,这是偏好它的一个原因。对于绝大多数程序而言,用户几乎看不到5%或10%的性能差异,因此如果一种语言提供大致相当的性能但提高了生产力,那么使用该语言是有意义的。

答案 2 :(得分:6)

前一段时间有关于stackoverflow的this问题,它可能会帮助您找出F#可能更快的一些原因。性能增益在很大程度上取决于您使用的应用程序和编码功能。

答案 3 :(得分:6)

您可能对文章Performance-Related Features in F# and C#感兴趣。至于“为何使用F#”我不能代表你说话,但对我自己而言,我使用F#是因为我更喜欢它。

答案 4 :(得分:3)

使用一种语言编写的代码可能有多种原因比使用另一种语言编写的代码更快,即使它们使用相同的运行时库也是如此。但是,.NET运行时库不是唯一涉及的运行时库。据我了解,有一个相当大的F#运行时库可以执行F#特定的操作。 F#编译器知道该库。 C#编译器没有。因此,F#编译器可以调用C#编译器无法访问的高度优化的运行时库代码。

如果他们都使用相同的运行时库集,那么我希望程序接近相同,但不完全相同。各个编译器可以为特定结构生成或多或少的最佳代码。

答案 5 :(得分:1)

没有理由切换,但我建议组件符合最佳标准。 F#强制执行很多标准,在开发过程中简单地进行实时测试,并解决可变性,循环依赖性以及大多数类型检查/空引用的问题。另一方面,C#拥有大多数开发人员和工具,并且可以开发时考虑到功能模式,但并不总是正确的。我是C#粉丝,几乎总是选择C#,但我很多时候看到F#是我最需要构建更清晰健壮的代码。我想,我个人更愿意尽可能地融合这两种语言,但是如上所述,与你的开发团队也可以维护和审查的内容相比更重要。在许多情况下,开发团队将反对它,但在某些情况下,他们会为此而努力,因为他们不仅希望使代码库尽可能强大而且还要学习新东西。如果你确定F#是最好的,那就不要浪费太多时间来决定正确的语言,提出它并看看你是否已达成共识以便以这种方式完成它。 保持项目分离,即使它们在同一个解决方案中,并在最佳工作时使用F#,在最佳工作时使用C#。 F#并不难学,但对于一个纯粹的命令式开发者来说,它起初可能看起来很丑陋和令人困惑。只是解释一下,我认为它会滚动。考虑F#的时间将在算法中,您不仅需要性能而且需要立即测试结果。这加快了开发时间和运行时间,赢得了胜利。如果模型由许多不可变值组成,则其他可能是模型。 F#适用于所有领域,但对我来说,在C#以及ViewModels之类的东西中,UI方面更容易完成,其中逻辑略有不同,但这是一种观点。你会从两者的甜蜜组合中获得的收益感到惊讶。此外,使用linq,lambda和更新的C#语法,函数式编程变得越来越容易,其中C#基本上看起来很有用,所以你使用F#的音​​调可能不像几年前那么强硬。
我没有覆盖任何东西,但你明白了...... F#很强大,当它最好用时使用它,C#也一样。我从VB.NET开始,但不会再推荐它了,因为像.NET Core这样的新技术并不支持它。然而,有时使用它也有好处......虽然远远低于F#的好处。在这方面,我只是坚持两个初选C#,F#。

答案 6 :(得分:0)

答案不是速度或资源BC的性能几乎相同。一些有争议的增强和缺点...... F#的原因是开发和部署时间。 F#更加简化,并且渴望使用更安全的代码进行构建。不易出错且更准确,无需担心循环计数器和类型检查,交叉线程等简单事物。因此,它不仅更容易,更快速地编写,而且更少的错误。你可以获得更多你真正想要的东西,而不必担心这些小事。这意味着更少的测试和更多的实时部署,更可靠的代码和更精确的功能,不会带来不必要的开销。因此,最重要的结果是更快的编写代码,本质上优化的性能,以及更少信任和更少错误。