23

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

4

3 回答 3

15

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

于 2010-01-27T04:05:47.157 回答
12

我假设您知道如何从 Java 调用 C?如果是这样,那么您可以按照 FFI 指南从 C 调用 Haskell,从 Java 调用 C,创建一个桥。这是本机调用,可能需要对链接器进行一些摆弄。

从 C 调用 Haskell 的详细信息在这里:http ://www.haskell.org/haskellwiki/Calling_Haskell_from_C

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

于 2010-01-26T18:48:53.840 回答
2

我能想到的最简单的方法:在单独的进程中启动提示。作为一个快速演示,一些愚蠢的东西

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

可以在标准输入上输入表达式,并在标准输出上给出字符串结果。当然,要确保这是安全的,还需要做更多的工作。

(错误,假设 Java 具有某种类似 popen2 的功能。否则也许你可以在套接字上做同样的事情。)

于 2010-01-27T03:35:31.913 回答