如何使用F#(sharp)?

时间:2009-05-29 20:42:51

标签: .net f#

我无法放置微软推出的F#语言的概念和可能性。

F#仅用于声明功能吗?或者通过将F#与普通的C#或VB代码混合在一起,将应用程序“完全”写入F#中?

8 个答案:

答案 0 :(得分:35)

我强烈建议你观看来自PDC 2008的Luca Bolognese的演讲。这不仅非常有趣,而且还展示了令人印象深刻的F#用例:

  Luca Bolognese的

An Introduction to Microsoft F#

答案 1 :(得分:23)

我的期望是F#将用于某些专业系统的 - 涉及复杂线程/数学/财务/建模/等的位,其中F#表现良好。对于大多数其他领域(UI,DAL等),像C#这样的通用语言似乎(IMO)更受欢迎。

F#的一个优点是(理论上)你可以证明代码正在运行,而不仅仅是测试它。线程支持(由于不变性和异步!使用)也很好(尽管PLINQ可能在线程上竞争)。

连接到.NET以允许F#,C#,VB,IronPython,IronRuby等之间的正确集成 - 真正展示了每个的优势。 今天如果我做了很多COM互操作,我会考虑VB(用dynamic改变4.0;);对于大多数代码 - C#。对于数学等,F#。整齐。

答案 2 :(得分:8)

我已经使用它半年了,我认为它将成为一种通用语言。学习起来相当复杂,因此怀疑它在混合环境中会被过多使用。经理们希望将成本降至最低。

  • 对我而言,重构速度是F#的最大卖点。用它构建了一个简单的video game,我已经爱上了语言结构。起初,处理状态引擎的想法在函数式语言中似乎不合适,但是记录,元组和类型推断使得它变得非常快速。

  • F#具有良好的可读性。一旦熟悉了F#,如果你允许混合使用多范式编程风格,代码就变得非常简洁易读,但是像所有语言一样,不知道自己在做什么的人会把它变成一场噩梦。

我的日常工作涉及网络原型设计,所以我期待看到FSharp.WebTools的去向,并期待Microsoft MVC对F#的更多支持。

答案 3 :(得分:6)

我在以下方面使用F#:

DLL和库。几乎我在空闲时间编写的所有新代码都是F#,当我需要快速GUI时,我只能使用C#。

<强> Multitherading 即可。在工作中,我一直在慢慢介绍F#。我有机会通过使用异步工作流和邮箱处理器将一些丑陋的单线程VB.NET移动到多线程F#来演示它能做些什么。

DSL和解析。在我上一家公司,我使用FsLex / FsYacc来parse SQL into an AST。原型代码的变体使其成为this tutorial

<强>脚本即可。我完全&lt; 3脚本.fsx文件。它们是一种编写小脚本的便捷方式,无需编写完整的可执行文件。它也很好修改源代码并再次运行它没有停机时间。我已经修改了.fsx文件的默认行为来运行fsi,而不是在双击时在VS中打开。

答案 4 :(得分:3)

当然,用F#编写整个程序是可行的。但是,我认为大多数程序都不会这样。 F#最有可能用于复杂的算法和应用程序逻辑(程序的核心),而C#可能会用于“外部”(GUI等)。 .NET是必然结构化的,所以在你大量使用库的地方,C#可能比F#更“自然”。

答案 5 :(得分:3)

您的问题意味着所有代码最终都会成为一个应用程序。

虽然情况不一定如此,但F#的优势之一(比如说C#),就是你可以“分解”你最喜欢的IDE并运行一些代码,而不需要所有的解决方案/项目/ class infrastructure。

对于数字运算测试结果,转换数据,测试出一种新算法(即使我最终在'应用程序'中用C#编码),对日志文件进行排序,甚至创建一个小实用程序来告诉我有多少我的C#引用实际上是在给定的程序集中使用,如果我决定进一步使用它,F#很漂亮,快速且可快速“扩展”到dll。

答案 6 :(得分:2)

根据具体情况,您可以考虑两者。

您可以使用F#构建完整的.NET应用程序或将其连接到其他.NET语言。它可以使用和向其他.NET语言公开库。

答案 7 :(得分:1)

  

F#仅用于声明功能吗?或者通过将F#与普通的C#或VB代码混合在一起,将应用程序“完全”写入F#中?

我们用F#编写了整个应用程序超过3年。许多公司正在用F#扩充现有的代码库。

F#的最简单的切入点就是运送F#样本,展示了如何使用F#来销售您所销售的库的API。对于任何公司来说,这都是明智之举,因为样品不是关键任务,因此技术专业知识和持续维护不是问题。 F#也是一个很好的工具,可以用任何.NET语言编写现有代码的测试工具。同样,客户永远不会获得该代码,因此其公司外部的可靠性不是问题。在实践中,我们没有任何问题,在任何地方使用F#并将其运送给客户,而他们甚至不知道。这对小公司来说特别有效,因为大规模的生产力改进为我们带来了巨大的竞争优势。