Подтвердить что ты не робот

Лучший способ вызова функций Haskell из Java

Я ищу эффективный способ выполнения функций Haskell из Java-программы. Я рассмотрел использование exec() для взаимодействия с GHC, но похоже, что должен быть лучший метод.

4b9b3361

Ответ 1

Я обычно избегаю подходов типа JNI к связыванию во время выполнения/языки. У них просто слишком много ошибок и небольшой рост. Мне легче работать через границы процесса. Хотя я никогда не пробовал его с Haskell и Java, у них есть библиотеки, поддерживающие XML RPC, и это звучит как естественное соответствие тому, что вы делаете. Итак: настройте программу Haskell как "службу" и просто вызовите ее функции, когда они вам понадобятся.

Ответ 2

Я предполагаю, что вы знаете, как вызвать C из Java? Если да, то вы можете следовать руководству FFI для вызова Haskell с C и C с Java, создавая мост. Это нативный вызов, и может потребоваться некоторая работа с компоновщиками.

Подробности о вызове Haskell из C: http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

Кроме того, вы можете рассмотреть RPC-сервер.

Ответ 4

Самый простой способ, о котором я могу думать: запустить hint в отдельном процессе. Как быстрая демонстрация, что-то немое как

import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines

можно передавать выражения на stdin и давать строгие результаты на stdout. Конечно, это займет немного больше работы, чтобы убедиться, что это безопасно.

(Err, предполагая, что у Java есть своего рода функция popen2-ish. В противном случае, возможно, вы можете сделать то же самое над сокетами.)