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?



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ń.


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.