Хаскелл на JVM?


83

Цікаво, чи є якийсь спосіб змусити Haskell працювати на JVM (скомпільований чи інтерпретований)?

Існує JHaskell на Sourceforge, але цей, здається, порожній і мертвий.

GHC використовує LLVM як бекенд компілятора. Це була б гарна ідея чи можливість скомпілювати LLVM до байт-коду Java? Або, можливо, використовувати інший інтерфейс компілятора?


24
Поширені запитання про GHC: Чому GHC не доступний для .NET або JVM?
Джош Лі

4
І вся ця нитка на haskell-cafe.
Джош Лі

3
Оптимізація хвостових дзвінків, як і раніше, залишається відкритим питанням. Ось чому інші функціональні мови jvm, такі як Clojure, потребують спеціальних конструкцій ( recur).
jeha

13
@jeha: Ні, TCO - це просто. Це робить Seph, це робить Erjang, Kawa та всі інші реалізації Scheme на JVM. JVM має винятки, які в основному такі ж, як і GOTO, які можуть бути використані для реалізації TCO. Або ви використовуєте батути. Або ви взагалі не використовуєте стек викликів JVM, а просто реалізуєте свій власний. Причина, по якій Clojure та Scala надають лише обмежений TCO (в основному, оптимізована лише рекурсія хвоста ), полягає в тому, що вони хочуть використовувати стек викликів JVM з міркувань взаємодії та продуктивності. Як сказав Річ Хікі, дизайнер Clojure: Interop, швидкість, TCO - Виберіть два.
Jörg W Mittag

3
Я не уявляю, що складно скомпілювати Haskell до JVM, якби ви взагалі не дбали про продуктивність і зосереджувались лише на тому, що вимагає мова Haskell. Використовуйте батути, як згадує Йорг. Їх легко реалізувати. Використовуйте найпростіші структури даних, які виконують цю роботу. Не турбуйтеся про оптимізацію. Я впевнений, що хтось міг зламати робочу та повну реалізацію протягом тижня сам, якщо він насправді піклувався.
Thomas Eding,

Відповіді:


80

Можливо, ви захочете розслідувати Фреге . Цитую з цієї сторінки:

"Frege - це несувора, чиста функціональна мова програмування в дусі Хаскелла".

"Frege-програми компілюються на Java і працюють у JVM."

Грунтуючись на короткому ознайомленні з мовною специфікацією, Фреге, схоже, є майже клоном Хаскелла. Можливо, фраза "в дусі Хаскелла" просто призначена для встановлення належних очікувань.


1
Схоже, вони трохи оновили свою сторінку - тепер вона читає "Frege - це Haskell для JVM". що набагато сильніше вимагає ІМО.
Майкл Андерсон,

24

Хаскелл чудово працює над JVM. Дивіться Eta , проект, який передає повний GHC 7.10.3 Haskell на JVM із безпечним для типу взаємодією Java.


12

Єдиною мовою, яку я знаю і яка близька до haskell в JVM, є CAL. CAL значною мірою базується на haskell, але він не має усіх функцій haskell. Типова система подібна до Haskell 98, а синтаксичний цукор, як doпозначення, відсутній.

Ось порівняння Haskell та CAL: CAL для програмістів Haskell

Плагін eclipse дуже полірований і корисний.

Зверніть увагу, що CAL є частиною фреймворку Open Quark.


Насправді я шукаю "справжнього". Я не можу судити про ЛКД. Але CAL, схоже, має класи класів типів, до речі. Перше враження справді дуже неприємне.
jeha

CAL дійсно має класи типів - це досить близько до Haskell 98 мінус чималий синтаксичний цукор.
tgdavies

спасибі за додаткову інформацію tgdavies, я сам не програміст CAL
islon

Деякі дні я намагаюся отримати документ CAL для програмістів Hakell. Здається, посилання, яке ви надаєте, теж не допомагає. Чи може хтось розмістити робоче посилання на PDF, будь ласка?
Інго,

@Ingo: це посилання на керівництво користувача має працювати, але, можливо, воно не останнє: resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.