java - usos - programacion funcional
La mejor manera de llamar a las funciones de Haskell desde Java (4)
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.
Consulte Interfaz con otros idiomas: Java en la wiki de Haskell.
La forma más fácil en la que puedo pensar: iniciar la hint en un proceso 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 con expresiones en la entrada estándar y dará resultados estrictos en la salida estándar. Por supuesto, tomará un poco más de trabajo asegurarse de que esto sea seguro.
(Eh, suponiendo que Java tenga algún tipo de funcionalidad popen2-ish. De lo contrario, quizás pueda hacer lo mismo a través de sockets).
Por lo general, evito los enfoques de tipo JNI para vincular los tiempos de ejecución / idiomas. Simplemente tienen demasiadas trampas y poco potencial. Me resulta más fácil trabajar a través de los límites del proceso. Aunque nunca lo he intentado 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.
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 algunos problemas con los enlazadores.
Los detalles sobre cómo llamar a Haskell desde C están aquí: http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
Alternativamente, usted podría considerar un servidor RPC.