Haskell auf JVM?


81

Ich frage mich, ob es eine Möglichkeit gibt, Haskell auf der JVM laufen zu lassen (kompiliert oder interpretiert).

Es gibt JHaskell auf Sourceforge, aber dieser scheint leer und tot zu sein.

GHC verwendet LLVM als Compiler-Backend. Wäre es eine gute Idee oder möglich, LLVM in Java-Bytecode zu kompilieren? Oder vielleicht ein anderes Compiler-Backend verwenden?



4
Und dieser ganze Thread über Haskell-Cafe.
Josh Lee

3
Die Tail-Call-Optimierung scheint immer noch ein offenes Thema zu sein. Deshalb benötigen andere funktionale JVM-Sprachen wie Clojure spezielle Konstrukte ( recur).
Jeha

12
@jeha: Nein, TCO ist einfach. Seph macht es, Erjang macht es, Kawa und alle anderen Schema-Implementierungen auf der JVM machen es. Die JVM verfügt über Ausnahmen, die im Grunde dieselben sind wie die GOTO, mit denen TCO implementiert werden können. Oder Sie verwenden Trampoline. Oder Sie verwenden den JVM-Aufrufstapel überhaupt nicht und implementieren nur Ihren eigenen. Der Grund, warum Clojure und Scala nur begrenzte Gesamtbetriebskosten bereitstellen (im Grunde wird nur die Endrekursion optimiert), liegt darin, dass sie den JVM-Aufrufstapel aus Gründen der Interoperabilität und Leistung verwenden möchten . Als Rich Hickey sagte Clojures Designer: Interop, Geschwindigkeit, TCO - Wählen Sie zwei.
Jörg W Mittag

3
Ich kann mir nicht vorstellen, dass es schwierig wäre, Haskell für die JVM zu kompilieren, wenn Sie sich überhaupt nicht um die Leistung kümmern und sich nur auf das konzentrieren würden, was die Haskell-Sprache erfordert. Verwenden Sie Trampoline, wie Jorg erwähnt. Sie sind einfach zu implementieren. Verwenden Sie die einfachsten Datenstrukturen, die den Job erledigen. Mach dir nicht die Mühe zu optimieren. Ich bin sicher, jemand könnte innerhalb einer Woche selbst eine funktionierende und vollständige Implementierung hacken, wenn er sich tatsächlich darum kümmert.
Thomas Eding

Antworten:


79

Vielleicht möchten Sie Frege untersuchen . Zitat von dieser Seite:

"Frege ist eine nicht strenge, rein funktionale Programmiersprache im Sinne von Haskell."

"Frege-Programme werden nach Java kompiliert und in einer JVM ausgeführt."

Basierend auf einer kurzen Durchsicht der Sprachspezifikation scheint Frege fast ein Haskell-Klon zu sein. Vielleicht soll der Ausdruck "im Geiste von Haskell" einfach die richtige Erwartung setzen.


1
Sieht so aus, als hätten sie ihre Seite leicht aktualisiert - sie lautet jetzt "Frege ist ein Haskell für die JVM". Das ist eine viel stärkere Behauptung IMO.
Michael Anderson

21

Haskell arbeitet wunderbar an der JVM. Siehe Eta , ein Projekt, das GHC 7.10.3 Haskell mit typsicherem Java-Interop auf die JVM bringt.


11

Die einzige Sprache, die ich kenne und die in der JVM in der Nähe von Haskell liegt, ist CAL. CAL basiert stark auf Haskell, verfügt jedoch nicht über alle Funktionen von Haskell. Das Typsystem ähnelt Haskell 98, und does fehlt eine syntaktische zuckerähnliche Notation.

Hier ist ein Vergleich von Haskell und CAL: CAL für Haskell-Programmierer

Das Eclipse-Plugin ist sehr ausgefeilt und nützlich.

Beachten Sie, dass CAL Teil des Open Quark-Frameworks ist.


Eigentlich suche ich "den Echten". Ich kann nicht über CAL urteilen. Aber CAL scheint übrigens Typklassen zu haben. Der erste Eindruck ist in der Tat sehr haskelisch.
Jeha

CAL hat in der Tat Typklassen - es liegt ziemlich nahe an Haskell 98, abzüglich ein gutes Stück syntaktischen Zuckers.
Tgdavies

danke für zusätzliche Informationen tgdavies, ich bin selbst kein CAL-Programmierer
islon

Seit einigen Tagen versuche ich, das Dokument CAL for Hakell Programmers zu erhalten. Der von Ihnen bereitgestellte Link scheint auch nicht zu helfen. Kann jemand bitte einen funktionierenden Link zum PDF posten?
Ingo

@Ingo: Dieser Link zum Benutzerhandbuch sollte funktionieren, ist aber möglicherweise nicht der neueste: resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.