哪些JVM函数语言很好地支持IDE? (IDE:IDEA,Netbeans,Eclipse或类似)

时间:2011-07-28 09:58:27

标签: scala clojure functional-programming intellij-idea jvm-languages

我花了很多时间寻找能够无缝访问Java遗留代码(Weka代码)的函数式语言。导入的Java类方法的自动完成将非常好。 我会展示自己的印象,如果我错了,请纠正我。

Yeti 对我非常有吸引力,因为它很简单,而且 ML ,但是我无法为它设置一个好的IDE。我不知道语言本身是否已经在现实生活中使用。

Groovy JRuby Jython 似乎非常成熟,但实际上并不实用。 Scala 已经成熟,但至少在Netbeans上也是如此(如果我记得很清楚的话,那就是Eclipse)它是错误的。

OCaML-Java ”也是OO,并没有准备好使用(3个或4个单独的项目)。我想在IDE中它的使用起来就更不准备了。

Jaskell 似乎已经死了。

Clojure 似乎已经成熟并且在Intellij IDEA(La Clojure插件)中运行得非常好,但我不确定在编码时我是否希望每行编写超过2个parens。

SISC ABCL 我没试过。我认为没有IDE支持。

CAL (或Quark ...... Blah ...)语言通向SAP网站,之后我耐心地搜索功能性JVM语言。

有类似问题,但不全面。例如: Which Functional programming language offers best support in Eclipse?

是否有一些能够直接调用java类的JVM函数语言? 如果 Yeti 得到了IDE支持 Clojure (在IDEA中),那对我来说是完美的。

由于

EDIT -----------------------------------

我可以在Intellij IDEA中使用Clojure + Scala。 互操作性示例:

Scala代码

package a
class ScalaMain {
  def test = {
    "testing!"
  }
}

Clojure代码

(import '(a ScalaMain)) ;'
(def scalainstance (new ScalaMain))
(print "printing: " (. scalainstance test))

壮观!

4 个答案:

答案 0 :(得分:9)

Scala + eclipse IDE(最新版本)http://www.scala-ide.org/似乎越来越好了。 IntellijIDEA插件也是如此。现在有很多人/公司正在使用Scala进行开发......我认为他们不仅仅使用文本编辑器。

我认为目前大多数FP语言都是Scala(多范式)和Clojure(纯功能)Scala是OO有什么问题?

你可以期待像Kotlin和Ceylon这样的新语言也具有功能特性,但它们也将是OO,所以我认为你现在唯一的选择是在Scala和Clojure之间。

从您的列表中您错过了Fantom语言。它还具有功能特性,但我认为它缺乏IDE支持(或至少它没有更新到最新版本)

更新:现在有一个基于eclipse的用于Fantom编程语言的IDE看起来非常好。您可以在此处找到它:http://www.xored.com/products/f4/

答案 1 :(得分:4)

Clojure在java互操作性和功能性方面非常出色,并且具有lisp的优势。尽管其他IDE支持clojure,但emacs的效果非常好,只需要花时间学习并习惯emacs的编码方式。

答案 2 :(得分:2)

Clojure的互操作故事非常精彩。 clojure的一个主要胜利是它的集合都实现了Java集合API中的接口,只要Java代码没有,你就不必调整Clojure集合或将它们复制到Java集合中以将它们传递给Java代码。修改他们的内容。反过来也是如此,Java集合可以与许多有用的Clojure函数一起使用,例如map reduce filter等...我知道有人为了Clojure而抛弃了Scala理由等等。

在Clojure中编写Java互操作代码也比在等效的Java代码中使用更少的parens也很容易。

e.g。

blondie.callMe().callMe().any().any().time();

(-> blondie .callMe .callMe .any .any .time)

需要一些时间来适应,但如果你考虑一下,它并不是真的那么不同。比较以下Java代码行。 Clojure,我想你们两个都会理解。

System.out.println("Hello World");

(println "Hello World")

在Java示例中对System.out的限定和附加的分号进行折扣,唯一真正的区别是paren现在位于函数调用的前面。疯狂的谈话!

它有所不同,但它可能没有您想象的那么糟糕,如果您尝试一下,您可能会在语言中找到令人信服的好处。如果您需要IDE支持,请查看IntelliJ中的LaClojure或Netbeans的Enclojure。我知道Enclojure提供了很好的完成支持,我认为如果你处理大量的Java,它实际上大多只有用。在Clojure中没有网络的表现很好。

答案 3 :(得分:1)

弗雷格现在还有一个(仍然是非常基本的)eclipse plugin