是否有一种函数式语言可以为Java社区提供F#为.NET社区所做的工作?
JVM可用或正在开发哪些函数式编程语言?
答案 0 :(得分:43)
Scala将成为该语言。
虽然没有严格的功能(它是功能和面向对象的混合),但它并不严格用于Java(有一个.NET version of Scala),这将是JVM中与F#最接近的模拟。
答案 1 :(得分:20)
我想到的第一件事是 Scala ,但实际上 Ocaml-Java 更接近,因为F#是Ocaml的变体。见this post that compares Ocaml-Java to Scala:
OCaml程序员的工作效率通常是Java或C ++的10倍 程序员可以完成各种实际任务。尽管是基于 从根本上说是OOP平台,F#在很大程度上抓住了生产力 - 提升OCaml(以及整个ML系列)的好处。相比之下,斯卡拉 未能获得许多好处,包括一些非常基本的好处, 因此,在Scala中编写正确的代码要比在 任何真正的ML。
此外,ML系列语言的设计简洁,但Scala是 来自“Hello world!”的所有内容都不必要地冗长!向上。 ML家族 语言提供了广泛的类型推断(OCaml比大多数),但 相比之下,Scala只有初步的推论。 OCaml有一个不寻常的 富有表现力的类型系统,但Scala对实际的OOP几乎没有什么作用 重要性。
答案 2 :(得分:18)
也许是Clojure。它不是静态类型的,但它比F#更强调不变性和并发性。但是,就像F#(和Common Lisp不同)一样,它本来是一种主要功能性语言,擅长从底层平台消费OO库。
答案 3 :(得分:3)
现在我想说Scala。但是对于未来,我会看看Fortress。该规范的第一个实现于2008年4月1日发布。不,这不是一个笑话。关键的特点是:
Project Fortress Community website和Wikipedia Fortress page的更多信息。
答案 4 :(得分:2)
可以说没有,因为JVM缺少尾调用,并且它们需要使几乎所有功能代码在堆栈消耗方面都很健壮。
JVM上最接近函数式语言实现的是Clojure,Scala和OCaml-Java项目。虽然缺少尾调用(例如蹦床)有变通方法,但这些语言实现都没有这样做,因为变通方法引入了更严重的问题,例如:严重破坏性能并完全混淆调试。
Sun多年来一直在谈论尾部呼叫,最近,他们表示他们打算立即实施它们。一旦完成,我相信我们将在JVM上看到更多的语言多样性,特别是一些生产质量的功能语言实现。在那之前,我认为所有这些语言都是玩具。
干杯, Jon Harrop。
答案 5 :(得分:2)
有一个很好的JVM编程语言列表,包括函数式编程范例和其他范例语言:
我的第一个选择是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
它真正基于您需要解决的问题,然后选择最能解决问题的语言。我认为开发人员希望有一种语言能够轻松解决任何类型的问题,并且可以简单地完成。
答案 6 :(得分:1)
@Marc Gravell - 功能语言越来越多地用于企业级金融系统的内部。我们在我工作的银行使用了许多功能(纯粹或“半纯粹”)......
答案 7 :(得分:1)
同时,有Frege,一种纯粹的功能性,非严格的语言,在Haskell的精神中编译为Java,然后根据环境进一步使用javac或eclipse编译器进行编译(命令 - 线或日食。)
答案 8 :(得分: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#用法 - 但(纯粹是主观的)我根本看不到有大量的迁移。
答案 9 :(得分:0)
我会在建议中添加https://eta-lang.org-从根本上来说,它是JVM的Haskell。我认为这个问题与F#是ML语言而Clojure是LISP的方言这一事实相符。