从Java中调用Haskell函数的最佳方法

22

我正在寻找一种在Java程序中高效执行Haskell函数的方法。我考虑过使用exec()与GHC进行交互,但似乎应该有更好的方法。


这里还有一种方法:https://dev59.com/32kv5IYBdhLWcg3wwTdm#10370902 - Samuel Audet
3个回答

14
我通常避免使用JNI类型的方法来跨运行时/语言进行链接。它们有太多的陷阱和很少的优势。我发现跨进程边界更容易。虽然我从未尝试过使用Haskell和Java,但它们都有支持XML RPC的库,听起来非常适合你正在做的事情。因此:将Haskell程序设置为“服务”,并在需要时调用其函数。

2
有合理的XML-RPC库,http://hackage.haskell.org/package/haxr - Don Stewart

12

我假设你已知道如何从Java中调用C?如果是这样,那么您可以按照FFI指南从C中调用Haskell,并从Java中调用C,创建一个桥接程序。这是一个本地调用,并且可能需要一些与链接器的折腾。

有关从C中调用Haskell的详细信息,请参见此处:http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

或者,您可以考虑使用RPC服务器。


2
我能想到的最简单的方法是:在一个单独的进程中启动hint。 作为一个快速演示,可以像这样愚蠢地执行:
import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines

可以通过标准输入来传递表达式,并将字符串结果输出到标准输出。当然,为了确保安全性,还需要做更多的工作。

(嗯,假设Java具有某种popen2-ish功能。否则,您可以通过套接字完成相同的操作。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接