Glasgow Haskell Compiler: Porovnání verzí

Smazaný obsah Přidaný obsah
mBez shrnutí editace
→‎Architektura: překlad část
Řádek 19:
GHC je napsáno v Haskellu (technikou [[bootstraping (informatika)|bootstrapingu]], samozavádění), ale [[runtime]] systém Haskellu, základní prvek kompilátoru,{{Kdo?}} je napsán v [[The C Programming Language|programovacím jazyce C]] a zprostředkovaném jazyce [[C-- (intermediate language)|C--]]. Většina kódu GHC je napsána pomocí [[literate programming|dokumentovaného programování]].
 
[[Front end]] GHC zahrnující [[Lexikální analýza|lexikální analýzu]], [[Syntaktická analýza|syntaktickou analýzu]] a kontrolu [[Datový typ|datových typů]] je navržen pro zachování co nejvyššího množství informace o zdrojovém kódu až do dokončení procesu [[Typové odvozování|typového odvozování]] s důrazem na poskytování jasných výpisů chybových stavů uživateli. V poslední fázi front endu se provádí odstranění [[Syntaktický cukr|desugarsyntaktickýho cukru]]??, který Haskell převede do písmenného??typovaného [[zprostředkovanýmezilehlý jazyk|zprostředkovanéhomezilehlého jazyka]] známého jako "Core" (jádro) (založeného na [[System F|systému F]], rozšířeného o výrazy <code>let</code> and <code>case</code>. Časem se jádro rozšířilo o podporu obecných algebraických datových typů, (GADT),je postaveno na rozšíření systému F a stává se z něj systém nazvaný System FC.
 
Podle zvyklosti z tradiční typově orientované kompilace se následně spouští zjednodušovač kódu GHC, neboli "[[middle end]]", který provádí většinu [[Optimalizace (informatika)|optimalizací]] implementovaných v GHC. Ty jsou strukturovány jako posloupnost úprav aplikovaných na [[zdrojový kód]] při úpravách jádra. Analýza a úpravy spouštěné v této fázi zahrnují [[demand analysis|požadavkovou analýzu]] (zobecněnou analýzu striktnosti), aplikaci uživatelsky definovaných pravidel [[rewrite rules]] (což zahrnuje soubor pravidel včetně standardních knihoven GHC, které vykonávají foldr/build [[Deforestation|fusion]]), [[unfolding]] (rozbalování – zahrnuje v tradičních překladačích tzv. "[[inlining]]"), [[let-floating]] – analýzu, jež rozhoduje, které funkční argumenty mohou být rozbaleny, [[constructed product result analysis|analýza CPR]], [[Partial evaluation|specializace]] [[Type class|přetížených]] funkcí, stejně jako soubor jednodušších místních úprav jako jsou [[constant folding]] a [[beta reductionbeta_redukce|beta redukce]].
 
Závěrečná úroveň sestává ze zjednodušovacích úprav jádra do [[STG (Spineless Tagless G-machine)]] (nižšího zprostředkovaného jazyka). Stejně jako jádro je i samo STG funkcionálním jazykem. STG je ekvivalentem [[teoretický model počítače|teoretického modelu počítače]] (stejně jako například [[Turingův stroj]] či [[RAM stroj|model RAM]]). [[Back end]] GHC provádí úpravy STG před překladem do C, C-- nebo [[strojový kód|strojového kódu]].