Glasgow Haskell Compiler

Från Wikipedia
Hoppa till: navigering, sök

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 | redigera wikitext]

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 | redigera wikitext]

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 | redigera wikitext]

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

Referenser[redigera | redigera wikitext]

Noter[redigera | redigera wikitext]

  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 | redigera wikitext]

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

Externa länkar[redigera | redigera wikitext]