您使用f#的代码区域是什么?

时间:2009-02-20 09:11:05

标签: .net f# functional-programming

对于那些使用f#的人,您使用它编写哪些功能区域?什么是非常适合的语言,它与c#相比具有更强大和更轻松的功能?

15 个答案:

答案 0 :(得分:5)

Deep Fried Bytes #24播客涵盖了这个:

  • 算法处理(包括计算)
  • DSL创建
  • 并发处理(不可变数据,消息队列,异步工作流)

当然,对于许多系统来说,F#可能会形成一个处理核心,但在我看来,它通常用C#/ VB包装(接口,用户或其他方式)来提供传统接口。

答案 1 :(得分:5)

解析FParsec(Haskell的Parsec精神中的端口)

答案 2 :(得分:5)

我目前正在使用F#来开发我的下一个独立视频游戏。到目前为止,我发现我的正常OO方法与我在c#中的开发方式不同。

我注意到的一些好事是我平均使用较小的函数,即每个函数的行数减少了。现在,将静态私有成员函数作为另一个成员的范围而不是让它暴露给对象中的所有内容,对我来说也更自然。编写碰撞算法非常简单。对我来说,用F#编写算法比较容易,但是我已经倾向于这样了。

自从我开始使用F#以来,并非一切都是玫瑰。我仍然没有找到在线文档。专家F#已经有所帮助,但由于它超过了OO,它让我失去了很多次。令我感到紧张的是,当作为目前最流行的开发形式时,作者选择不深入OO。我不打算转储OO。我正在寻求将功能集成到其中。

到目前为止,我看到的最大优势是我的代码正确性。我知道这听起来很有趣,但每次我编写代码时,它都按预期工作。我希望在打破一万行代码时仍然会出现这种情况。

答案 3 :(得分:3)

  1. 科学作品(数学和数学) 统计计算, 可视化,优化,..)
  2. 并行编程(F#支持 异步工作流,Erlang风格 并发,Parallel FX,......)
  3. 面向语言的编程(例如。 的DSL)
  4. 数据密集型分析
  5. ...

答案 4 :(得分:3)

我目前正在探索

中F#的用法
  • SOA
  • 并行执行
  • 数据密集
  • 长时间运行的流程

答案 5 :(得分:3)

小(ish)数据处理脚本。考虑解析长日志文件并尝试检测“奇怪”行为。活动模式和流处理可以实现漂亮(和快速)的程序。我过去常常在C#中编写这些文件,但它们是丢失的 - 使用F#我实际上发现自己重复使用以前的脚本并扩展它们。

使用FsCheck进行测试(好吧,我猜这是在我自己移植东西时作弊...),但它非常有用(我实际上对此感到惊讶;))不仅用于测试F#程序,但一般是.NET库。由于FsCheck是一个测试DSL,我想我也应该加入DSL的潮流。

我一直想在WPF或XNA上使用F#,但是还没有完成它。

与一些人相反,我发现一旦你掌握了F#的隐式类构造语法,使用F#的OO编程就像使用C#或VB一样令人愉快。

确实如果你用F#编写一个库,除非你非常小心,否则它最终只能在理论上实现互操作。真正可互操作的F#库要么非常小心要使用F#构造,要么编写C#/ VB包装器。

库尔特

答案 6 :(得分:2)

F#几乎可以做所有C#,只是更容易。它的高级功能意味着您最终编写的代码更少。 OO语法比其他F#语法更冗长,但它仍然比使用C#更好。

我们将它用于Web服务,ASP.NET MVC站点,守护进程,

问题是,何处不使用它。现在看起来主要是缺乏工具支持的地方。因此,例如,使用ASP.NET,ASPX页面内联代码是C#,但控制器和其他所有内容都在F#中。

F#不如我想象的那么顺利的几个地方将在即将发布的版本中得到解决。

答案 7 :(得分:2)

以下是来自Trauma Pony的F#和函数式编程的一些很好的实际用法,作为我similar question的答案。

  • 计算流体动力学
  • 物理处理
  • 光线追踪
  • 数据挖掘
  • 医学影像
  • 控制工程软件
  • 数字信号处理
  • 生物信息学

事实上,请查看此页面以获取更多使用GPGPU的示例。

答案 8 :(得分:1)

我正在考虑使用F#进行HTML处理,因为列表模式匹配语法很适合问题域(Prolog可能更好,但仍然如此)。

答案 9 :(得分:1)

1)模拟(蚂蚁和菌丝体)

利用异步工作流程轻松实现大规模并行仿真很容易。

2)C#API的单元测试

F#可用于简短,甜蜜且易读的测试。此外,FsStory非常好。

3)数据分析和可视化

它有很棒的可视化库,尝试不同的东西非常快。我也很喜欢VSLab,希望很快就能看到另一个版本。

4)快速XNA开发

一旦设置了一个小框架来保持XNA的面向对象性,F#开发速度更快,也更容易实验。

简而言之,我发现F#在任何开发速度或不变性都胜过API正确性方面都很棒。如果有一个编译指示或编译器标志来关闭公共函数和类型定义的类型推断,我可能会推动将它用于我的API。

答案 10 :(得分:1)

我正在使用引用,linq表达式编译,dsls,异步工作流以及目前客户端的典型fp构造。很多与C#的互操作。

答案 11 :(得分:1)

我正在使用F#为我正在玩设计的回合制策略游戏开发引擎。我发现F#的功能和OO编程的混合使我能够简洁地操纵游戏中的数据,这种方式在命令式C#中太复杂了。将状态改变的动作与折叠分开并确定状态应该如何改变也是很自然的,这肯定有助于保持代码更简单和有条理。

我可能在项目中遇到的最大陷阱是使用元组的类型注释来处理在其中一个类中非常密集使用的几种数据类型。使用元组可以生成非常简洁的代码,但是我不确定在使用它们的函数的签名中使用类型注释是否足以在某些情况下维护可读代码。

答案 12 :(得分:1)

计划分析和转型。

答案 13 :(得分:0)

有大量数学计算的地方。

答案 14 :(得分:0)

我使用F#接收(TCP),解析和存储来自工业设备的二进制协议消息。目前,我正在测试异步工作流程。

下一个项目是接收数据的可视化和分析。