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

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

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

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

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

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

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

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

不久前在stackoverflow上有这个问题,它可以帮助你找出F#可能更快的一些原因。 性能增益在很大程度上取决于您使用的应用程序和编码function。

您可能对F#和C#中的性能相关function一文感兴趣。 至于“为何使用F#”,我不能代表你说话,但对我自己而言,我使用F#因为我更喜欢它。

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

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

没有理由切换,但我建议组件符合最佳标准。 F#强制执行很多标准,在开发过程中简单地进行实时测试,并解决可变性,循环依赖性以及大多数类型检查/空引用的问题。 另一方面,C#拥有大多数开发人员和工具,并且可以开发时考虑到function模式,但并不总是正确的。 我是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#。

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