2010-01-26 175 views
20

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

+0

这里有一个更多的方法:http://stackoverflow.com/questions/10370177/communication-between-java-and-haskell/10370902#10370902 – 2012-05-03 07:17:35

回答

12

我通常会避免JNI型接近整个运行时间/语言链接。他们只是有太多的陷阱而且没有多少好处。我发现跨越流程边界工作更容易。尽管我从来没有用Haskell和Java进行过试验,但他们都有支持XML RPC的库,这听起来很适合你正在做的事情。所以:设置一个Haskell程序作为“服务”,并在需要时调用它的功能。

+2

还有合理的xml-rpx库,http://hackage.haskell.org/package/haxr – 2010-01-30 05:36:31

2

请参阅Haskell wiki上的Interfacing with other languages: Java

+0

那些专注于从Haskell调用Java代码。我正在寻找其他方式有效的东西。 – 2010-01-26 17:39:53

+1

其实,Haskell/Java VM桥梁不是你想要的吗?这是JNI。 – 2010-01-26 17:55:42

8

我假设你知道如何从Java调用C?如果是这样,那么你可以按照FFI指南从C调用Haskell,从Java调用C,创建一个桥梁。这是一个本地调用,可能需要一些连接器的摆弄。从C调用哈斯克尔

详情请看这里: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 

可饲喂标准输入表达式,并给在stdout拉丝效果。当然,这需要更多的工作来确保这是安全的。

(ERR,假设Java有某种popen2十岁上下的功能,否则也许你可以做在插座一样。)