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
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads