Domanda

AFAIK GHC è il compilatore più comune oggi, ma vedo anche che sono disponibili anche altri omiler. GHC è davvero la scelta migliore per tutti gli scopi o posso usare qualcos'altro? Ad esempio, ho letto che un compilatore (dimenticato il nome) fa meglio sulle ottimizzazioni, ma non implementa tutte le estensioni.

È stato utile?

Soluzione

GHC è di gran lunga il compilatore Haskell più utilizzato e offre il maggior numero di funzionalità. Ci sono altre opzioni, tuttavia, che a volte hanno alcuni benefici rispetto al GHC. Queste sono alcune delle alternative più popolari:

Abbracci - Hugs è un interprete (non credo che includa un compilatore) che è veloce ed efficiente. È anche noto per la produzione di messaggi di errore più facilmente comprensibili rispetto a GHC.

JHC - Un compilatore a programma intero. JHC può produrre un codice molto efficiente, ma non è ancora completo (questo è probabilmente quello a cui stai pensando). Nota che non è sempre più veloce di GHC, solo a volte. Non ho usato molto JHC perché non implementa classi di tipo multi-parametro, che uso pesantemente. Ho sentito che il codice sorgente è estremamente chiaro e leggibile, rendendo questo un buon compilatore su cui hackerare. JHC è anche più conveniente per il cross-pettina e di solito produce binari più piccoli.

Uhc - Il compilatore Utrecht Haskell è vicino a funzionalità (penso che l'unica cosa che manca sia i motivi N+K) per Haskell98. Implementa molte delle estensioni più popolari di GHC e anche alcune estensioni originali. Secondo il codice di documentazione non è ancora necessariamente ben ottimizzato. Questo è anche un buon compilatore su cui hackerare.

In breve, se si desidera un codice efficiente e funzionalità all'avanguardia, GHC è la soluzione migliore. Vale la pena provare JHC se non hai bisogno di MPTC o altre funzionalità. Le estensioni di UHC potrebbero essere avvincenti in alcuni casi, ma non mi contallerei ancora per un codice veloce.

Altri suggerimenti

  1. Haskell è definito in modo informale come la lingua gestita da GHC.
  2. GHC è il compilatore del Piattaforma Haskell.
  3. Cercare di ottimizzare il codice con GHC può ripagare più che passare a un altro compilatore poiché imparerai alcune capacità di ottimizzazione.
  4. Ci sono molti molto Estensioni utili in GHC. Non riesco proprio a vedere come vivere senza di loro.

Quindi, per qualcosa di grave (ad esempio non accademico, non sperimentale, non volatile o che utilizza molti pacchetti), la scelta pragmatica è andare con GHC.

Penso che valga la pena menzionarla NHC98. Dal blurb sulla homepage:

NHC98 è un compilatore piccolo, facile da installare, conforme agli standard per Haskell 98, il linguaggio di programmazione funzionale pigro. È molto portatile e mira a produrre piccoli eseguibili che funzionano in piccole quantità di memoria. Produce codice medio-veloce e la compilazione è di per sé abbastanza veloce. Viene inoltre fornito con un ampio supporto per gli strumenti per la compilation automatica, l'interfaccia in lingua straniera, la profilazione, la traccia e il debug del tempo.

A partire dal 2011, non c'è davvero altra scelta di GHC per la programmazione quotidiana. Il team HP incoraggia fortemente l'uso di GHC da parte di tutti i programmatori di Haskell.


Se sei un ricercatore, potresti usare l'uso di UHC, se sei su un sistema molto strano, potresti avere solo abbracci o NHC98 disponibili. Se sei un retro-fan come me, hai ancora installato GOFER, HBC e HBI:

$ hbi
Welcome to interactive Haskell98 version 0.9999.5c Pentium 2004 Jun 29!
Loading prelude... 1 values, 4 libraries, 200 types found.
Type "help;" to get help.
> help;
        HBI  -- Interactive Haskell B 1.3

HBI è bello perché a) implementa Haskell B e B) supporta la lingua completa nella riga di comando:

> data L a = I | X a (L a) deriving Show;
data L b = I | X b (L b) deriving (Show)
> X 4 (X 3 I);
X 4 (X 3 I)

E il compilatore produce un codice abbastanza buono, anche 15 anni dopo.

GHC è un compilatore solido. Dire che è la scelta migliore per tutti gli scopi è molto forte. E cercare uno strumento del genere è inutile.

Usalo, e se hai davvero bisogno di qualcos'altro, allora a quel punto probabilmente saprai di cosa si tratta.

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