我正在尋找一種從Java程序內部執行Haskell函數的有效方法。我曾考慮過使用exec()與GHC進行交互,但似乎應該有更好的方法。從Java內部調用Haskell函數的最佳方法
回答
我通常會避免JNI型接近整個運行時間/語言鏈接。他們只是有太多的陷阱而且沒有多少好處。我發現跨越流程邊界工作更容易。儘管我從來沒有用Haskell和Java進行過試驗,但他們都有支持XML RPC的庫,這聽起來很適合你正在做的事情。所以:設置一個Haskell程序作爲「服務」,並在需要時調用它的功能。
還有合理的xml-rpx庫,http://hackage.haskell.org/package/haxr – 2010-01-30 05:36:31
請參閱Haskell wiki上的Interfacing with other languages: Java。
那些專注於從Haskell調用Java代碼。我正在尋找其他方式有效的東西。 – 2010-01-26 17:39:53
其實,Haskell/Java VM橋樑不是你想要的嗎?這是JNI。 – 2010-01-26 17:55:42
我假設你知道如何從Java調用C?如果是這樣,那麼你可以按照FFI指南從C調用Haskell,從Java調用C,創建一個橋樑。這是一個本地調用,可能需要一些連接器的擺弄。從C調用哈斯克爾
詳情請看這裏:http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
或者,你可以考慮的RPC服務器。
我能想到的最簡單的方法是:在單獨的過程中啓動hint。作爲一個快速演示,愚蠢的事情像
import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines
可飼餵標準輸入表達式,並給在stdout拉絲效果。當然,這需要更多的工作來確保這是安全的。
(ERR,假設Java有某種popen2十歲上下的功能,否則也許你可以做在插座一樣。)
- 1. 從.NET調用Java API - 最佳方法
- 2. 函數內函數最佳方法?
- 3. 從GWT的內部函數調用Java方法JSNI
- 4. 從Java調用VB.NET函數的最佳方式是什麼?
- 5. 從python調用C函數的最佳方法?
- 6. 使用Haskell函數在函數內部
- 7. 無法從內部調用函數onOptionsItemSelected
- 8. OOP JavaScript:從回調函數內部調用方法
- 9. PHP從內部調用回調函數Object方法
- 10. 從內部調用方法?
- 11. 從解構類保護回調函數的最佳方法
- 12. 從內部調用函數
- 13. 從類方法調用「外部」函數
- 14. 從C++方法調用Java函數
- 15. JSNI - 從JS函數調用Java方法
- 16. 從JavaScript函數中調用Java方法?
- 17. 重用Java方法的最佳方法
- 18. 從函數內部調用函數?
- 19. 從函數內部調用Python函數
- 20. 從適配器內部處理多個getView調用的最佳方法
- 21. java調用的內部函數父的回調函數
- 22. 在特定時間戳調用函數的最佳方法
- 23. 確定何時隨機調用函數的最佳方法
- 24. 識別JavaScript函數調用者的最佳方法
- 25. 從Java執行AppleScript的最佳方法
- 26. 如何從一個方法內部調用一個javascript函數?
- 27. 從方法內部調用自我析構函數
- 28. 從擴展類中調用函數的最佳方式
- 29. Flex/Actionscript方法/函數方法調用的最佳排序方式
- 30. 來自外部js的調用函數內部方法
這裏有一個更多的方法:http://stackoverflow.com/questions/10370177/communication-between-java-and-haskell/10370902#10370902 – 2012-05-03 07:17:35