我注意到越来越多的资源用于使用F#编程语言开发应用程序,并且想到了创建F#语言的问题。它是针对特定平台制作的,例如桌面,移动设备,Web应用程序吗?它还包括目前可用于开发.NET应用程序的其他编程语言中没有的功能吗?还可以使用F#为桌面,移动设备和Web创建应用程序,因为我们可以使用VB或C#吗?还有其他类似于F#的语言我可以用来交叉检查以更好地理解函数式编程的工作原理吗?
答案 0 :(得分:69)
创建的F#语言是什么? 完成?
F#研究项目试图在.Net平台上创建运行OCaml语言的变体。剑桥MSR剑桥公司的一个相关项目也为标准ML做了同样的工作。 (OCaml和标准ML都是ML语言的变体。)其动机可能包括
这不应让您分心,因为F#产品是.Net平台的通用编程语言。 F#的好处扩展到所有域。可能会有更快速采用F#的用户 - 经常提到科学和金融编程 - 但真正的原因是因为这些组织更容易采用新技术(小团队,聪明人,少数管理人员)。
是针对特定平台制作的 示例桌面,移动设备,Web 应用
没有
它也包括功能 可用于其他编程 目前可用的语言 用于开发.NET应用程序?
是。它们包括:
还可以创建 桌面,移动, 和使用F#的web,因为我们可以使用VB或 C#?
是的,但VS2010中的工具不完整。特别是,涉及代码生成的任何事情都不能很好地支持,例如WPF代码隐藏和Winforms设计器。这在实践中可能不是问题。例如,带MVVM的WPF工作得相当好。
还有其他类似的语言 到F#我可以用来交叉检查 反对以获得更好的理解 函数式编程如何工作?
是。看看这些:
[编辑:在VS2010中添加了关于工具的评论。]
答案 1 :(得分:12)
创建F#是为了将函数式编程语言引入.NET。
它不适用于任何特定平台。根据{{3}},它“在面向数据的编程,并行I / O编程,并行CPU编程,脚本和算法开发方面具有特殊的优势”。 F#特别用于金融和科学应用。
C#是为Microsoft创建的,因为它们被限制扩展Java以利用Windows,因此它具有现代的类C语言。它被设计为面向组件的语言,并不以任何方式专门用于Web。
F#主要是一种函数式语言,而C#和VB主要是面向对象的。
另见:
答案 2 :(得分:4)
我找到了一些涉及我问题的资源:
When does it make sense to use F# over C# or VB.NET
从看起来似乎没有明确的答案,通常在尝试确定使用特定语言时。虽然我以前从未使用过函数式编程,但我从一些例子中看到它可能非常有用。在开发.NET应用程序时,这似乎是另一个很好的选择。
答案 3 :(得分:3)
当试图利用函数式编程的思想,例如关注不变性以及可能来自此的优化(包括使用尾端递归)时,您会发现可以提高代码的可读性,提高可维护性。
但是,通过使用F#等语言可以更轻松地进行面向语言的编程(http://en.wikipedia.org/wiki/Language-oriented_programming),因为您创建了特定于域的语言,因此,例如,您可以编写一个小语言化学家,他们使用他们熟悉的术语来编写方程式,或模拟分子,程序可以解析它并对预期的行为作出反应。
因为C#是面向对象的,所以使语言使用起来变得更加困难,因为在F#中你可以跳过'。'在方法调用中,所以Jacob buys 100 shares of IBM
因为一系列函数调用。
由于某些结构(例如前面提到的不变性),并发性更简单,因此,我们在F#中看到的一些功能可能有助于改进C#。
因此,F#帮助MS进入科学编程和建模等领域,因为这些优于C#,因为语言的这些和其他好处。
但是,您也可以使用.NET程序集,如果您编写好代码,可以在F#中执行数学密集型部分并让C#或VB.NET调用您的函数,这样我们就可以使用最好的语言每项任务。
<强>更新强>
在阅读了一些新评论之后,一个已成为问题的领域是如何编写利用多核CPU的优秀代码。因此,功能编程变得越来越流行,正如F#,Scala,Clojure所看到的那样,只有少数几个,所以MS进入这个以帮助程序员更好地利用新的芯片架构。
答案 4 :(得分:2)
如果您通过Don Syme观看this video,也许您会得到一些您正在寻找的答案。
<强>更新强> 观看视频之后,他似乎创造了它,因为当时(1998年)他不喜欢Java或他看到的C#,但喜欢像OCaml这样的函数式编程。自从他为MS研究工作后,他写了F#。
我认为针对cli(A#,ronPython,IronRuby等)的许多语言都很相似。