ग्लासगो हास्केल कंपाइलर

From alpha
Jump to navigation Jump to search

The Glasgow Haskell Compiler
मूल लेखकKevin Hammond
डेवलपर(ओं)The Glasgow Haskell Team[1]
आरंभिक रिलीजDecember 1992 (1992-12)[2]
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)[3]
इसमें लिखा हुआHaskell and C
ऑपरेटिंग सिस्टमLinux, OS X 10.7 Lion and later, Windows 2000 and later, FreeBSD
प्लेटफॉर्मx86, x86-64, ARM
में उपलब्धEnglish
प्रकारCompiler
लाइसेंसNew BSD License
वेबसाइटwww.haskell.org/ghc/

ग्लासगो हास्केल संकलक (जीएचसी) एक खुला स्रोत सॉफ्टवेयर है। कार्यात्मक प्रोग्रामिंग प्रोग्रामिंग लैंग्वेज [[ हास्केल (प्रोग्रामिंग भाषा ) ]] के लिए ओपन-सोर्स मशीन भाषा कंपाइलर है।[4] यह हास्केल कोड के लेखन और परीक्षण के लिए एक क्रॉस-प्लेटफ़ॉर्म वातावरण प्रदान करता है और यह कई एक्सटेंशन, लाइब्रेरी और ऑप्टिमाइज़ेशन का समर्थन करता है जो कोड बनाने और निष्पादित करने की प्रक्रिया को सुव्यवस्थित करता है। जीएचसी सबसे अधिक इस्तेमाल किया जाने वाला हास्केल कंपाइलर है।[5] प्रमुख डेवलपर्स साइमन पीटन जोन्स और साइमन मार्लो हैं।

इतिहास

GHC मूल रूप से 1989 में एक प्रोटोटाइप के रूप में शुरू हुआ, जिसे ग्लासगो विश्वविद्यालय में केविन हैमंड द्वारा आलसी एमएल | एलएमएल (लेज़ी एमएल) में लिखा गया था। उस वर्ष बाद में, कॉर्डेलिया हॉल, विल पार्टैन और साइमन पेटन जोन्स द्वारा इसके पार्सर को छोड़कर हास्केल में प्रोटोटाइप को पूरी तरह से फिर से लिखा गया था। इसका पहला बीटा रिलीज़ 1 अप्रैल 1991 को हुआ था और बाद के रिलीज़ में एक सख्त विश्लेषण के साथ-साथ कार्यात्मक प्रोग्रामिंग में मोनाड्स जैसे भाषा एक्सटेंशन भी शामिल थे। मेमोरी और डेटा समानता ) और एक प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग)।[2] पीटन जोन्स, साथ ही मार्लो, बाद में कैंब्रिज, इंग्लैंड में माइक्रोसॉफ्ट रिसर्च में चले गए, जहां वे जीएचसी के विकास के लिए मुख्य रूप से जिम्मेदार बने रहे। जीएचसी में तीन सौ से अधिक अन्य योगदानकर्ताओं के कोड भी शामिल हैं।[1] 2009 से, GHC में तीसरे पक्ष के योगदान को औद्योगिक हास्केल समूह द्वारा वित्त पोषित किया गया है।[6]


जीएचसी नाम

चूंकि जल्दी आधिकारिक वेबसाइट जारी करता है[7] GHC को द ग्लासगो हास्केल कंपाइलर के रूप में संदर्भित किया गया है, जबकि निष्पादन योग्य संस्करण कमांड में इसे द ग्लोरियस ग्लासगो हास्केल संकलन प्रणाली के रूप में पहचाना गया है।[8] यह दस्तावेज़ीकरण में परिलक्षित हुआ है।[9] प्रारंभ में, इसका आंतरिक नाम द ग्लैमरस ग्लासगो हास्केल कंपाइलर था।[10]


आर्किटेक्चर

GHC ही बूटस्ट्रैपिंग (संकलक) है,[11] लेकिन प्रोग्राम चलाने के लिए जरूरी हास्केल के लिए रन-टाइम सिस्टम सी (प्रोग्रामिंग भाषा) और सी-- में लिखा गया है।

जीएचसी के कंपाइलर्स # फ्रंट एंड- लेक्सिकल विश्लेषण, पार्सर और टाइप सिस्टम को शामिल करते हुए- उपयोगकर्ताओं को स्पष्ट त्रुटि संदेश प्रदान करने के लक्ष्य की ओर, टाइप अनुमान पूरा होने तक स्रोत भाषा के बारे में अधिक से अधिक जानकारी को संरक्षित करने के लिए डिज़ाइन किया गया है।[2]टाइप चेकिंग के बाद, हास्केल कोड सिंटैक्टिक चीनी को एक टाइप की गई इंटरमीडिएट भाषा में कोर के रूप में जाना जाता है (सिस्टम एफ पर आधारित, के साथ विस्तारित) let और case भाव)। कोर को इसके प्रकार प्रणाली में सामान्यीकृत बीजगणितीय डेटाटाइप का समर्थन करने के लिए विस्तारित किया गया है, और अब यह सिस्टम एफ के विस्तार पर आधारित है जिसे सिस्टम एफ के रूप में जाना जाता हैC.[12] प्रकार-निर्देशित संकलन की परंपरा में, जीएचसी का सरलीकरण, या मध्य अंत, जहां जीएचसी में कार्यान्वित अधिकांश कंपाइलर अनुकूलन किया जाता है, स्रोत कोड की एक श्रृंखला के रूप में संरचित है। सोर्स कोड पर स्रोत-से-स्रोत कार्यक्रम परिवर्तन । इस संकलक चरण में किए गए विश्लेषण और परिवर्तनों में मांग विश्लेषण (कठोरता विश्लेषण का एक सामान्यीकरण), उपयोगकर्ता-परिभाषित पुनर्लेखन नियमों का अनुप्रयोग (जीएचसी के मानक पुस्तकालयों में शामिल नियमों का एक सेट शामिल है जो फ़ोल्डर / निर्माण वनों की कटाई (कंप्यूटर विज्ञान) करता है), अनफॉल्डिंग (अधिक पारंपरिक कंपाइलरों में इनलाइन िंग कहा जाता है), चलो-तैरना , एक विश्लेषण जो यह निर्धारित करता है कि कौन से फ़ंक्शन तर्कों को अनबॉक्स किया जा सकता है, निर्मित उत्पाद परिणाम विश्लेषण , वर्ग टाइप करें फ़ंक्शंस का आंशिक मूल्यांकन , साथ ही सरल स्थानीय परिवर्तनों का एक सेट जैसे निरंतर तह और बीटा कमी [13] कंपाइलर का बैक एंड कोर कोड को इंटरमीडिएट लैंग्वेज STG (स्पिनलेस टैगलेस जी-मशीन के लिए संक्षिप्त) के माध्यम से C-- के आंतरिक प्रतिनिधित्व में बदल देता है।[14] सी-- कोड तब तीन मार्गों में से एक ले सकता है: इसे या तो जीएनयू कंपाइलर संग्रह के साथ संकलन के लिए सी कोड के रूप में मुद्रित किया जाता है, सीधे मूल मशीन कोड (पारंपरिक कोड जनरेशन (संकलक) चरण) में परिवर्तित किया जाता है, या एलएलवीएम और में परिवर्तित किया जाता है एलएलवीएम के साथ संकलन। सभी तीन मामलों में, परिणामी मूल कोड को एक निष्पादन योग्य बनाने के लिए अंततः GHC रनटाइम सिस्टम के साथ जोड़ा जाता है।

भाषा

GHC भाषा मानकों का अनुपालन करता है, हास्केल 98 दोनों[15] और हास्केल 2010।[16] यह हास्केल मानक के लिए कई वैकल्पिक एक्सटेंशन का भी समर्थन करता है: उदाहरण के लिए, सॉफ्टवेयर ट्रांजैक्शनल मेमोरी (एसटीएम) लाइब्रेरी, जो कंपोज़ेबल मेमोरी लेनदेन की अनुमति देता है।

=== हास्केल === के लिए एक्सटेंशन हास्केल के लिए कई एक्सटेंशन प्रस्तावित किए गए हैं। ये एक्सटेंशन ऐसी सुविधाएँ प्रदान करते हैं जिनका वर्णन भाषा विनिर्देश में नहीं किया गया है, या वे मौजूदा निर्माणों को फिर से परिभाषित करते हैं। इस प्रकार, प्रत्येक एक्सटेंशन को सभी हास्केल कार्यान्वयन द्वारा समर्थित नहीं किया जा सकता है। प्रयास जारी है[17] एक्सटेंशन का वर्णन करने और उन्हें चुनने के लिए जिन्हें भाषा विनिर्देश के भविष्य के संस्करणों में शामिल किया जाएगा।

विस्तार[18] ग्लासगो हास्केल कंपाइलर द्वारा समर्थित में शामिल हैं:

  • अनबॉक्स्ड प्रकार और संचालन। ये डायनेमिक आवंटन या आस्थगित मूल्यांकन की संभावना के सूचक के संकेत के बिना, अंतर्निहित हार्डवेयर के आदिम डेटाटाइप का प्रतिनिधित्व करते हैं। इन प्रकारों का उपयोग करते हुए कोडित होने पर संख्यात्मक रूप से गहन कोड काफी तेज हो सकता है।
  • मूल्य, पैटर्न बाइंडिंग, या डेटाटाइप फ़ील्ड के लिए सख्त मूल्यांकन निर्दिष्ट करने की क्षमता।
  • मॉड्यूल, पैटर्न, सूची समझ , ऑपरेटरों, रिकॉर्ड और टुपल्स के साथ काम करने के लिए अधिक सुविधाजनक सिंटैक्स।
  • तीर (कार्यात्मक प्रोग्रामिंग) और पुनरावर्ती रूप से परिभाषित मोनाड (कार्यात्मक प्रोग्रामिंग) मूल्यों के साथ कंप्यूटिंग के लिए सिंटैक्टिक चीनी। ये दोनों अवधारणाएँ सन्यासी का विस्तार करती हैं doमानक हास्केल में प्रदान किया गया नोटेशन।
  • नीचे वर्णित प्रकारों और प्रकारों की एक महत्वपूर्ण रूप से अधिक शक्तिशाली प्रणाली।
  • टेम्पलेट हास्केल , संकलन-समय मेटाप्रोग्रामिंग के लिए एक प्रणाली। एक प्रोग्रामर अभिव्यक्ति लिख सकता है जो हास्केल कोड को सार वाक्य रचना का पेड़ के रूप में उत्पन्न करता है। संकलन समय पर इन अभिव्यक्तियों को टाइपचेक और मूल्यांकन किया जाता है; उत्पन्न कोड को तब शामिल किया जाता है जैसे कि यह सीधे प्रोग्रामर द्वारा लिखा गया हो। परिभाषाओं पर प्रतिबिंब (कंप्यूटर विज्ञान) की क्षमता के साथ, यह भाषा को और विस्तार के लिए एक शक्तिशाली उपकरण प्रदान करता है।
  • अर्ध-उद्धरण, जो उपयोगकर्ता को अभिव्यक्ति और पैटर्न के लिए नए ठोस सिंटैक्स को परिभाषित करने की अनुमति देता है। अर्ध-उद्धरण तब उपयोगी होता है जब हास्केल में लिखा गया मेटाप्रोग्राम हास्केल के अलावा किसी अन्य भाषा में लिखे गए कोड में हेरफेर करता है।
  • सामान्य प्रोग्रामिंग टाइपक्लासेस, जो केवल उन प्रकारों की बीजगणितीय संरचना के संदर्भ में कार्यों को निर्दिष्ट करते हैं जिन पर वे काम करते हैं।
  • कई सीपीयू कोर का उपयोग करके भावों का समानांतर मूल्यांकन। इसके लिए स्पष्ट रूप से स्पॉइंग थ्रेड्स की आवश्यकता नहीं होती है। प्रोग्रामर द्वारा प्रदान किए गए एनोटेशन के आधार पर कार्य का वितरण निहित रूप से होता है।
  • कम्पाइलर निर्देश (प्रोग्रामिंग) इनलाइन विस्तार और विशेष प्रकार के कार्यों की विशेषज्ञता जैसे अनुकूलन को निर्देशित करने के लिए।
  • अनुकूलन योग्य पुनर्लेखन नियम। प्रोग्रामर नियम प्रदान कर सकता है कि एक अभिव्यक्ति को समकक्ष लेकिन अधिक कुशलता से मूल्यांकन अभिव्यक्ति के साथ कैसे बदला जाए। संपूर्ण अनुप्रयोग-स्तरीय कोड में बेहतर प्रदर्शन प्रदान करने के लिए कोर डेटास्ट्रक्चर लाइब्रेरी के भीतर इनका उपयोग किया जाता है।[19]
  • रिकॉर्ड डॉट सिंटैक्स। एक (संभावित रूप से नेस्टेड) ​​रिकॉर्ड के क्षेत्रों तक पहुँचने के लिए सिंटैक्टिक शुगर प्रदान करता है जो कई अन्य प्रोग्रामिंग भाषाओं के सिंटैक्स के समान है।[20]


सिस्टम एक्सटेंशन टाइप करें

एक अभिव्यंजक स्थिर प्रकार प्रणाली हास्केल की प्रमुख परिभाषित विशेषताओं में से एक है। तदनुसार, भाषा के विस्तार में अधिकांश कार्य डेटा प्रकार और प्रकार वर्गों की ओर निर्देशित किया गया है।

ग्लासगो हास्केल कंपाइलर सैद्धांतिक सिस्टम एफ पर आधारित एक विस्तारित प्रकार की प्रणाली का समर्थन करता हैC.[12] टाइप सिस्टम के प्रमुख एक्सटेंशन में शामिल हैं:

  • पैरामीट्रिक बहुरूपता#उच्च-श्रेणी बहुरूपता|मनमाना-श्रेणी और पैरामीट्रिक बहुरूपता#अप्रत्याशित_बहुरूपता प्रकार बहुरूपता। अनिवार्य रूप से, एक बहुरूपी फ़ंक्शन या डेटाटाइप कन्स्ट्रक्टर की आवश्यकता हो सकती है कि इसके तर्कों में से एक ही बहुरूपी है।
  • सामान्यीकृत बीजगणितीय डेटा प्रकार । पॉलीमॉर्फिक डेटाटाइप का प्रत्येक कंस्ट्रक्टर जानकारी को परिणामी प्रकार में एन्कोड कर सकता है। एक फ़ंक्शन जो इस प्रकार पर पैटर्न-मिलान करता है, डेटा पर अधिक विशिष्ट संचालन करने के लिए प्रति-निर्माता प्रकार की जानकारी का उपयोग कर सकता है।
  • अस्तित्वगत प्रकार । इनका उपयोग कुछ डेटा को उस डेटा पर संचालन के साथ बंडल करने के लिए किया जा सकता है, इस तरह से कि संचालन का उपयोग अंतर्निहित डेटा के विशिष्ट प्रकार को उजागर किए बिना किया जा सकता है। ऐसा मान वस्तु (कंप्यूटर विज्ञान) के समान है जैसा कि वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में पाया जाता है।
  • डेटा प्रकार जिनमें वास्तव में कोई मान नहीं होता है। ये टाइप-लेवल मेटाप्रोग्रामिंग में डेटा का प्रतिनिधित्व करने के लिए उपयोगी हो सकते हैं।
  • प्रकार परिवार: प्रकार से प्रकार तक उपयोगकर्ता परिभाषित कार्य। जबकि पैरामीट्रिक बहुरूपता हर प्रकार के तात्कालिकता के लिए समान संरचना प्रदान करता है, प्रकार के परिवार कार्यान्वयन के साथ तदर्थ बहुरूपता प्रदान करते हैं जो तात्कालिकता के बीच भिन्न हो सकते हैं। उपयोग के मामलों में सामग्री-जागरूक अनुकूलन कंटेनर और प्रकार-स्तरीय मेटाप्रोग्रामिंग शामिल हैं।
  • अंतर्निहित फ़ंक्शन पैरामीटर जिनमें गतिशील गुंजाइश (प्रोग्रामिंग) है। इन्हें टाइप क्लास कंस्ट्रेंट्स की तरह ही टाइप्स में दर्शाया जाता है।
  • रैखिक प्रकार (जीएचसी 9.0)

प्रकार वर्गों से संबंधित एक्सटेंशन में शामिल हैं:

  • एक प्रकार के वर्ग को एक से अधिक प्रकारों पर पैरामीट्रिज किया जा सकता है। इस प्रकार एक प्रकार का वर्ग न केवल प्रकारों के एक सेट का वर्णन कर सकता है, बल्कि प्रकारों पर एक एन-आरी परिमित संबंध भी हो सकता है।
  • कार्यात्मक निर्भरताएँ , जो उस संबंध के कुछ हिस्सों को प्रकारों पर गणितीय कार्य (गणित) होने के लिए विवश करती हैं। यही है, बाधा निर्दिष्ट करती है कि पैरामीटर के कुछ अन्य सेट तय होने के बाद कुछ प्रकार के वर्ग पैरामीटर पूरी तरह से निर्धारित होते हैं। यह उन स्थितियों में प्रकार के अनुमान की प्रक्रिया को निर्देशित करता है जहां अन्यथा अस्पष्टता होगी।
  • टाइप क्लास इंस्टेंसेस के स्वीकार्य आकार के संबंध में महत्वपूर्ण रूप से शिथिल नियम। जब इन्हें पूर्ण रूप से सक्षम किया जाता है, तो टाइप क्लास सिस्टम संकलन समय पर तर्क प्रोग्रामिंग के लिए ट्यूरिंग-पूर्ण भाषा बन जाता है।
  • टाइप परिवार, जैसा कि ऊपर बताया गया है, टाइप क्लास से भी जुड़े हो सकते हैं।
  • कुछ प्रकार के वर्ग उदाहरणों की स्वत: पीढ़ी को कई तरह से बढ़ाया जाता है। सामान्य प्रोग्रामिंग और सामान्य पुनरावर्तन पैटर्न के लिए नए प्रकार के वर्ग समर्थित हैं। इसके अतिरिक्त, जब एक नए प्रकार को मौजूदा प्रकार के लिए समरूप के रूप में घोषित किया जाता है, तो अंतर्निहित प्रकार के लिए घोषित किसी भी प्रकार के वर्ग के उदाहरण को नए प्रकार के लिए मुफ्त में उठाया जा सकता है।

पोर्टेबिलिटी

जीएचसी के संस्करण कई सिस्टम प्लेटफॉर्म के लिए उपलब्ध हैं, जिनमें माइक्रोसॉफ़्ट विंडोज़ और यूनिक्स की अधिकांश किस्में (जैसे लिनक्स , फ्रीबीएसडी, ओपनबीएसडी और मैकओएस) शामिल हैं।[21] GHC कई अलग-अलग CPU डिज़ाइन में भी में porting कर रहा है।[21]


यह भी देखें

संदर्भ

  1. 1.0 1.1 "The GHC Team". Haskell.org. Retrieved 1 September 2016.
  2. 2.0 2.1 2.2 Hudak, P.; Hughes, J.; Peyton Jones, S.; Wadler, P. (June 2007). "A History of Haskell: Being Lazy With Class" (PDF). Proc. Third ACM SIGPLAN History of Programming Languages Conference (HOPL-III). Retrieved 1 September 2016.
  3. "Download — The Glasgow Haskell Compiler". Haskell.org.
  4. "The Glorious Glasgow Haskell Compilation System User's Guide". Haskell.org. Retrieved 27 July 2014.
  5. "2017 state of Haskell survey results". taylor.fausak.me. 15 November 2017. Retrieved 11 December 2017.
  6. "Industrial Haskell Group". Haskell.org. 2014. Retrieved 1 September 2016.
  7. "जीएचसी द ग्लासगो हास्केल कंपाइलर". Haskell.org. Retrieved 14 January 2022.
  8. "रिपॉजिटरी: config.ac". gitlab.haskell.org. 12 January 2022. Retrieved 14 January 2022.
  9. "शानदार ग्लासगो हास्केल संकलन प्रणाली उपयोगकर्ता गाइड, संस्करण 7.6.3". downloads.haskell.org. Retrieved 14 January 2022.
  10. "ghc-0.29-src.tar.gz" (tar gzip). downloads.haskell.org. File: ghc-0.29/ghc/PATCHLEVEL. Retrieved 14 January 2022.
  11. "GHC Commentary: The Compiler". Haskell.org. 23 March 2016. Archived from the original on 23 March 2016. Retrieved 26 May 2016.
  12. 12.0 12.1 Sulzmann, M.; Chakravarty, M. M. T.; Peyton Jones, S.; Donnelly, K. (January 2007). "System F with Type Equality Coercions". Proc. ACM Workshop on Types in Language Design and Implementation (TLDI).
  13. Peyton Jones, S. (April 1996). "Compiling Haskell by program transformation: a report from the trenches". Proc. European Symposium on Programming (ESOP).
  14. Peyton Jones, S. (April 1992). "Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine, Version 2.5". Journal of Functional Programming. 2 (2): 127–202. doi:10.1017/S0956796800000319.
  15. "Haskell 98 Language and Libraries: The Revised Report". Haskell.org. Retrieved 28 January 2007.
  16. "Haskell 2010 Language Report". Haskell.org. Retrieved 30 August 2012.
  17. "Welcome to Haskell' (Haskell Prime)". Haskell.org. Archived from the original on 20 February 2016. Retrieved 26 May 2016.
  18. "GHC Language Features". Haskell.org. Archived from the original on 29 June 2016. Retrieved 25 May 2016.
  19. Coutts, D.; Leshchinskiy, R.; Stewart, D. (April 2007). "Stream Fusion: From Lists to Streams to Nothing at All". Proc. ACM SIGPLAN International Conference on Functional Programming (ICFP). Archived from the original on 23 September 2007.
  20. Mitchell, Neil; Fletcher, Shayne (3 May 2020). "Record Dot Syntax". ghc-proposals. GitHub. Retrieved 30 June 2020.
  21. 21.0 21.1 Platforms at gitlab.haskell.org


इस पेज में लापता आंतरिक लिंक की सूची

  • सॉफ्टवेयर लेनदेन स्मृति
  • कठोरता विश्लेषण
  • रूपरेखा (कंप्यूटर प्रोग्रामिंग)
  • शाब्दिक विश्लेषण
  • अनुमान टाइप करें
  • मध्यवर्ती भाषा
  • सामान्यीकृत बीजगणितीय डेटा प्रकार
  • नियमों को फिर से लिखें
  • संकलक अनुकूलन
  • जीएनयू संकलक संग्रह
  • संगत मेमोरी लेनदेन
  • गतिशील आवंटन
  • डाटा प्रकार
  • समारोह (गणित)
  • बहुरूपता टाइप करें
  • अंतिम संबंध
  • वस्तु उन्मुख कार्यकर्म
  • परिवार टाइप करें
  • मैक ओ एस
  • FreeBSD
  • सीपीयू डिजाइन
  • आलिंगन (दुभाषिया)
  • लिमिटेड

बाहरी कड़ियाँ

श्रेणी:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर श्रेणी:मुफ्त संकलक और दुभाषिए श्रेणी:मुफ्त हास्केल कार्यान्वयन श्रेणी: यूनाइटेड किंगडम में कंप्यूटिंग का इतिहास श्रेणी: बीएसडी लाइसेंस का प्रयोग करने वाला सॉफ्टवेयर