将会有一种对Java社区起作用的功能语言,而F#对.NET社区起作用吗?

问题描述 投票:22回答:10

将有一种对Java社区起作用的功能语言,而F#对.NET社区起作用吗?

哪些功能编程语言可用于JVM或正在开发中?

functional-programming jvm
10个回答
17
投票

也许Clojure。它不是静态类型,但比F#更加强调不变性和并发性。但是,像F#(和Common Lisp不同)一样,它旨在成为一种主要的功能语言,擅长从底层平台使用OO库。


0
投票
我将https://eta-lang.org添加到建议中-基本上是JVM的Haskell。我认为这个问题与F#是ML语言而Clojure是LISP的方言这一事实​​相吻合。

44
投票

Scala将是语言。

尽管不是严格的功能(它是功能性和面向对象的混合,并且不是严格地针对Java(有.NET version of Scala),但它与JVM中的F#最接近。


20
投票

我想到的第一件事是Scala,但实际上Ocaml-Java越来越近,因为F#是Ocaml的变体。参见this post that compares Ocaml-Java to Scala

OCaml程序员的生产率通常是Java或C ++的10倍以上程序员执行各种实际任务。尽管基于从根本上讲,它是OOP平台,F#可以大大提高生产力-提高OCaml(以及整个ML系列)的优势。相反,Scala无法获得许多好处,包括一些真正的基本好处,并且因此,在Scala中编写正确的代码比在Scala中编写困难得多。任何真实的ML。

此外,ML语言系列旨在简洁,但Scala是对于“ Hello world!”中的所有内容,都不必要地冗长向上。 ML系列的语言提供了广泛的类型推断(比大多数OCaml还要多),但是相比之下,Scala仅具有基本的推断。 OCaml有一个异常表达类型系统,但Scala对OOP几乎没有增加实用性重要性。


3
投票

现在我要说斯卡拉。但是对于未来,我将看看Fortress。该规范的第一个实施版本于2008年4月1日发布。不,这不是在开玩笑。主要特征是:

  • 静态类型,但是要避免混乱的类型推断很多
  • Unicode和2d数学函数渲染
  • 专为并行执行而设计(针对每个默认值)
  • 对自定义库的大力支持(Guy Steele的影响)
  • 运算符重载,包括并置运算符

Project Fortress Community websiteWikipedia Fortress page处的更多信息。


2
投票

可以说没有,因为JVM缺少尾部调用,并且要求它们使几乎所有功能代码在堆栈消耗方面都健壮。

与JVM上的功能语言实现最接近的是ClojureScalaOCaml-Java项目。尽管有一些针对缺少尾部调用的解决方法(例如,蹦床),但是这些语言实现中都没有这样做,因为解决方法会带来更严重的问题,例如严重的性能和完全模糊的调试。

Sun多年来一直在谈论尾调用,最近,它们表明他们打算立即实施它们。一旦确定,我相信我们将在JVM上看到更多的语言多样性,尤其是一些生产质量的功能语言实现。在此之前,我将所有这些语言都视为玩具。

干杯,乔恩·哈罗普。


2
投票

关于JVM的编程语言有很多,其中包括函数式编程范例和其他范例语言:

  • en.wikipedia.org/wiki/List_of_JVM_languages

[我的首选是Scala(多范式; OO和FP),我在2009年花了5个月的时间研究Scala,并创建了一个快速参考表:bchiprog.blogspot.com/2009/05/scala-cheat-sheet .html

我注意到还有其他有趣的编程范例,其他重点是并行处理,例如X10,Fortress和Chapel。 X10在Scala之上实现-http://www.scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf

这实际上取决于您需要解决的问题,然后选择最能解决问题的语言。我认为开发人员希望有一种语言可以轻松解决任何类型的问题并轻松解决。


1
投票

@@ Marc Gravell-在企业级金融系统中,越来越多地使用功能语言。我们在我工作的银行使用许多功能(纯或“半纯”)...


1
投票

同时,有一种Frege,这是一种基于Haskell精神的纯功能性非严格语言,可以编译为Java,然后根据环境(命令行或eclipse)使用javac或eclipse编译器对其进行进一步编译)。


0
投票

实际上,我可能是错的,但是我不希望F#像其他.NET语言一样成为主流。在一些领域(学术界,编译器,其他一些情况)很有用-但是,请不要忘记C#提供FP用法-并且每次都会变得更好:C#1.2有委托; C#2.0具有匿名方法和捕获/关闭。 C#3.0具有用于简化的lambda和用于抽象的Expression。匿名类型(C#3.0)与元组具有相似性(就方便性而言),但显然它们是非常不同的野兽,因此绝对不是同类比较。也许不像F#那样优化,但是对于大多数日常FP用例来说,绰绰有余。

显然,C#语言团队在很大程度上考虑了对不变性(尤其是线程)的更好支持,以供将来考虑。

[我的钱用于C#,从而使FP变得更好,并且成为大多数日常用途的.NET FP产品。当然,会有一些F#用法-但(完全是主观的)我根本看不到会有很大的迁移。

© www.soinside.com 2019 - 2024. All rights reserved.