【发布时间】:2009-02-20 09:11:05
【问题描述】:
对于那些正在使用 f# 的人来说,你用它编写了哪些功能领域?什么语言真正适合它?它比 c# 更强大、更容易做什么?
【问题讨论】:
标签: .net f# functional-programming
对于那些正在使用 f# 的人来说,你用它编写了哪些功能领域?什么语言真正适合它?它比 c# 更强大、更容易做什么?
【问题讨论】:
标签: .net f# functional-programming
Deep Fried Bytes #24 播客报道了这一点:
当然,对于许多系统来说,F# 可能形成一个处理核心,但在我看来,它通常会用 C#/VB 包装(接口、用户或其他)以提供常规接口。
【讨论】:
我目前正在使用 F# 来开发我的下一个独立视频游戏。到目前为止,我发现我的正常 OO 方法与我在 c# 中的开发方式不同。
我注意到的一些好处是我平均使用较小的函数,即每个函数的行数大大减少。现在对我来说,将静态私有成员函数的范围限定在另一个成员内部而不是让它暴露给对象中的所有内容也更自然。编写碰撞算法真的很容易。我现在说用 F# 编写算法更容易还为时过早,但我已经倾向于这种方式了。
自从我开始使用 F# 以来,并非一切都是玫瑰花。我仍然发现缺少在线文档。专家 F# 提供了一些帮助,但由于它略过 OO,它让我迷失了很多次。当它是目前最流行的开发形式时,作者选择不深入研究 OO,这让我很紧张。我不打算转储 OO。我希望将功能集成到其中。
到目前为止,我看到的最大优势是我的代码正确性。我知道这听起来很有趣,但每次我编译我的代码时,它都按预期工作。希望我破万行代码标记时还是这样。
【讨论】:
【讨论】:
我目前正在探索 F# 在中的用途
【讨论】:
小(ish)数据处理脚本。考虑解析长日志文件并尝试检测“奇怪”行为。活动模式和流处理使程序很好(而且速度很快)。我以前用 C# 编写这些,但它们被丢弃了 - 使用 F# 我发现自己实际上重用了以前的脚本并扩展了它们。
使用FsCheck 进行测试(好吧,我想这是作弊,因为我自己移植了这个东西......),但它非常有用(我自己对此感到惊讶;))不仅用于测试 F# 程序,但一般是 .NET 库。由于 FsCheck 是一个测试 DSL,我想我也应该加入 DSL 的行列。
很久以来我一直想将 F# 与 WPF 或 XNA 结合使用,但一直没有实现。
与某些人相反,我发现一旦您掌握了 F# 的隐式类构造语法,使用 F# 进行 OO 编程就像使用 C# 或 VB 一样令人愉快。
确实,如果你用 F# 编写一个库,除非你非常小心,否则它最终只能在理论上是可互操作的。真正可互操作的 F# 库要么需要非常小心要使用的 F# 构造,要么编写 C#/VB 包装器。
库尔特
【讨论】:
F# 几乎可以完成 C# 的所有工作,只是更简单。它的高级功能意味着您最终编写的代码要少得多。 OO 语法比其他 F# 语法更冗长,但仍然比使用 C# 更好。
我们将它用于 Web 服务、ASP.NET MVC 站点、守护进程,
问题是,在哪里不使用它。现在看来,这主要是缺乏工具支持的地方。因此,例如,对于 ASP.NET,ASPX 页面内联代码是 C#,但控制器和其他一切都在 F# 中。
F# 没有我想象的那么流畅的几个地方将在即将发布的版本中解决。
【讨论】:
以下是来自Trauma Pony 的 F# 和函数式编程的一些很好的实际用途,作为对我的similar question 的回答。
事实上,请查看此页面了解更多使用 GPGPU 的示例。
【讨论】:
我正在考虑使用 F# 进行 HTML 处理,因为列表模式匹配语法非常适合问题域(Prolog 可能更好,但仍然如此)。
【讨论】:
我目前正在为客户使用引文、linq 表达式编译、dsls、异步工作流和典型的 fp 构造。许多与 C# 的互操作。
【讨论】:
1) 模拟(蚂蚁和菌丝体)
利用异步工作流程进行大规模并行模拟很容易。
2) C# API 的单元测试
F# 使得测试简短、甜美且可读性强。此外,FsStory 也相当不错。
3) 数据分析与可视化
它具有出色的可视化库,并且可以非常快速地尝试不同的东西。我也很喜欢 VSLab,希望它很快会发布另一个版本。
4) 快速 XNA 开发
一旦您设置了一个小型框架来保持 XNA 的面向对象性,F# 开发就会更快,也更容易进行试验。
简而言之,我发现 F# 在开发速度或不变性胜过 API 正确性的任何地方都非常出色。如果有一个编译指示或编译器标志来关闭公共函数和类型定义的类型推断,我可能会推动将它用于我的 API。
【讨论】:
我正在使用 F# 为我正在设计的回合制策略游戏开发引擎。我发现 F# 的函数式编程和 OO 编程的组合让我能够以在命令式 C# 中过于复杂而无法做到的方式简洁地操作游戏中的数据。将改变状态的动作与折叠分开也是很自然的,这样就可以确定状态应该如何改变,这肯定有助于保持代码更简单和有条理。
我在项目中可能陷入的最大陷阱是对在其中一个类中大量使用的几种数据类型使用元组的类型注释。使用元组可以得到非常简洁的代码,但我不确定在使用它们的函数的签名中使用类型注释是否足以在某些情况下保持可读代码。
【讨论】:
程序分析与转换。
【讨论】:
有大量数学计算的地方。
【讨论】:
我正在使用 F# 来接收 (TCP)、解析和存储来自工业设备的二进制协议消息。目前,我正在测试异步工作流。
下一个项目是接收数据的可视化和分析。
【讨论】: