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]
Innehåll |
Implementation [redigera]
GHC är skriven i Haskell, men dess runtime-system är skrivet i C och C--. Frontenden, inklusive lexer, 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 typecheckning omvandlas koden till ett mellanliggande språk "Core" som är internt för kompilatorn. 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 transformeringar av Core-koden. Dessa transformeringar inkluderar strikthetsanalys, applicering av användarspecificerade rewrite-regler, inlining, specialisering av funktioner, samt enklare transformeringar som constant folding och betareduktion.[6]
Backenden konverterar sedan koden 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 Haskell98 med flera tillägg. GHC har bra support för parallellism genom bland annat Software Transactional Memory.
Tillägg [redigera]
- Möjlighet till strikt utvärdering 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.
Källor [redigera]
- ^ 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).
- Denna artikel är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Glasgow Haskell Compiler