2010-04-24 11 views
6

Tanto en Haskell como en OCaml, es posible llamar al idioma desde los programas C. ¿Qué tan factible sería crear aplicaciones nativas para Windows, Mac o Linux que hicieran un uso extensivo de esta técnica?Crear aplicaciones de escritorio GUI que llamen a OCaml o Haskell - ¿Es una tontería?

(sé que hay bibliotecas GUI como wxHaskell, pero supongo que uno quería tener sólo una parte de la lógica de la aplicación en la lengua extranjera.)

o es una idea terrible?

+0

http://mldonkey.sourceforge.net/Main_Page – grettke

+0

http://coherentpdf.com/blog/?tag=ocaml – grettke

+0

Caveat (http://www-list.cea.fr/labos/gb/LSL/ caveat/index.html) es una herramienta de verificación para C incrustada crítica escrita principalmente en C++, pero que usa OCaml como lenguaje de scripting (una revista Caml generada durante una sesión interactiva puede compilarse y vincularse con Caveat para ser reproducida en cualquier momento) . –

Respuesta

3

Hago un uso extenso de esto mediante la compilación de librerías compartidas de haskell que se llaman fuera de Haskell.

por lo general las tareas involucradas sería

  1. crear las declaraciones de exportación extranjeras adecuadas
  2. crear instancias almacenables para los tipos de datos que necesita para reunir
  3. crear las estructuras C (o estructuras en el idioma que está usando) para leer esta información
  4. ya que no quiero inicializar manualmente el RTS haskell, agrego el código de inicialización/terminación a la lib misma. (dllmain en windows __attribute__ ((constructor)) en unix)
  5. ya que no necesito ninguno de ellos, creo un archivo .def para ocultar todas las funciones de cierre y rts de estar en la tabla de exportación (ventanas)
  6. use GHC para compilar todo junto

Estas tareas son más bien robóticas y estructuradas, hasta el punto de que podría escribir algo para automatizarlas. De hecho, lo que utilizo para hacer esto es una herramienta que he creado que hace el seguimiento de dependencias de las funciones que marcó para ser exportado, y las resumirá y compilará la lib junto con las declaraciones en C/C++.

(por desgracia, esta herramienta aún no está en hackage, porque hay algo que todavía tengo que fijar y probar mucho más antes de que esté cómodo haciéndolo)

herramienta está disponible aquí http://hackage.haskell.org/package/Hs2lib-0.4.8

5

Bueno, el principal riesgo es que, aunque existen instalaciones, no están bien probadas, no muchas aplicaciones hacen esto. Usted no debería tener muchos problemas llamando Haskell de C, se ve muy fácil:

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

Yo diría que si hay alguna razón de peso para utilizar C para el extremo frontal (por ejemplo, usted tiene una aplicación de legado) y realmente necesitas una biblioteca de Haskell, o quieres usar Haskell por alguna otra razón, entonces, sí, ve por ello. El principal riesgo es simplemente que no mucha gente hace esto, por lo que hay menos documentación y ejemplos que para llamar a otro lado.

4

puede incrustar en OCaml C, así (ver the manual), aunque esto no es como comúnmente se hace como que se extiende OCaml con C.

2

O se trata de una idea terrible?

No es una idea terrible en absoluto. Pero como señala Don Stewart, es probable que sea un camino menos pisado. Ciertamente podría lanzar su programa como Haskell o OCaml, luego hacer que realice una llamada de función externa desde la puerta de inicio — y le recomiendo que estructure el código de esa manera — pero eso no cambia el hecho de que muchas más personas llaman de Haskell a C que de C a Haskell. Del mismo modo para OCaml.

4

Creo que el mejor enfoque, incluso si la GUI y la lógica están escritas en el mismo idioma, es ejecutar dos procesos que se comunican a través de un protocolo legible por humanos, basado en texto (una DSL de algún tipo). Esta arquitectura se aplica también a su caso.

Las ventajas son obvias: la GUI es desmontable y reemplazable, las pruebas automáticas son más fáciles, el registro y la depuración son mucho más fáciles.

Cuestiones relacionadas