【问题标题】:Best way to call Haskell functions from within Java从 Java 中调用 Haskell 函数的最佳方式
【发布时间】:2010-01-26 17:15:37
【问题描述】:

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

【问题讨论】:

标签: java haskell ffi


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 2020-07-16
      • 2013-06-25
      • 2022-08-17
      • 2013-11-21
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多