Estoy buscando una forma eficiente de ejecutar las funciones de Haskell desde un programa Java. He considerado el uso de exec() para interactuar con GHC, pero parece que debería haber un método mejor.La mejor manera de llamar a las funciones de Haskell desde Java
Respuesta
normalmente evitar JNI tipo se acerca a la vinculación a través de tiempos de ejecución/idiomas. Simplemente tienen demasiados problemas y poca ventaja. Me resulta más fácil trabajar a través de los límites del proceso. Aunque nunca lo he probado con Haskell y Java, ambos tienen bibliotecas que admiten XML RPC, y suena como un ajuste natural para lo que estás haciendo. Entonces: configure un programa Haskell como un "servicio" y simplemente llame a sus funciones cuando las necesite.
Y hay bibliotecas xml-rpx razonables, http://hackage.haskell.org/package/haxr –
Ver Interfacing with other languages: Java en la wiki de Haskell.
Aquellos se centran en invocar el código Java de Haskell. Estaba buscando algo que funcione para el otro lado. –
En realidad, ¿no es el puente Haskell/Java VM lo que estás buscando? Es JNI. –
Supongo que sabes cómo llamar a C desde Java? Si es así, puede seguir la guía FFI para llamar a Haskell desde C y C desde Java, creando un puente. Esta es una llamada nativa, y puede requerir un toque de violín.
detalles sobre la llamada Haskell de C están aquí: http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
Alternativamente, usted podría considerar un servidor RPC.
La manera más fácil que se me ocurre es iniciar hint en un proceso por separado. Como una demostración rápida, algo tonto como
import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines
puede ser alimentado expresiones en la entrada estándar y dará resultados fibrosos en la salida estándar. Por supuesto, tomará un poco más de trabajo para asegurarse de que esto sea seguro.
(Err, en el supuesto Java tiene algún tipo de funcionalidad popen2-ish. De lo contrario, tal vez usted puede hacer lo mismo a través de sockets.)
- 1. Llamar a funciones Java desde Clojure
- 2. Llamar a las funciones de C++ exe desde C#
- 3. Cómo llamar a las funciones de Matlab desde C++
- 4. Llamar a las funciones de Powershell desde C#
- 5. Llamar a las funciones miembro desde un constructor
- 6. ¿Cuál es la mejor manera de llamar al código Java desde Python?
- 7. Cómo puedo llamar a las funciones de C++ desde ruby
- 8. Llamar a las funciones de javascript desde el controlador
- 9. Llamar a una API de Java desde .NET: mejor enfoque
- 10. ¿Cómo llamar a la función Java de GWT desde Javascript?
- 11. Llamar a Java desde Python
- 12. Cómo llamar a objetos y funciones Java desde CPython?
- 13. Llamar a las funciones de Javascript desde un Applet de Java
- 14. Llamar a funciones R desde VC++
- 15. PHP: Cómo llamar a las funciones de la biblioteca estándar
- 16. ¿Hay alguna manera de llamar a las funciones de la API nativa de Windows desde el modo de usuario?
- 17. ¿La mejor manera de llamar a clases de .NET desde PHP?
- 18. Llamar a la biblioteca Java desde Objective C en Mac
- 19. La mejor manera de ejecutar AppleScript desde Java
- 20. ¿Cómo llamar a las funciones de MATLAB desde la línea de comandos de Linux?
- 21. llamar a Java desde PHP
- 22. llamar a Java desde Clojure
- 23. ¿Llamar a Java desde MATLAB?
- 24. ¿Dónde llamar a las funciones ini_set() en la clase?
- 25. ¿Puedes llamar a las clases JRuby compiladas desde Java?
- 26. ¿Cuál es la mejor manera de llamar a un IBAction desde dentro del código?
- 27. La mejor manera de llamar a un servicio web JSON desde una consola .NET
- 28. mejor comprensión de las funciones externas "C"
- 29. Llamar a cualquier método Java desde C#
- 30. llamando a las funciones de Objective C desde Python?
Aquí hay una forma más: http://stackoverflow.com/questions/10370177/communication-between-java-and-haskell/10370902#10370902 –