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 redigera

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.

Språk redigera

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 redigera

  • 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.

Referenser redigera

Noter redigera

  1. ^ ghc --version
  2. ^ GHC:s licens
  3. ^ Platforms - GHC Trac
  4. ^ Hudak, P.; Hughes, J.; Peyton Jones, S.; Wadler, P. (June 2007). "A history of Haskell: being lazy with class". Proc. Third ACM SIGPLAN History of Programming Languages Conference (HOPL-III). 
  5. ^ Sulzmann, M.; M. M. T. Chakravarty; S. Peyton Jones; K. Donnelly (January 2007). "System F with Type Equality Coercions". Proc. Workshop on Types in Language Design and Implementation (TLDI). 
  6. ^ Peyton Jones, S. (April 1996). "Compiling Haskell by program transformation: a report from the trenches". Proc. European Symposium on Programming (ESOP). 

Källor redigera

Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Glasgow Haskell Compiler, 28 december 2010.

Externa länkar redigera