JVM上のHaskell?


83

HaskellをJVMで実行する(コンパイルまたはインタープリター)方法があるかどうか疑問に思っていますか?

SourceforgeにはJHaskellがありますが、これは空で死んでいるようです。

GHCはコンパイラのバックエンドとしてLLVMを使用します。LLVMをJavaバイトコードにコンパイルするのは良い考えですか、それとも可能ですか?または、別のコンパイラバックエンドを使用しますか?



4
そして、haskell-cafeのこのスレッド全体
Josh Lee

3
末尾呼び出しの最適化はまだ未解決の問題のようです。そのため、Clojureのような他の機能的なjvm言語には特別な構造(recur)が必要です。
jeha 2011

13
@jeha:いや、TCOは簡単です。Sephがそれを行い、Erjangがそれを行い、KawaおよびJVM上の他のすべてのScheme実装がそれを行います。JVMには例外があります。これは基本的にと同じでGOTO、TCOの実装に使用できます。または、トランポリンを使用します。または、JVM呼び出しスタックをまったく使用せず、独自に実装するだけです。ClojureとScalaが限られたTCOしか提供しない(基本的には末尾再帰のみが最適化される)理由は、相互運用性とパフォーマンス上の理由から、JVM呼び出しスタックを使用したいからです。リッチヒッキーのように、Clojureの設計者は次のように述べています。相互運用、速度、TCO-2つ選んでください。
イェルクWミッターク

3
パフォーマンスをまったく気にせず、Haskell言語が必要とするものだけに焦点を当てると、HaskellをJVMにコンパイルするのが難しいとは想像できません。ホルグが言及しているようにトランポリンを使用してください。それらは実装が簡単です。その仕事をする最も単純なデータ構造を使用してください。わざわざ最適化しないでください。彼が実際に気にかけていれば、誰かが1週間以内に実用的で完全な実装を自分でハックできると確信しています。
Thomas Eding 2011

回答:


80

Fregeを調査することをお勧めします。そのページからの引用:

「フレーゲは、Haskellの精神に基づく非厳密で純粋な関数型プログラミング言語です。」

「フレーゲプログラムはJavaにコンパイルされ、JVMで実行されます。」

言語仕様を簡単に調べたところ、フレーゲはほぼHaskellのクローンのように見えます。おそらく、「Haskellの精神で」というフレーズは、適切な期待を設定することを目的とした単純なものです。


1
ページを少し更新したようです。「FregeはJVMのHaskellです」と表示されます。これははるかに強力な主張IMOです。
マイケルアンダーソン

23

HaskellはJVMで美しく動作します。タイプセーフなJava相互運用機能を備えた完全なGHC7.10.3HaskellをJVMに導入するプロジェクトであるEtaを参照してください。


12

私が知っているJVMのhaskellに近い言語はCALだけです。CALはhaskellに大きく基づいていますが、haskellのすべての機能を備えているわけではありません。型システムはHaskell98に似ており、do表記法のような構文糖衣構文がありません。

HaskellとCALの比較は次のとおりです:HaskellプログラマーのためのCAL

日食プラグインは非常に洗練されており、便利です。

CALはOpenQuarkフレームワークの一部であることに注意してください。


実は「本物」を探しています。CALについては判断できません。しかし、CALには型クラスがあるようです。第一印象は確かに非常に厄介です。
jeha 2011

CALには確かに型クラスがあります-Haskell98からかなりの構文糖衣を除いたものにかなり近いです。
tgdavies 2011

追加情報tgdaviesに感謝します、私自身はCALプログラマーではありません
islon 2011

数日間、私はHakellProgrammersドキュメントのCALを取得しようとします。あなたが提供するリンクも役に立たないようです。誰かがPDFへの有効なリンクを投稿できますか?
インゴ2011

@Ingo:ユーザーガイドへのこのリンクは機能するはずですが、最新のものではない可能性があります:resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha 2011

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.