问题 F#中哪些容易在C#中很难? [重复]


可能重复:
在哪些方面,F#的使用比C#更合适? 

我期待在本地的.Net用户组上发表一篇关于F#的演讲。而且我期待着“我为什么要调查F#?”来自观众的问题。我知道在F#中可以完成的大部分工作也可以在C#中完成 - 所以我正在寻找可以在F#中轻松完成的事情,这在C#中很难做到(例如模式匹配)。如果这个问题已经有了很好的答案,请在评论中将它们联系起来,我会把它关闭起来。我确实看到了一些东西,但如果已经有一个问题解决了这个问题,我就找不到了。

顺便说一句,如果任何主持人想要标记这个社区维基,请随意;无论如何,这似乎更像是一个调查问题。


9899
2018-04-28 13:42


起源

我很想投票结束这个,因为它听起来很主观和/或有争议。但我不是百分百肯定的。 - Bobby
(只是旁注:很多次我看到这个问题比较好的F#和坏的C#,即没有使用合适的C#设备;我不是说没有差异 - 但要注意这个问题;还要注意C#5(异步CTP)如何通过continuation等改进C#的线程处理能力 - Marc Gravell♦
投票重新开始。我会用通用应用程序域回答所谓的重复问题(例如“大量并发服务器应用程序”或“程序生成的GUI”),而我会用特定的代码示例回答这个问题(例如,一些实现状态机的相互递归的异步工作流程)一种优雅的方式,依赖于尾部调用消除,或者一个解析器编写为一组相互递归的活动模式,或一个简单的并发程序,使用一个消息传递 MailboxProcessor)。 - Jon Harrop
永恒!这是C#的巨大痛苦。这是一个简单但又痛苦的例子: stackoverflow.com/questions/5172510/... - Daniel
我认为有很多问题已经涵盖了这一主题。只需查看高度投票的F#问题列表: stackoverflow.com/questions/tagged/... - Tomas Petricek


答案:


其中一个主要概念是F#中的asyncrounus调用,F#也使用不可变变量,因此并发很容易。

看到 http://research.microsoft.com/apps/pubs/default.aspx?id=147194http://research.microsoft.com/apps/pubs/default.aspx?id=79947 和别的 唐赛姆 文章。可能还有其他差异,但我认为在这里收集它们只是做功课。


4
2018-04-28 13:48



特别是 异步 F#中的功能是生产级质量,而C#(和VB.NET)的Asnyc功能仍处于CTP阶段。 - Heinzi
并且尾部调用消除使得异步在F#中更加优雅。 - Jon Harrop


由于F#是一种函数式语言,因此在其中实现特定于域的语言应该要容易得多。


5
2018-04-28 13:48





我会说

  • 异步编程。
  • 计量单位

3
2018-04-28 13:50



度量单位很好,但它很像Java泛型(擦除),意思是没有反射,没有在程序集之外使用。 - Robert Jeppesen