F# - 领域特定语言

时间:2008-10-14 03:50:32

标签: .net f#

F#是编程语言的未来吗?是时候学习F#了吗?市场上任何其他语言都相当于F#?

10 个答案:

答案 0 :(得分:6)

F#是一种通用的,面向对象的功能语言,并没有专门针对特定领域语言设计的语言,尽管您可以轻松地在F#中创建DSL。

如果你真的有兴趣学习类似F#的东西,那么现在是时候了。如果你想学习一门新语言以增加你被聘用的机会,那么如果你还不熟悉函数式编程,那么F#可能不是一个好的选择。您可能需要尝试 JavaScript Python Ruby C#并使用匿名函数。

如果你想坚持使用接近F#的东西, ML 语言系列中有任何东西,特别是 OCaml Haskell 是一种纯函数式语言,因为没有副作用(Haskell的 monads 除外)。还有 Lisp 系列,Nemerle和其他几个系列。

答案 1 :(得分:5)

我说现在是时间,上周我向fsbugs发了一个问题,答案是在the man之后的几个小时内回来的。

现在尝试使用c#...

答案 2 :(得分:2)

嗯,知道另一种编程语言,以及另一种看待事物的方式永远不会伤害。

由于F#现在不稳定,作为一种尚未正式发布的语言,它可能不是最佳时间;但是,我现在还在学习它。

答案 3 :(得分:2)

功能语言已存在很长时间了,但是缺乏实用的生态系统使它们与除了非常专业的业务开发人员之外的所有人相关(例如,可以的主要投资银行过去能够在复杂算法的函数式编程中投入一些资源)。

微软的努力与众不同,不仅仅是F#语言的纯粹性,而是它作为主要编程平台(.NET)的一等公民的计划首次亮相,而且可能是非常低的摩擦采用程序员会遇到他/她将其添加到他/她现有的基础设施

在.NET中,人们已经可以在单个解决方案中从C#项目(或反之亦然)引用VB项目。但由于C#或VB的中间语言几乎完全相同 1 ,.NET程序员现在更喜欢使用一种语言(C#或VB)并与那些来自该语言的程序员进行讨论。其他(几乎完全相同的)黑暗面。

另一方面,F#将引入一种截然不同的语言工具。因此,您将能够在您喜欢的.NET环境(C#或VB)中继续编程,但是当出现一个独特的功能子项目时,您将能够在F#中编写该子项目,同时仍然使用所有现有的C#/ VB资产。

至于未来,许多人认为这不是一刀切的语言,而是降低了为子项目/任务选择正确工具的摩擦。

就产品发布而言,微软已声明它致力于将F#作为.NET系列的一部分提供,但目前仅发布了几个CTP(尚未发布beta版状态),所以我想说现在不急于放弃一切来学习F#。 (当我看到测试版时再次问我。)



1 VB 2008中的XML文字可能是最明显的VB与C#差异。

答案 4 :(得分:2)

F#和功能编程是未来。但是,已经存在的面向对象语言,过程语言和声明性语言的丰富内容也是如此。在任何意义上,支撑这两者的概念都不是新的。凭借强大的运行时集成,多语言(多语言(语言) - 语言)系统的未来看起来很光明,这可能是改变景观的一种趋势。

是的,这是学习F#的绝佳时机,社区小而充满活力和丰富,平台正在成熟(不要忘记F#是2002年开始的),很快将成为Visual Studio的一部分。

至于其他语言,据说F#从Ocml中大量借用,在一定程度上可以通过一些摆弄在两者之间交叉编译代码。 F#还借用了Haskell的序列表达式和工作流(mondas)。 Scala是同一个利基中另一种有趣的语言。功能性构造也正在将它们变成“传统”语言,如C#3.0,C ++(现在任何时候都可以获得lambda)。 Python有很好的库来编写功能代码。 Linq和PLinq本质上是功能性/可能性的。

Lisp是整个事情的祖父,也非常自鸣得意!

答案 5 :(得分:1)

F#不是编程语言的未来。实际上它深深植根于过去。然而,这是一项很好的学习技术,因为它很可能代表了一种完全不同的编程思维方式,而不是你可能习惯的方式。

此外,除了动态类型之外,函数式编程也是为了更好地包含在下一版本的c#语言中的概念之一。

但是,出去学习!

答案 6 :(得分:1)

重新开始“未来” - FP只是盒子里的另一个工具;有时FP解决方案非常有用,有时它不是那么多。但请记住,C#在每次迭代时都在功能方面变得越来越好[虽然它不太可能提供F#的一些非常具体的FP方面,例如有区别的联合等]。

同样,C#团队已经讨论了更容易的不变性,所以让我们为未来的C#版本保持交叉。并且还要记住,并行扩展/并行LINQ将许多FP“杀手级功能”直接带入每种.NET语言。

就个人而言,我非常怀疑它[F#]会气球,我们都会突然转向F#;对于大多数以业务为中心的目标,C#仍然更有意义IMO,特别是如果设计用于可测试性(您可以用任何语言编写错误的代码......)。

但如果你处于FP有意义的领域之一,并且你正在使用.NET,那么F#绝对值得调查。

答案 7 :(得分:0)

由于F#基本上是“.Net的功能编程”,因此有许多类似的(可能更成熟的语言),例如:

  • Scala:JVM上的函数编程。
  • Haskell:使用本机代码进行功能编程(或至少是一个准系统运行时)。

答案 8 :(得分:0)

如果您想进行功能编程,请转到Common LISP。它是跨平台的,非常稳定,并且已经存在了很长时间。它也是LISP家族的一部分;最着名的功能语言之一。

答案 9 :(得分:0)

我很惊讶Clojure在本次讨论中未被提及。