Что мешает эффективной виртуальной машине на Haskell (например, JVM)? - PullRequest
27 голосов
/ 20 февраля 2012

Мне было интересно, что мешает разработке эффективной виртуальной машины, такой как JVM или PyPy для Haskell (кроме, возможно, усилий по разработке)? Это языковая структура? Я думаю, что языки, которые сложнее интерпретировать эффективно (например, Python, будучи очень динамичным), уже имеют достойные виртуальные машины.

Кроме того, если ничто не мешает такой реализации, STG будет хорошим целевым "байт-кодом", поскольку все оптимизации выполняются в Core?

Есть ли какие-либо статьи или сообщения в блогах, которые обсуждают эту тему?

редактирует:

  • Мне известно о HaLVM , но я не думаю, что это то, что я имею в виду.
  • Мне также известно о runhaskell, но это совсем не эффективно.

Ответы [ 6 ]

22 голосов
/ 20 февраля 2012

Что мешает эффективной виртуальной машине Haskell?

Ничего - там уже был один, LVM Даана Лейена. Он был достаточно эффективным, чтобы его можно было использовать для системы исполнения Helium («язык обучения» Хаскелла из Утрехтского университета).

Тем не менее, я не знаю, используется ли он в наши дни, поэтому на вопрос «Что мешает эффективной виртуальной машине Haskell?» можно ответить как рабочая сила, постоянные инвестиции и т. д. Когда у Haskell уже есть хороший компилятор, хорошая виртуальная машина - это роскошь, как уже заметил Пауло Пинто.

5 голосов
/ 20 февраля 2012

Мне не известно о каких-либо технических ограничениях, применяемых здесь.Существует язык под названием Frege , семантически близкий к Haskell, который нацелен на JVM.Так что просто никто не учел, что компилятор Haskell-to-JVM стоил того.Действительно, как JVM-скептик, мне интересно, что это принесет.Если это просто переносимость на промежуточный язык, я бы предпочел работать на LLVM или на предварительно созданной двоичной ферме.

5 голосов
/ 20 февраля 2012

UHC имеет бэкэнд Javascript, который, конечно, работает на движке Javascript браузера.Я имею в виду, я не вижу ничего, что мешало бы Haskell нацеливаться на разные бэкэнды.На самом деле, я думаю, что UHC был разработан, чтобы упростить таргетинг на разные бэкэнды.

5 голосов
/ 20 февраля 2012

У меня нет возможности опубликовать комментарий, и, возможно, это даже больше анти-VM, чем компилятор с собственным кодом, но OP может заинтересовать Reduceron.

1 голос
/ 13 января 2017

Ничто не мешает Haskell иметь виртуальную машину.Haskell прекрасно работает на JVM и может работать даже быстрее, чем GHC после разогрева JIT в тех случаях, когда сгенерированный код попадает в поле зрения компилятора JIT.См. Eta , проект, который включает в себя полный GHC 7.10.3 Haskell на JVM с безопасным взаимодействием типов Java.Это просто требует большого терпения и времени для работы.

1 голос
/ 26 сентября 2012

Ничего.См. Лямбдахин .Вот несколько коротких заметок .

...