coldwa.st
Tutte le guideProgrammazioneWebDatiStrumentiDatabaseHaskellConcettiCabal e buildToolchainCompilatorePrestazioniEditor e HLS

Haskell · compilatore · toolchain

GHC, il Glasgow Haskell Compiler: una guida pratica 2026

Di ColdwastAggiornato il 14 giugno 20267 min di lettura#haskell#ghc#compiler
Codice sorgente sullo schermo
GHC trasforma il tuo sorgente Haskell in binari nativi veloci — e alimenta GHCi e l'intera toolchain.

GHC — il Glasgow Haskell Compiler — è il compilatore standard di Haskell, e di fatto il motore sotto tutto il resto dell'ecosistema: Cabal, Stack e l'Haskell Language Server lo pilotano tutti. Questa guida spiega cos'è GHC, come installarlo in modo pulito nel 2026, come usare GHCi, quali opzioni di compilazione contano davvero e come si integra con gli strumenti di build.

Cos'è GHC

GHC compila il sorgente Haskell in eseguibili nativi ottimizzati e fornisce GHCi, un REPL interattivo per esplorare il codice. È un compilatore maturo e fortemente ottimizzante, dotato di un ricco sistema di tipi, e fornisce le librerie (base e affini) su cui poggiano i tuoi programmi. Quasi tutto il resto dell'attrezzatura Haskell è, a un certo livello, un wrapper che invoca GHC con i giusti argomenti.

Installare GHC (usa GHCup)

Non installare GHC a mano. Il percorso pulito e supportato è GHCup, che gestisce più versioni di GHC e ti permette di passare dall'una all'altra per progetto — vedi la nostra guida all'installazione di GHCup. In breve:

ghcup install ghc recommended
ghcup set ghc 9.10.1
ghc --version

Perché la gestione delle versioni conta: i progetti veri fissano versioni GHC specifiche, e GHCup rende indolore averne più di una installata.

GHCi: il REPL interattivo

Un computer portatile aperto che mostra del codice su una scrivania
Un computer portatile aperto che mostra del codice — GHCi ti permette di caricare moduli e testare funzioni in modo interattivo.
ghci                 # start the REPL
:load Main.hs        # load a module (:l)
:type foldr          # show a type (:t)
:reload              # reload after edits (:r)
:quit                # exit (:q)

GHCi è il luogo in cui avviene realmente la maggior parte dello sviluppo Haskell — caricare un modulo, testare funzioni, ispezionare tipi, iterare.

Le opzioni che contano

  • -O2 — ottimizzazione completa per le build di release (compilazione più lenta, esecuzione più veloce). Il default è -O0.
  • -Wall — attiva l'ampio insieme di avvisi; abbinalo a -Werror in CI per fallire sugli avvisi.
  • -threaded — collega il runtime threaded, necessario per vera concorrenza/parallelismo.
  • -j — compila i moduli in parallelo (vedi come le build Haskell sfruttano i tuoi core).
  • -rtsopts +RTS -N — lascia che il programma usi più core a runtime.

Compila direttamente con ghc -O2 Main.hs, ma per tutto ciò che supera un singolo file piloterai GHC tramite uno strumento di build.

Come GHC si integra con Cabal e Stack

Raramente chiami ghc a mano su un progetto. Cabal e Stack risolvono le dipendenze e invocano GHC con le opzioni giuste e il giusto database di pacchetti per te — vedi il contesto del modello di build in Cabal 2.0 e la storia dell'isolamento nelle sandbox Cabal. Anche l'Haskell Language Server esegue GHC dietro le quinte per fornire al tuo editor tipi e diagnostiche — vedi la nostra guida HLS.

FAQ

GHC è l'unico compilatore Haskell? È di gran lunga il più dominante e standard nel 2026; esistono altri compilatori, ma GHC è quello a cui mirano praticamente tutti gli strumenti e le librerie.

Come installo GHC? Tramite GHCup — gestisce le versioni ed è l'installer raccomandato su haskell.org.

Cosa fa -O2? Attiva l'ottimizzazione completa: compilazione più lunga, esecuzione più veloce. Usalo per le release; il default -O0 va bene per un'iterazione rapida.

Bisogna chiamare GHC direttamente? Raramente — Cabal o Stack lo invocano per te sui progetti veri. ghc diretto è comodo per gli script a file singolo.

Guida indipendente, mantenuta dalla community. coldwa.st è un sito di risorse di programmazione; questo articolo è uno scritto nuovo e originale su GHC e l'attuale toolchain Haskell, senza affiliazione con i manutentori del progetto né scritto da loro. I comandi riflettono il comportamento documentato di GHC/GHCup — consulta la documentazione ufficiale per gli ultimi numeri di versione.