Glasgow Haskell Compiler
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.
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.
Referenser
Noter
- ^ ghc --version
- ^ GHC:s licens
- ^ Platforms - GHC Trac
- ^ 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).
- ^ 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).
- ^ Peyton Jones, S. (April 1996). "Compiling Haskell by program transformation: a report from the trenches". Proc. European Symposium on Programming (ESOP).
Källor
- Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Glasgow Haskell Compiler, 28 december 2010.