Toppfrågor
Tidslinje
Chatt
Perspektiv

Glasgow Haskell Compiler

Från Wikipedia, den fria encyklopedin

Remove ads

The Glorious Glasgow Haskell Compilation System[1], GHC, är en kompilator för det funktionella programmeringsspråket Haskell. Huvudutvecklare för GHC är Simon Peyton-Jones och Simon Marlow som båda arbetar på Microsoft Research i Cambridge, England. GHC är fri mjukvara[2] och finns tillgängligt till flera olika processortyper och operativsystem [3]

Implementation

GHC är skriven i Haskell, men dess runtime-system är skrivet i C och C--.[källa behövs] lexikalanalys, parser och typechecker, är designade för att behålla så mycket information om koden som möjligt, för att ge klarare felmeddelanden. [4] Efter typcheckning kompileras koden till GHC Core, som ett mellanliggande språk. GHC Core (eller bara Core) är baserat på System F med vissa utökningar.[5]

Därefter sker förenklingar av koden, och även majoriteten av optimeringarna GHC utförs som omskrivningar av Core-koden. Dessa omskrivningar inkluderar strikthetsanalys, applicering av användarspecificerade rewrite-regler, inlining, specialisering av funktioner, samt enklare omskrivningar som short-cut-fusion och betareduktion.[6]

Den resulterande Core-koden kompileras sedan till en intern variant av C-- som sedan antingen skrivs till C-kod för kompilering via GCC, eller kompileras direkt till maskinkod, eller konverteras till LLVM-kod för kompilering via LLVM. Med alla tre metoderna länkas den kompilerade koden till GHC:s runtime-system för att producera en exekverbar fil.

Remove ads

Språk

GHC implementerar hela språkstandarden Haskell 2010 med flera tillägg. GHC har bra support för parallellism genom bland annat transaktionellt minne.

Tillägg

  • Möjlighet till strikt evaluering av värden, matchningar och fält.
  • Template Haskell (TH), ett system för metaprogrammering. Med TH typcheckas och utvärderas Haskell-uttryck vid kompilering, och kan manipuleras och/eller användas av det program som kompileras.
  • Implicit parallellism, genom annoteringar. Detta innebär att parallella beräkningar kan ske på flera kärnor samtidigt utan att programmeraren skapat nya trådar.
  • Utökningar av typsystemet genom bland annat GADTs, typfamiljer och existentiella typer.
Remove ads

Referenser

Externa länkar

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads