Domanda

dire che ho un programma di Haskell o libreria che mi piacerebbe rendere accessibile ai non Haskellers, potenzialmente programmatori C. Posso compilarlo in C usando GHC e quindi distribuire questo come una sorgente C?

Se questo è possibile, qualcuno può fornire un esempio minimo? (Ad esempio un Makefile)

E 'possibile utilizzare GHC per determinare automaticamente quali flag e le intestazioni compilatore e aveva bisogno, e allora forse fascio presente in una singola cartella?

Fondamentalmente mi interessa poter scrivere porzioni di programmi in C e Haskell, e la distribuisce come un archivio, ma senza richiedere l'obiettivo di avere GHC e Cabal installati.

È stato utile?

Soluzione

  

Mi interessa essere in grado di scrivere porzioni di programmi in C e Haskell, e quindi la distribuzione come un tarball, ma senza richiedere l'obiettivo di avere GHC e Cabal installati.

Si sta chiedendo un sacco di infrastrutture che è improbabile da trovare. Ricorda che qualsiasi programma Haskell, anche se sta per essere compilato per C, è quasi certo di dipendere da un grande sistema di run-time complesso per il suo corretto funzionamento. Come minimo, tale sistema runtime deve sostenere raccolta dei rifiuti e valutazione pigra. In modo da avere più di un problema di traduzione.

Vi suggerisco di affrontare questo problema come un problema di distribuzione del software. Piuttosto che un tarball, fornire un pacchetto per la vostra piattaforma di distribuzione favorita (Debian, Red Hat, InstallShield, a prescindere). Personalmente, al fine di riutilizzare altri sforzi della gente, vorrei puntare a qualcosa che verifica la presenza di Cabal, installa Cabal, se necessario, quindi utilizza Cabal per installare il resto di ciò che avranno bisogno gli utenti.

Altri suggerimenti

Si può fare questo con JHC . Si tratta di un compilatore ottimizzare programma completo che compila fino a C. Non ha tutte le estensioni di fantasia che GHC supporta però.

Anche se si potesse, io non lo chiamerei "fonte di C". GHC può utilizzare C come parte del suo sistema di compilazione, ma il codice C generato non è nemmeno un po 'leggibile. Anche se potrebbe essere letto e compreso, non avrebbe alcun senso per modificarlo, perché non c'è modo (a parte di back-porting delle modifiche in Haskell) per incorporare eventuali modifiche apportate dal C hacker nelle future versioni del programma.

Il termine "fonte" si intende il codice che è stato scritto da un essere umano e utilizzato per generare il programma. In questo caso che è Haskell. C generato da un compilatore non è "codice sorgente", è una rappresentazione intermedia.

Non si può arrivare con GHC. Anche quando si compila tramite C, GHC si basa sulla manipolazione l'assembly risultante per mischiare i segmenti in giro, un sistema di runtime enorme e un sacco di bagagli.

D'altra parte, si potrebbe avere più fortuna se quello che vuoi è supportato da un po 'più limitata set di funzionalità di compilatore JHC di John Meacham, tuttavia, che genera un output C abbastanza compatto.

So che questo è un vecchio post, ma ho ancora voglia di parlare anche ajhc . Ajhc biforcuta JHC con i piani di aggiunta di nuove funzionalità e poi spingere gli aggiornamenti di nuovo al JHC.

  

dire che ho un programma di Haskell o libreria che mi piacerebbe rendere accessibile ai non Haskellers, potenzialmente programmatori C. Posso compilarlo in C usando GHC e quindi distribuire questo come una fonte C

È possibile compilare a C, ma il C risultante non è leggibile. È meglio la scrittura di file di intestazione e utilizzando l'eccellente FFI C accanto ad esso. In ogni caso, la distribuzione del C generato sembra prendono in giro.

  

Fondamentalmente mi interessa poter scrivere porzioni di programmi in C e Haskell, e la distribuisce come un archivio, ma senza richiedere l'obiettivo di avere GHC e Cabal installati.

Non so di eventuali soluzioni che non comportano GHC. Avresti distribuire almeno l'Haskell RTS.

  

posso compilare in C usando GHC e quindi distribuire questo come una sorgente C?

No, non è possibile, ma si può facilmente creare un'interfaccia tra Haskell e C utilizzando l'interfaccia Funzione Estero (FFI) di Haskell.

È possibile avere più esempio qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top