【发布时间】:2010-01-26 17:15:37
【问题描述】:
我正在寻找一种从 Java 程序中执行 Haskell 函数的有效方法。我考虑过使用 exec() 与 GHC 交互,但似乎应该有更好的方法。
【问题讨论】:
我正在寻找一种从 Java 程序中执行 Haskell 函数的有效方法。我考虑过使用 exec() 与 GHC 交互,但似乎应该有更好的方法。
【问题讨论】:
我通常避免使用 JNI 类型的方法来跨运行时/语言进行链接。他们只是有太多的陷阱和很少的好处。我发现跨流程边界工作更容易。虽然我从未尝试过使用 Haskell 和 Java,但它们都有支持 XML RPC 的库,这听起来很适合您正在做的事情。所以:将 Haskell 程序设置为“服务”,并在需要时调用它的函数。
【讨论】:
我假设您知道如何从 Java 调用 C?如果是这样,那么您可以按照 FFI 指南从 C 调用 Haskell,从 Java 调用 C,创建一个桥。这是一个本地调用,可能需要对链接器进行一些调整。
从 C 调用 Haskell 的详细信息在这里:http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
或者,您可以考虑使用 RPC 服务器。
【讨论】:
我能想到的最简单的方法:在单独的进程中启动 hint。作为一个快速演示,像这样的愚蠢的东西
import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines
可以在标准输入上输入表达式,并在标准输出上给出字符串结果。当然,要确保这是安全的,还需要做更多的工作。
(错误,假设 Java 具有某种类似 popen2 的功能。否则,也许您可以在套接字上做同样的事情。)
【讨论】: