sirve que programacion para mundo lenguaje instalar hola compilador haskell ghc

que - hola mundo en haskell



Distribuyendo un programa Haskell como fuente C (7)

¿Puedo compilarlo en C usando GHC y luego distribuirlo como fuente de C?

No, no es posible, pero puede crear fácilmente una interfaz entre haskell y c utilizando la interfaz de función externa (FFI) de Haskell.

Puedes tener más ejemplo here .

Supongamos que tengo un programa o biblioteca de Haskell que me gustaría hacer accesible a programadores que no sean de Haskeller, potencialmente programadores de C ¿Puedo compilarlo en C usando GHC y luego distribuirlo como fuente de C?

Si esto es posible, ¿puede alguien dar un ejemplo mínimo? (por ejemplo, un Makefile)

¿Es posible usar GHC para determinar automáticamente qué marcadores y encabezados del compilador se necesitan y luego agruparlos en una sola carpeta?

Básicamente, estoy interesado en poder escribir partes de programas en C y Haskell, y luego distribuirlos como un archivo, pero sin requerir que el objetivo tenga instalado GHC y Cabal.


Estoy interesado en poder escribir partes de programas en C y Haskell, y luego distribuirlos como un archivo, pero sin requerir que el objetivo tenga instalado GHC y Cabal.

Estás pidiendo una gran cantidad de infraestructura que es poco probable que encuentres. Recuerde que cualquier programa de Haskell, incluso si se va a compilar en C, es casi seguro que dependa de un sistema de tiempo de ejecución grande y complejo para su correcto funcionamiento. Como mínimo, ese sistema de tiempo de ejecución debe admitir la recolección de basura y la evaluación perezosa. Así que tienes más que un problema de traducción.

Le sugiero que aborde este problema como un problema de distribución de software. En lugar de un archivo comprimido, proporcione un paquete para su plataforma de distribución favorita (Debian, Red Hat, InstallShield, lo que sea). Personalmente, para reutilizar los esfuerzos de otras personas, buscaría algo que compruebe Cabal, que instale Cabal si es necesario, y luego use Cabal para instalar el resto de lo que sus usuarios necesitarán.


Supongamos que tengo un programa o biblioteca de Haskell que me gustaría hacer accesible a programadores que no sean de Haskeller, potencialmente programadores de C ¿Puedo compilarlo en C usando GHC y luego distribuirlo como fuente de C?

Puede compilar en C, pero la C resultante no es legible para el usuario. Es mejor escribir los archivos de encabezado y usar el excelente C FFI a su lado. En cualquier caso, distribuir la C generada parece una tarea de tontos.

Básicamente, estoy interesado en poder escribir partes de programas en C y Haskell, y luego distribuirlos como un archivo, pero sin requerir que el objetivo tenga instalado GHC y Cabal.

No conozco ninguna solución que no implique a GHC. Tendrías que distribuir al menos el RTS de Haskell.


Incluso si pudieras, no lo llamaría "fuente C". GHC puede usar C como parte de su sistema de compilación, pero el código C generado no es ni siquiera un poco legible. Incluso si pudiera leerse y entenderse, no tendría sentido modificarlo porque no hay manera (aparte de respaldar los cambios en Haskell) incorporar cualquier modificación hecha por hackers C en versiones futuras de su programa.

El término "fuente" significa el código que está escrito por un humano y que se utiliza para generar el programa. En este caso ese es el haskell. C generado por un compilador no es "código fuente", es una representación intermedia.


No puedes llegar allí con GHC. Incluso cuando se compila a través de C, GHC se basa en manipular el ensamblaje resultante para barajar segmentos, un enorme sistema de tiempo de ejecución y MUCHO equipaje.

Por otro lado, podría tener mejor suerte si lo que desea es compatible con un conjunto de características algo más limitadas del compilador JHC de John Meacham, que genera una salida en C bastante compacta.


Puedes hacer esto con jhc . Es un programa completo que optimiza el compilador hasta C. Sin embargo, no tiene todas las extensiones sofisticadas que admite GHC.


Sé que este es un post antiguo, pero todavía quería mencionar también ajhc . Ajhc bifurcó a jhc con los planes de agregar nuevas funciones y luego enviar las actualizaciones a jhc.