创建的F#语言是什么?

Edw*_*ard 54 .net f#

我注意到越来越多的资源用于使用F#编程语言开发应用程序,并且想到了创建F#语言的问题.它是针对特定平台制作的,例如桌面,移动设备,Web应用程序吗?它还包括目前可用于开发.NET应用程序的其他编程语言中没有的功能吗?还可以使用F#为桌面,移动设备和Web创建应用程序,因为我们可以使用VB或C#吗?还有其他类似于F#的语言我可以用来交叉检查以更好地理解函数式编程的工作原理吗?

pet*_*ebu 74

创建的F#语言是什么?

F#研究项目试图在.Net平台上创建运行OCaml语言的变体.剑桥MSR剑桥公司的一个相关项目也为标准ML做了同样的工作.(OCaml和标准ML都是ML语言的变体.)这可能包括的动机

  1. 显示它可以做到.
  2. 发表显示它的科学论文可以完成.
  3. 因为ML非常酷.

这不应让您分心,因为F#产品是.Net平台的通用编程语言.F#的好处扩展到所有域.可能会有更快速采用F#的用户 - 经常提到科学和金融编程 - 但真正的原因是因为这些组织更容易采用新技术(小团队,聪明人,少数管理人员).

它是针对特定平台制作的,例如桌面,移动设备,Web应用程序吗?

没有.

它还包括目前可用于开发.NET应用程序的其他编程语言中没有的功能吗?

是.他们包括:

  • 代数数据类型
  • 模式匹配
  • 类型推断
  • 简洁的语法
  • 序列表达式
  • 异步工作流程
  • 计量单位

还可以使用F#为桌面,移动设备和Web创建应用程序,因为我们可以使用VB或C#吗?

是的,但VS2010中的工具不完整.特别是,任何涉及代码生成的内容都不受支持,例如WPF代码隐藏和Winforms设计器.这在实践中可能不是问题.例如,带MVVM的WPF工作得相当好.

还有其他类似于F#的语言我可以用来交叉检查以更好地理解函数式编程的工作原理吗?

是.看看这些:

  • 标准ML
  • OCaml的
  • 哈斯克尔
  • Clojure的

[编辑:在VS2010中添加了关于工具的评论.]

  • 在过去几年中对C#进行了改进之后,此答案需要更新。 (3认同)

Mar*_*ade 13

创建F#是为了将函数式编程语言引入.NET.

它不适用于任何特定平台.根据微软研究院的说法,它"在面向数据的编程,并行I/O编程,并行CPU编程,脚本和算法开发方面具有特殊的优势".F#特别用于金融和科学应用.

C#是为Microsoft创建的,它具有现代的C语言,因为它们被限制扩展Java以利用Windows.它被设计为面向组件的语言,并不以任何方式专门用于Web.

F#主要是一种函数式语言,而C#和VB主要是面向对象的.

也可以看看:

  • @loyalpenguin,大多数F#的好处与其功能性质没有直接关系.它是一种支持类型推断,代数数据类型和模式匹配的语言.你根本无法与C#相提并论.例如,F#中的编译器比C#中的类似实现短10倍且更易于阅读. (5认同)

Edw*_*ard 6

我找到了一些触及我的问题的资源:

什么以及为什么选择 F#?

F# 将如何使用?

使用 F# 的九个理由

为什么要使用 F#?

什么时候在 C# 或 VB.NET 上使用 F# 有意义

从表面上看,在尝试确定使用特定语言时,通常没有明确的答案。尽管我之前从未使用过一些示例中的函数式编程,但它非常有用。在开发 .NET 应用程序时,这似乎是另一个不错的选择。


Jam*_*ack 5

当试图利用函数式编程的思想,比如对不变性的关注,以及由此产生的优化,包括使用尾端递归,你会发现可以提高代码的可读性,改进可维护性。

但是,通过使用诸如 F# 之类的语言,可以更轻松地进行面向语言的编程 ( http://en.wikipedia.org/wiki/Language-orientation_programming ),因为您创建了特定领域的语言,因此,例如,您可以为化学家编写一种小型语言,让他们使用他们熟悉的术语来编写方程式或对分子进行建模,然后程序可以对其进行解析并对预期行为做出反应。

由于 C# 是面向对象的,因此很难让语言如此简单易用,因为在 F# 中,您可以跳过“.”。在方法调用中,Jacob buys 100 shares of IBM因为一系列的函数调用。

由于某些构造(例如前面提到的不变性),并发性更简单,因此,我们在 F# 中看到的某些功能可能有助于改进 C#。

因此,F# 帮助 MS 进入科学编程和建模等领域,因为在这些方面它比 C# 更好,因为该语言具有这些和其他好处。

但是,您也可以使用 .NET 程序集,如果您的代码编写得很好,您可以在 F# 中完成数学密集型部分,并让 C# 或 VB.NET 调用您的函数,因此我们可以为每个任务使用最好的语言。

更新:

在阅读了一些新评论后,一个成为问题的领域是如何编写利用多核 CPU 的好代码。因此,函数式编程变得越来越流行,如 F#、Scala、Clojure 所见,仅举几例,因此 MS 进入此领域是为了帮助程序员更好地利用新的芯片架构。

  • @Mark Cidade - 我试图解释 F# 可能的 DSL,而 C# 不可能,因为在 C# 中,您需要执行 Jacob.buys(100, "IBM"),例如。 (2认同)