Haskell在JVM上?


83

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

Sourceforge上存在JHaskell,但是这个似乎空无一人。

GHC使用LLVM作为编译器后端。将LLVM编译为Java字节码是一个好主意还是可能?还是使用其他编译器后端?


24

4
和haskell-cafe上的整个线程
乔什·李

3
尾调用优化似乎仍然是一个未解决的问题。这就是为什么其他功能性jvm语言(例如Clojure)需要特殊的构造(recur)的原因。
jeha 2011年

13
@jeha:不,TCO很简单。Seph做到了,Erjang做到了,Kawa和JVM上的所有其他Scheme实现都做到了。JVM具有Exception,与基本上相同GOTO,可以用于实现TCO。或者您使用蹦床。或者,您根本不使用JVM调用堆栈,而只是实现自己的。Clojure和Scala仅提供有限的TCO(基本上,仅优化尾部递归)的原因是因为它们出于互操作性和性能的原因希望使用JVM调用堆栈。就像Rich Hickey一样,Clojure的设计师说:互操作性,速度,总体拥有成本-选择两个。
约尔格W¯¯米塔格

3
我无法想象,如果您根本不关心性能,而只关注Haskell语言的需求,那么很难将Haskell编译为JVM。如Jorg所述,使用蹦床。它们易于实现。使用完成任务的最简单的数据结构。不要烦恼优化。我敢肯定,如果有人真正关心的话,他可以在一周之内自己破解一个可以正常工作的实施方案。
Thomas Eding

Answers:


80

您可能需要调查Frege。从该页面引用:

“弗雷格(Frege)是一种遵循Haskell精神的非严格的纯函数式编程语言。”

“ Frege程序被编译为Java,并在JVM中运行。”

根据对语言规范的简短阅读,Frege看起来几乎是Haskell的克隆。也许“以Haskell的精神”一词很简单,旨在设定适当的期望。


1
看起来他们已经稍微更新了页面-现在显示为“ Frege是JVM的Haskell”。国际海事组织的这一主张要强得多。
Michael Anderson

23

Haskell在JVM上运行良好。请参阅Eta,该项目通过类型安全的Java互操作将完整的GHC 7.10.3 Haskell带入JVM。


12

我知道在JVM中与haskell接近的唯一语言是CAL。CAL很大程度上基于haskell,但它并不具有haskell的所有功能。类型系统类似于Haskell 98,并且do缺少类似符号的语法糖。

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

eclipse插件非常精致和有用。

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


实际上,我正在寻找“真正的”。我无法判断CAL。但是CAL似乎有类型类btw。第一印象确实非常草草。
jeha 2011年

CAL确实有类型类-它非常接近Haskell 98,减去相当多的语法糖。
tgdavies 2011年

感谢额外信息tgdavies,我不是一个程序员CAL自己
islon

几天以来,我尝试获取Hakell程序员的CAL文档。您提供的链接似乎也无济于事。有人可以将工作链接发布到pdf吗?
Ingo

@Ingo:此指向用户指南的链接应该可用,但可能不是最新的:resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.