Haskell na JVM?

83

Zastanawiam się, czy istnieje sposób, aby Haskell działał na JVM (skompilowanym lub zinterpretowanym)?

Na Sourceforge istnieje JHaskell, ale ten wydaje się być pusty i martwy.

GHC używa LLVM jako zaplecza kompilatora. Czy byłoby dobrym pomysłem lub możliwą kompilacją LLVM do kodu bajtowego Javy? A może użyć innego zaplecza kompilatora?

jeha
źródło
4
I cały ten wątek na haskell-cafe.
Josh Lee
3
Optymalizacja połączeń ogonowych nadal wydaje się być kwestią otwartą. Dlatego inne funkcjonalne języki jvm, takie jak Clojure, wymagają specjalnych konstrukcji ( recur).
jeha
13
@jeha: Nie, całkowity koszt posiadania jest łatwy. Seph to robi, Erjang to robi, Kawa i wszystkie inne implementacje Scheme w JVM robią to. JVM ma wyjątki, które są w zasadzie takie same, jak te GOTO, których można użyć do wdrożenia całkowitego kosztu posiadania. Albo używasz trampolin. Lub w ogóle nie używasz stosu wywołań JVM i po prostu implementujesz własny. Powodem, dla którego Clojure i Scala zapewniają tylko ograniczony TCO (zasadniczo zoptymalizowana jest tylko rekurencja ogona ), jest to, że chcą używać stosu wywołań JVM ze względu na interoperacyjność i wydajność. Jak powiedział Rich Hickey, projektant Clojure: Interop, szybkość, całkowity koszt posiadania - wybierz dwa.
Jörg W Mittag
3
Nie mogę sobie wyobrazić, że trudno byłoby skompilować Haskell do JVM, gdybyś w ogóle nie dbał o wydajność i skupiał się tylko na tym, czego wymaga język Haskell. Korzystaj z trampolin, jak wspomina Jorg. Są łatwe do wdrożenia. Użyj najprostszych struktur danych, które wykonują zadanie. Nie przejmuj się optymalizacją. Jestem pewien, że ktoś mógłby sam zhakować działającą i pełną implementację w ciągu tygodnia, gdyby naprawdę o to dbał.
Thomas Eding

Odpowiedzi:

80

Możesz zbadać Frege . Cytowanie z tej strony:

„Frege jest nieostrym, czysto funkcjonalnym językiem programowania w duchu Haskella”.

„Programy Frege są kompilowane do języka Java i uruchamiane w JVM”.

Opierając się na krótkiej analizie specyfikacji języka, Frege wygląda na prawie klona Haskella. Być może wyrażenie „w duchu Haskella” jest po prostu przeznaczone do przedstawienia właściwych oczekiwań.

Daniel Pratt
źródło
1
Wygląda na to, że nieznacznie zaktualizowali swoją stronę - teraz brzmi: „Frege to Haskell dla JVM”. co jest znacznie silniejszym twierdzeniem IMO.
Michael Anderson,
25

Haskell pięknie działa na JVM. Zobacz Eta , projekt, który wprowadza pełny GHC 7.10.3 Haskell do JVM z bezpieczną dla typów obsługą Java.

rahulmutt
źródło
12

Jedynym językiem, który znam, który jest zbliżony do haskell w JVM, jest CAL. CAL jest w dużej mierze oparty na programie haskell, ale nie ma wszystkich jego funkcji. System typów jest podobny do Haskell 98, a dobrakuje notacji cukru syntaktycznego .

Oto porównanie Haskell i CAL: CAL for Haskell Programmers

Wtyczka Eclipse jest bardzo dopracowana i użyteczna.

Zwróć uwagę, że licencja CAL jest częścią struktury Open Quark.

islon
źródło
Właściwie to szukam „tego prawdziwego”. Nie mogę ocenić CAL. Ale wydaje się, że CAL przy okazji ma klasy typów. Pierwsze wrażenie jest rzeczywiście bardzo haskelowe.
jeha,
CAL rzeczywiście ma klasy typów - jest dość zbliżony do Haskell 98 bez sporej ilości cukru syntaktycznego.
tgdavies
dzięki za dodatkowe informacje tgdavies, sam nie jestem programistą CAL
islon
Od kilku dni staram się uzyskać dokument CAL dla programistów Hakell. Podany przez Ciebie link też nie wydaje się pomagać. Czy ktoś może opublikować działający link do pliku PDF?
Ingo
@Ingo: ten link do podręcznika użytkownika powinien działać, ale może nie jest najnowszy: resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha