Su Windows, GHC è distribuito con gcc e g ++, ad es. sotto ghc-7.6.3\mingw\bin
. Da download page, si nota anche sotto il download binario di Windows che la build per Windows "include anche il supporto per la compilazione di file C++."Perché GHC è distribuito con gcc e g ++?
Posso immaginare che la distribuzione di questi compilatori è solo per comodità, dal momento che Windows non ne viene fornito. Potrei anche immaginare che sia necessario per usare l'FFI, ma non ne sono sicuro al 100%. Ad esempio, sebbene GHC compili i file .c e .cpp usando i propri compilatori gcc/g ++, GHC anche provides options per scegliere quale compilatore e linker vuoi. E in effetti, puoi specificare il tuo gcc/g ++ e sembra funzionare. Puoi anche tagliare GHC fuori dal ciclo un po 'più avanti compilando i file .c/.cpp in anticipo e invocando GHC solo per compilare il codice Haskell e collegarlo tutto usando -pgml
(sebbene l'effetto complessivo sia lo stesso di usare -pgmc
e -pgml
).
Ora che sembra al lavoro, ma lo fa affidamento sulla fortuna pura che si specifica -pgml
e -pgmc
essere una versione di gcc che è compatibile con quanto GHC ha in mente? In altre parole, quando utilizzo la FFI, devo davvero solo compilare e collegare tutto con le chiamate GHC?
L'utilizzo di GHC per tutto è generalmente il modo più semplice. E (potrei sbagliarmi) se ricordo male, le cose non funzionano molto bene se si tenta di usare MSVC (e ho la vaga memoria che anche Cygwin ha problemi). –