usos programacion funcional java haskell ffi

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.



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.