Haskell на JVM?

83

Мне интересно, есть ли способ заставить Haskell работать на JVM (скомпилированный или интерпретируемый)?

На Sourceforge существует JHaskell, но этот кажется пустым и мертвым.

GHC использует LLVM как серверную часть компилятора. Было бы неплохо или возможно скомпилировать LLVM в байт-код Java? Или, может быть, использовать другой бэкэнд компилятора?

Jeha
источник
4
И вся эта ветка на haskell-cafe.
Джош Ли
3
Оптимизация хвостового вызова все еще кажется открытой проблемой. Вот почему другие функциональные языки jvm, такие как Clojure, нуждаются в специальных конструкциях ( recur).
jeha
13
@jeha: Нет, TCO - это просто. Seph делает это, Erjang делает это, Kawa и все другие реализации Scheme на JVM делают это. В JVM есть исключения, которые в основном те же, что и GOTO, которые можно использовать для реализации TCO. Или вы используете батуты. Или вы вообще не используете стек вызовов JVM, а просто реализуете свой собственный. Причина, по которой Clojure и Scala предоставляют только ограниченную совокупную стоимость владения (в основном, оптимизирована только хвостовая рекурсия ), заключается в том, что они хотят использовать стек вызовов JVM для обеспечения совместимости и производительности. Как сказал Рич Хики, дизайнер Clojure: взаимодействие, скорость, совокупная стоимость владения - выберите два.
Jörg W Mittag
3
Я не могу представить, что было бы трудно скомпилировать Haskell для JVM, если бы вы вообще не заботились о производительности и сосредоточились только на том, что требует язык Haskell. Используйте батуты, как упоминает Йорг. Их легко реализовать. Используйте простейшие структуры данных, которые делают эту работу. Не беспокойтесь об оптимизации. Я уверен, что кто-то мог бы самостоятельно создать рабочую и полную реализацию в течение недели, если бы ему было интересно.
Thomas Eding

Ответы:

80

Вы можете исследовать Фреге . Цитата с той страницы:

«Frege - это нестрогий, чистый функциональный язык программирования в духе Haskell».

«Программы Frege компилируются на Java и запускаются в JVM».

Если взглянуть на спецификацию языка вкратце, Frege выглядит почти клоном Haskell. Возможно, фраза «в духе Haskell» проста и предназначена для правильного ожидания.

Дэниел Пратт
источник
1
Похоже, они немного обновили свою страницу - теперь она гласит: «Frege - это Haskell для JVM». что является гораздо более сильным заявлением ИМО.
Майкл Андерсон,
25

Haskell прекрасно работает на JVM. См. Eta , проект, который переносит полную версию GHC 7.10.3 Haskell на JVM с типобезопасным взаимодействием с Java.

Rahulmutt
источник
12

Единственный язык, который я знаю, близкий к haskell в JVM, - это CAL. CAL в значительной степени основана на haskell, но не имеет всех функций haskell. Система типов похожа на Haskell 98, а синтаксический сахар похож наdo нотация, .

Вот сравнение Haskell и CAL: CAL для программистов на Haskell

Плагин eclipse очень доработан и полезен.

Обратите внимание, что клиентская лицензия является частью платформы Open Quark.

Islon
источник
На самом деле ищу "настоящего". Не могу судить о CAL. Но у CAL, кстати, есть классы типов. Первое впечатление действительно очень аскелистское.
jeha 05
В CAL действительно есть классы типов - он довольно близок к Haskell 98 без изрядного количества синтаксического сахара.
tgdavies 08
спасибо за дополнительную информацию tgdavies, я сам не программист CAL
islon 08
В течение нескольких дней я пытаюсь получить документ CAL for Hakell Programmers. Ссылка, которую вы предоставляете, тоже не помогает. Может кто-нибудь выложить рабочую ссылку на pdf, пожалуйста?
Ingo
@Ingo: эта ссылка на руководство пользователя должна работать, но, возможно, она не последняя: resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha