JVM上的Haskell?

85

我想知道是否有一种方法可以使Haskell在JVM上运行(编译或解释)?

虽然Sourceforge上存在JHaskell,但这个项目似乎已经荒废了。

GHC使用LLVM作为编译器后端。将LLVM编译成Java字节码是一个好主意或可能吗?或者也许可以使用不同的编译器后端?


4
还有关于 haskell-cafe 上的整个讨论串 - Josh Lee
3
尾调用优化仍然是一个未解决的问题。这就是为什么像Clojure这样的其他函数式JVM语言需要特殊的结构(recur)的原因。 - jeha
14
@jeha说:噢,TCO很容易实现。Seph、Erjang、Kawa和其他基于JVM的Scheme实现都能实现它。JVM有异常, 它们基本上与GOTO相同,可用于实现TCO。或者您可以使用跳板(trampolines)。或者根本不使用JVM调用栈,而是自己实现。Clojure和Scala仅提供有限的TCO(基本上只优化尾递归),原因是它们想要利用JVM调用栈来实现互操作性和性能。正如Clojure设计师Rich Hickey所说的那样:互操作性、速度、TCO--选择其中两个。 - Jörg W Mittag
3
如果您不考虑性能,只关注Haskell语言所需的内容,那么将Haskell编译到JVM上应该并不困难。像Jorg提到的那样使用跳板函数,它们很容易实现。使用最简单的数据结构来完成任务,不要费心优化。我相信如果有人真的关心这个问题,他可以在一周内独立地编写出一个可工作且完整的实现。 - Thomas Eding
显示剩余6条评论
4个回答

84

您可能想要研究一下Frege。引用该页面的话:

"Frege是一个非严格的,纯函数式编程语言,与Haskell类似。"

"Frege程序编译为Java并在JVM中运行。"

通过简要浏览语言规范,Frege看起来几乎是Haskell的克隆版。也许“与Haskell类似”这个说法只是为了设定正确的期望。


2
看起来他们稍微更新了页面 - 现在它写着“Frege是JVM上的Haskell。”在我看来,这是一个更强有力的声明。 - Michael Anderson

29

Haskell 在 JVM 上表现优异。可查看Eta项目,该项目将完整的 GHC 7.10.3 Haskell 引入 JVM,并支持类型安全的 Java 交互。


12

我知道的 JVM 中最接近 Haskell 的语言是 CAL。CAL 严重基于 Haskell,但它没有所有 Haskell 的功能。类型系统类似于 Haskell 98,并且像 do 符号这样的语法糖缺失。

这里是 Haskell 和 CAL 的比较:面向 Haskell 程序员的 CAL

Eclipse 插件非常精细和有用。

请注意,CAL 是 Open Quark 框架的一部分。


实际上,我正在寻找“真正的东西”。我无法评判CAL。但是CAL似乎有类型类。第一印象确实非常类似Haskell。 - jeha
CAL确实有类型类 - 它非常接近于Haskell 98,减少了相当多的语法糖。 - tgdavies
感谢tgdavies提供的额外信息,我本人不是CAL程序员。 - islon
最近几天我一直在尝试获取Haskell程序员文档的CAL。您提供的链接似乎也没有帮助。请问有人可以发布一个有效的PDF链接吗? - Ingo
@Ingo:这个用户指南的链接应该可以用,但可能不是最新的: http://resources.businessobjects.com/labs/cal/cal_users_guide.pdf - jeha

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接