Sto cercando un modo efficiente di eseguire le funzioni Haskell all'interno di un programma Java. Ho considerato l'uso di exec() per interagire con GHC, ma sembra che ci dovrebbe essere un metodo migliore.Il modo migliore per chiamare le funzioni Haskell da Java
risposta
Io di solito evitare JNI tipo approcci per il collegamento tra i tempi di esecuzione/lingue. Hanno solo troppi trucchi e un piccolo vantaggio. Trovo più facile lavorare oltre i limiti del processo. Anche se non l'ho mai provato con Haskell e Java, entrambi hanno librerie che supportano XML RPC, e suona come una scelta naturale per quello che stai facendo. Quindi: imposta un programma Haskell come "servizio" e chiama le sue funzioni quando ne hai bisogno.
E ci sono delle librerie xml-rpx ragionevoli, http://hackage.haskell.org/package/haxr –
Vedere Interfacing with other languages: Java nella wiki Haskell.
Questi si concentrano sul richiamo del codice Java da Haskell. Stavo cercando qualcosa che funzioni dall'altra parte. –
In realtà, il bridge VM Haskell/Java non è quello che stai cercando? È JNI. –
Suppongo tu sappia come chiamare C da Java? In tal caso, è possibile seguire la guida FFI per chiamare Haskell da C e C da Java, creando un bridge. Questa è una chiamata nativa e potrebbe richiedere un po 'di giocherellare con i linker.
Dettagli sulla chiamando Haskell da C sono qui: http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
In alternativa, si potrebbe prendere in considerazione un server RPC.
Il modo più semplice che riesco a pensare: avviare hint in un processo separato. A dimostrazione rapida, qualcosa di stupido come
import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines
può essere alimentato espressioni standard input e darà risultati filamentose su stdout. Certo, ci vorrà un po 'più di lavoro per assicurarsi che questo sia sicuro.
(Err, supponendo che Java ha una sorta di funzionalità popen2-ish. In caso contrario, forse si può fare lo stesso con i socket.)
- 1. Chiamare le funzioni Javascript da un'applet Java
- 2. Come chiamare le funzioni Java da C++?
- 3. Qual è il modo migliore per chiamare il codice Java da Python?
- 4. Chiamare le funzioni membro da un costruttore
- 5. Chiamare Haskell da Java con C tra
- 6. Chiamare un'API Java da .NET - metodo migliore
- 7. Chiamare le funzioni exe C++ da C#
- 8. Chiamare le funzioni R da VC++
- 9. Come chiamare le funzioni R da Fortran?
- 10. Il modo migliore per eseguire AppleScript da Java
- 11. Come si chiamano le funzioni in modo dinamico con Haskell
- 12. Chiamare le funzioni PHP remote da un'app per iPhone
- 13. Il modo migliore per richiamare le API Rest da angularjs?
- 14. Cercare un modo conveniente per chiamare Java da C++
- 15. Chiamare Rust da Java
- 16. Il modo migliore per denominare le tabelle
- 17. Qual è il modo migliore per racchiudere le funzioni sincrone in una promessa
- 18. Qual è il modo migliore per scrivere le app di Facebook in haskell?
- 19. Il modo migliore per chiamare molti servizi web?
- 20. Un modo migliore di inserire le directory nei moduli Haskell
- 21. Le funzioni di Haskell possono essere serializzate?
- 22. Dove chiamare le funzioni ini_set() nella classe?
- 23. Il modo migliore per simulare il servizio web java
- 24. Qual è il modo migliore per riutilizzare le classi da un altro progetto Java in Eclipse?
- 25. Chiamare le classi Java da IzPack
- 26. modo migliore per gestire le eccezioni Java in ServletContextListener
- 27. Il modo migliore per analizzare Java in Java
- 28. Java: il modo migliore per passare int per riferimento
- 29. Il modo migliore per scrivere immagini?
- 30. Qual è il modo migliore per ridimensionare le immagini in Java?
Ecco un altro modo: http://stackoverflow.com/questions/10370177/communication-between-java-and-haskell/10370902#10370902 –