Кіріспе

Haskell бағдарламалау тілі үшін компилятор

Глазгоу Haskell компиляторы (GHC) – функционалдық бағдарламалау тілі Haskell үшін түпнұсқа немесе машиналық кодты компилятор. Ол Haskell кодын жазу және тестілеу үшін көп платформалы бағдарламалық ортаны ұсынады және кодты жасау мен орындау процесін оңайлату үшін көптеген кеңейтімдерді, кітапханаларды және оптимизацияларды қолдайды. GHC – ең көп қолданылатын Haskell компиляторы. Бұл BSD лицензиясымен таратылатын тегін және ашық кодты бағдарламалық қамтамасыз ету. Бас дамытушылары – Саймон Пейтон Джонс және Саймон Марлоу.

Тарих

GHC 1989 жылы Глазго университетінде Кевин Хаммондтың Lazy ML (LML) бағдарламасында жазылған прототип ретінде бастама алды. Сол жылы Корделия Холл, Уилл Партен және Саймон Пейтон Джонс оның талдаушысынан басқа, прототипті Haskell тілінде толыққанды қайта жазды. Оның алғашқы бета нұсқасы 1991 жылдың 1 сәуірінде жарық көрді. Келесі нұсқаларға қатаңдық талдаушысы және monadic I/O, өзгертілетін массивтер, қаптамасыз дерек түрлері, бірмезгілді және параллель бағдарламалау үлгілері (мысалы, бағдарламалық транзакциялық жад және деректердің параллельдігі) сияқты тілге қосымша мүмкіндіктер енгізілді, сондай-ақ профильдеу құралы да қосылды. Пейтон Джонс және Марлоу кейін Кембридждегі Microsoft Research-ке көшіп, GHC-ті дамытуға жауапкершілікті жалғастырды. GHC құрамына 300-ден астам басқа да үлес қосушылардың коды кіреді. 2009 жылдан бері GHC-ге үшінші тараптан түсетін үлес Industrial Haskell Group тарапынан қаржыландырылуда.

GHC атаулары

Алғашқы нұсқаларынан бері ресми веб-сайт GHC-ні The Glasgow Haskell Compiler деп көрсетіп келді, ал орындалатын нұсқасының командалық жолында ол The Glorious Glasgow Haskell Compilation System деп танылады. Бұл деректер құжаттамада да көрсетілген. Алғашқыда оның ішкі атауы The Glamorous Glasgow Haskell Compiler болған.

Сәулет

GHC Haskell тілінде жазылған, бірақ бағдарламаларды іске қосу үшін қажетті Haskell-дің орындалу уақыты жүйесі C және C тілдерінде жазылған. GHC-нің алдыңғы бөлігі, лексикалық анализаторды, синтаксистік анализаторды және типтік тексеруді біріктіреді, типтік қорытынды аяқталғанға дейін бастапқы тіл туралы мүмкіндігінше көп ақпаратты сақтауға арналған, соның нәтижесінде пайдаланушыларға нақты қате хабарламаларын беру мақсатында. Типке бағытталған компиляция дәстүрінде GHC-нің оңайластырғышы немесе "ортаңғы бөлігі", GHC-де жүзеге асырылған көптеген оптимизациялар орындалатын жер, Core кодындағы бастапқы кодтың өзара түрлендірулерінің тізбегі ретінде құрылған. Бұл компилятор сатысында жүргізілетін талдаулар мен түрлендірулерге сұраныс талдауы (қатаңдық талдауының жалпыламасы), пайдаланушы анықтаған қайта жазу ережелерін қолдану (GHC стандартты кітапханаларына енгізілген және foldr/build біріктіруін орындайтын ережелер жиынтығы), ашылу (дәстүрлі компиляторларда "инлайнинг" деп аталады), let-айналым, қай функция аргументтерін қораптан шығаруға болатынын анықтайтын талдау, құрастырылған өнім нәтижелерін талдау, жүктемеленген функцияларды мамандандыру және тұрақты есептеу және бета-қысқарту сияқты қарапайым жергілікті түрлендірулер жиынтығы кіреді. Компилятордың артқы бөлігі Core кодын аралық STG тілі ("Spineless Tagless G машинасының қысқартылған атауы") арқылы C-нің ішкі өрнегіне түрлендіреді. C коды үш жолдың біреуін таңдай алады: GCC-мен компиляциялау үшін C коды ретінде басылады, тікелей машиналық кодқа (дәстүрлі "кодты жасау" фазасы) түрлендіріледі немесе LLVM-мен компиляциялау үшін LLVM IR-ге түрлендіріледі. Барлық үш жағдайда да, нәтижедегі машиналық код орындалатын файлды жасау үшін GHC орындалу уақыты жүйесімен байланыстырылады.

Тіл

GHC Haskell 98 және Haskell 2010 тілдерінің стандарттарына сай келеді. Ол сонымен қатар Haskell стандартына көптеген қосымша кеңейтімдерді қолдайды: мысалы, бағдарламалық транзакциялық жад (STM) кітапханасы, ол құрастырылатын жад транзакцияларын (Composable Memory Transactions) жүзеге асыруға мүмкіндік береді.

Типтік жүйелер кеңейтулері

Экспрессивті статикалық типтік жүйе – Хаскелдің маңызды ерекшеліктерінің бірі. Сәйкесінше, тілді кеңейту жұмысының көп бөлігі дерек түрлері мен типтік кластарға бағытталған. Глазго Хаскелл компиляторы теориялық System FC негізіндегі кеңейтілген типтік жүйені қолдайды. GHC бірнеше әртүрлі процессор архитектураларына да көшірілді.