我应该选择F#来开发分布式服务器平台吗?

我应该选择F#来开发分布式服务器平台吗?,f#,F#,我目前正在研究一个新的分布式服务器框架,该框架将用于实时仿真(20000多个客户端)。我们已经决定使用C#/.NET作为我们的平台,但是最近有人给我发了一些关于F的文章,从表面上看,它看起来是开发服务器的一个很好的工具。我想从一个用F#来解决现实世界中的大问题的人那里得到一些想法 F#是这方面的好工具吗 陷阱是什么?我们正在处理大量的交互消息和大量不断变化的状态,尽管这可能存在于某种DB云中。函数式编程似乎在处理大规模并行和分布式计算方面大放异彩,但似乎不鼓励改变任何一种状态 F#会留下来吗?

我目前正在研究一个新的分布式服务器框架,该框架将用于实时仿真(20000多个客户端)。我们已经决定使用C#/.NET作为我们的平台,但是最近有人给我发了一些关于F的文章,从表面上看,它看起来是开发服务器的一个很好的工具。我想从一个用F#来解决现实世界中的大问题的人那里得到一些想法

  • F#是这方面的好工具吗

  • 陷阱是什么?我们正在处理大量的交互消息和大量不断变化的状态,尽管这可能存在于某种DB云中。函数式编程似乎在处理大规模并行和分布式计算方面大放异彩,但似乎不鼓励改变任何一种状态

  • F#会留下来吗?这让我担心,它太新了,我不想把自己绑在一个垂死的平台上(有人吗?)

  • 有没有使用F#的大型现实解决方案(最好是服务器)

  • F#与大型工程师团队合作良好吗?我相信答案很简单,是的,但我对语言/工具还是很不熟悉


谢谢你的时间。

< P>其他需要考虑的是找到足够的开发人员来认识一个庞大的工程师团队。因为这是一种新的语言,这可能是最困难的部分。

我将停止评论,并正式表达我的观点。我不打算讨论函数式编程、不变性、易并行性等的好处,因为这一点在其他地方已经得到了很好的阐述。即使你不知道函数式编程的第一件事,并且打算编写过程性的、面向对象的、C语言的代码,我仍然推荐F

C#

F#

我认为任何人都可以很容易地从:

foreach (var item in items) {
    //...
}
致:

大多数句法上的差异都是相似的。您可以用F语言编写C#ish代码,然后慢慢融入函数特性,一路学习。一段时间后,您不仅会知道一种新的语言,还会知道一种思考编程问题的新方法。同时,我怀疑你会更有效率。

请阅读以下内容:

这是一篇关于F#在现实世界中使用的好处和案例研究的论文(刚刚发表)。 学习了这门语言后,回到C#会有点累。
我会为这样的项目争取F#,但我可能会遇到一些阻力

其他人已经回答了大多数关于F#的问题,以及关于在F#中开发常用的面向对象系统的问题。我将添加一些关于分布式服务器端编程的具体内容

  • 在F#中,您可以使用代理(也称为
    MailboxProcessor
    )来构造程序。我在伦敦有一个办公室,所以你可以在那里找到一些有用的资源。F#中的代理不自动支持通过网络进行通信,但您可以(作为代理)实现这一点。然而,它们是构造并发应用程序和分离关注点的好方法

  • F#已经支持异步工作流——这对于编写处理大量客户端而不阻塞线程的应用程序来说是必不可少的。如果您不想等待C#5(这是从F#获得的一个特性),那么F#是编写异步代码的唯一选项

  • F#在伦敦、纽约和其他地方拥有一个活跃的社区,拥有大量用户群。有相当多的金融公司使用F#(据我所知,一些公司也在使用或考虑使用代理)。Host-tracker.com是一个用F#编写的大型服务器端应用程序(请参阅他们的)


你也会发现这篇关于哥伦布田庄保险的文章,哦,读起来不错。我遇到了一位来自格兰奇的人,他对他们用F#编写代码的决定非常满意

在过去的7个月里,我一直在F#开发一个大型的、真实世界中高度并发的服务器。我不能给你确切的细节,但这是有史以来签订的最大的咨询合同

我想从一个用F#来解决现实世界中的大问题的人那里得到一些想法。F#是这方面的好工具吗

对。我在F#开发最终商业产品方面没有问题(我做到了,而且成功了),但我们的客户通常对使用F#的快速原型印象最深。例如,我最近发现了一个内部公司文档,引用了3个月来实现C++中的一个特性,它用了F 4!p> 陷阱是什么

这种语言有一些怪癖,但我遇到的唯一主要问题(阻碍我工作数周)是Windows上对Infiniband驱动程序的支持不足,这两个问题都与F#无关。我在F#库中遇到了一些小问题(例如,
TryScan
坏了),但一旦我发现了问题所在,它们就很容易解决。F#团队一直非常善于提供支持和接受建议

另外,请注意,我是为数不多的在行业中率先使用此技术的人之一,因此我希望您遇到的问题比我少,解决问题的速度也会更快,因为我们已经为您解决了这些问题

我们正在处理大量的交互消息和大量不断变化的状态,尽管这可能存在于某种DB云中。函数式编程似乎在处理大规模并行和分布式计算方面大放异彩,但似乎不鼓励改变任何一种状态

这是一个常见的误解。实际上,几乎所有函数式编程语言(例如Lisp、Scheme、Clojure、Scala、Standard ML、OCaml、F#、Erlang)都是不纯净的,依赖于不受控制的副作用。Haskell是唯一幸存的纯函数式语言,它是完全不可恢复的
type Person(name, age) =
    member this.Name = name
    member this.Age = age
foreach (var item in items) {
    //...
}
for item in items do
    //...