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 に答える