小编典典

在哪些领域使用 F# 可能比 C# 更合适?

all

在过去的几年里,F# 已经发展成为微软完全支持的语言之一,它采用了许多在 OCaml、ML 和 Haskell 中孵化的想法。

在过去的几年里,C# 通过引入越来越多的函数式语言特性扩展了它的通用特性:LINQ(列表理解)、Lambda、闭包、匿名委托等等......

鉴于 C# 采用了这些功能特性,并且 F#
的分类法作为一种不纯的函数式语言(它允许您访问框架库或在调用函数时更改共享状态),这两种语言之间有很强的相似性,尽管每种语言都有自己的特点自己的极性相反的主要重点。

我对在您的多语言生产程序中使用这两种语言的任何成功模型以及您在过去一年左右用 F# 编写的生产软件中的区域(Web
应用程序、客户端应用程序、服务器应用程序)感兴趣用 C# 编写。


阅读 64

收藏
2022-06-20

共1个答案

小编典典

我写了一份申请,以平衡发电站组合的国家发电计划与能源公司的交易头寸。客户端和服务器组件是用 C# 编写的,但计算引擎是用 F# 编写的。

使用 F# 解决此应用程序核心的复杂性清楚地表明了企业软件中语言的最佳点,即大型数据集的算法复杂分析。我的经历是非常积极的。尤其是:

计量单位
我工作的行业到处都是单位。我实现的方程(通常是几何性质的)处理时间、功率和能量的单位。让类型系统验证函数输入和输出单元的正确性可以节省大量时间,无论是在测试还是阅读/理解代码方面。它消除了以前系统容易出现的一整类错误。

探索性编程 使用脚本文件和 REPL (F# Interactive)
让我能够在提交实现之前更有效地探索解决方案空间,而不是更传统的编辑/编译/运行/测试循环。对于程序员来说,这是一种非常自然的方式来建立他们对问题和设计张力的理解。

单元测试 使用非副作用函数和不可变数据结构编写的代码是一种测试的乐趣。没有复杂的依赖于时间的交互来搞砸事情或模拟大量的依赖关系。

互操作 我在 C# 中定义了计算引擎的接口,并在 F# 中实现了计算。然后可以将计算引擎注入到任何需要使用它的 C#
模块中,而无需担心互操作性。无缝的。C# 程序员永远不需要知道。

代码缩减 输入计算引擎的大部分数据都是向量和矩阵的形式。高阶函数用最少的代码和最少的代码吃这些早餐。美丽的。

缺少错误
函数式编程可能会让人感到奇怪。我可以研究一种算法,努力让代码通过类型检查器,但是一旦类型检查器满意,就可以了。它几乎是二进制的,要么无法编译,要么正确。奇怪的边缘情况错误被最小化,递归和高阶函数删除了许多引入边缘情况错误的簿记代码。

并行 性最终实现的功能纯度使得在处理数据向量中利用内在并行性变得成熟。既然 .NET 4 出来了,也许这就是我接下来要去的地方。

2022-06-20