2010-06-24 16 views
10

¿Cuáles son mis opciones en términos de un lenguaje funcional rápido para el uso de la biblioteca en una aplicación Qt C++ multiplataforma?¿Buen lenguaje funcional multiplataforma para uso de biblioteca en una aplicación C++?

Parece que casi todos los idiomas (funcionales o no) tienen alguna forma de llamar al código C/C++ de una manera fácil. Me gustaría ir al revés: escriba una aplicación en Qt usando C++ para lógica de negocios con estado, GUI y demás, pero desplegable y use un lenguaje funcional para la biblioteca de cálculo central.

¿Cuáles son fáciles de usar de esta manera? Por ejemplo, ¿el código OCaml puede compilarse en una biblioteca estática y luego ser consumido por una aplicación C++?

Gracias, Rickard

+0

También: existe una dependencia de la velocidad ya que el código funcional haría algunos cálculos pesados ​​lo más rápido posible (resolviendo PDE usando métodos de diferencias finitas). – Rickard

Respuesta

5

Haskell tiene esta capacidad, aunque la interacción con Qt/qmake y su proceso de construcción con GHC puede tomar un poco el engaño para conseguir trabajo:

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

También hay un proyecto llamado HaskellDirect la que parece similar a su fin, así:

http://www.haskell.org/hdirect/

+0

Estoy tentado de seguir por este camino. Es un pequeño proyecto no comercial, así que no hay mucho en riesgo, excepto mi tiempo libre. Supongo que el tiempo de ejecución de haskell no tendrá ningún problema con la concurrencia y que puedo llamar a la biblioteca desde varios hilos al mismo tiempo. Probablemente acepte esta respuesta dentro de un rato, aunque tal vez fue una pregunta un poco subjetiva, sin una respuesta "correcta" clara. – Rickard

2

AutoCAD utiliza AutoLisp así que mi sugerencia sería Lisp.

+0

Tengo muy poca experiencia con Lisp pero me pregunto si el compilador Lisp puede producir bytecode c-consumible, así que simplemente puedo llamar funciones en la biblioteca. Quiero evitar tener que administrar un intérprete incrustado en la aplicación (como cuando uno incorpora Python en una aplicación C y tiene que jugar con el recuento de referencias y PyObject * s solo para llamar a una función). – Rickard

+0

Şerbănoiu: Sí, pero AutoLisp se ha creado específicamente para integrarse en AutoCAD. Esto no significa que todos los Lisps tengan automáticamente la propiedad de que sus funciones pueden ser llamadas fácilmente desde el código C++.Tenga en cuenta que no está tratando de integrar un idioma en su aplicación C++, sino que llama a un código de biblioteca compilado, escrito en otro idioma desde su aplicación. – sepp2k

2

estaría tentado para ver qtHaskell y hacer todo el asunto en Haskell. Mi opinión se basa en el notable éxito de Don Stewart haciendo xmonad in Haskell.

+0

Es tentador, pero quiero confiar en los puertos de las bibliotecas (como qt) lo menos posible. Ciertas cosas también son muy fáciles de hacer con las clases en C++ cuando se trata de la lógica de mantenimiento del estado. Gracias de todos modos por su respuesta. Sin duda consideraré la posibilidad. – Rickard

1

Lisp y Haskell son excelentes idiomas funcionales, pero si consideramos la facilidad de enlazar el código C/C++ junto con el idioma, recomendaría lua.

Es muy sencillo vincular las funciones C a lua desde el principio, el intérprete es súper compacto y fácil de compilar, es uno de los lenguajes de scripting más rápidos que existen y, con luabind, puede vincular fácilmente clases de C++ , instancias de plantillas, etc. He tenido que hacer enlaces para numerosos lenguajes de scripting en el pasado y nunca he encontrado uno que sea tan sencillo como lua. También es compatible con swig si prefiere enlazar cosas mediante swig, lo que permitirá que su aplicación sea compatible con múltiples lenguajes de scripting.

Desde el punto de vista del lenguaje puro, el aspecto meta-función/metaprogramación de lua (comparable a lisp) hace que sea muy fácil admitir todo tipo de paradigmas de programación, aunque personalmente considero que es más adecuado para la programación funcional. Es extremadamente personalizable y adecuado para uso integrado.

Sin embargo, como ya está usando qt, qtHaskell podría ser una buena opción para considerar también.

+0

Quizás Lua sea una opción mucho mejor para este tipo de cosas, pero conozco las complicaciones que conlleva incorporar y ejecutar código python desde una aplicación C/C++. Es mucho más trabajo que hacer que simplemente inicializar algunos tiempos de ejecución y luego llamar funciones. Aunque echaré un vistazo al C-api en la documentación de Lua. Escuché grandes cosas sobre la velocidad de Lua, así que ciertamente es interesante. Gracias por su respuesta. – Rickard

Cuestiones relacionadas