Glasgow Haskell Compiler
Author
Albert FloresThe Glorious Glasgow Haskell Compilation System, známý pod jmény Glasgow Haskell Compiler či GHC, je open source kompilátor do strojového kódu pro funkcionální programovací jazyk Haskell. Hlavními vývojáři jsou Simon Peyton Jones a Simon Marlow.
Historie
Vývoj GHC původně začal v roce 1989 jako prototyp napsaný v LML Kevinem Hammondem na Universitě Glasgow. Později, ve stejném roce, byl tento prototyp kromě jeho parseru kompletně přepsán v Haskellu Cordelií Hallovou, Willem Partainem a Simonem Peytonem Jonesem. +more První beta verze byla vydána 1. dubna 1991 a následovaly další rozšiřující verze, přidávající např. analýzu striktnosti stejně jako jazyková rozšíření, jako monadický I/O, proměnlivá pole, unboxed datové typy a výkonovou analýzu. Peyton Jones a Simon Marlow později přešli ke společnosti Microsoft Research v Cambridge v Anglii, kde byli hlavními osobami zodpovědnými za vývoj GHC. GHC také obsahovalo programový kód od dalších šedesáti programátorů, kteří se spolupodíleli na jeho vývoji.
Architektura
GHC je napsáno v Haskellu (technikou bootstrapingu, samozavádění), ale runtime systém Haskellu, základní prvek kompilátoru, je napsán v programovacím jazyce C a zprostředkovaném jazyce C--. Většina kódu GHC je napsána pomocí dokumentovaného programování.
Front end GHC zahrnující lexikální analýzu, syntaktickou analýzu a kontrolu 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é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ýho cukru, který Haskell převede do typovaného mezilehlého jazyka (mezikódu . +more) známého jako "Core" (jádro) (založeného na systému F, rozšířeného o výrazy let and case. Č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 optimalizací implementovaných v GHC. Ty jsou strukturovány jako posloupnost úprav aplikovaných na zdrojový kód při úpravách jádra. +more Analýza a úpravy spouštěné v této fázi zahrnují 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 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, analýza CPR, specializace přetížených funkcí, stejně jako soubor jednodušších místních úprav jako jsou constant folding a 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. +more STG je ekvivalentem teoretického modelu počítače (stejně jako například Turingův stroj či model RAM). Back end GHC provádí úpravy STG před překladem do C, C-- nebo strojového kódu.
Jazyk
GHC pracuje podle posledního standardu jazyka nazvaného Haskell 2010. Podporuje také mnoho volitelných rozšíření, jako jsou například: knihovna STM, která umožňuje kontrolovat zápisy do sdílené paměti a další.
Reference
Externí odkazy
https://www.haskell.org/ghc/ - domácí stránka GHC