हास्केल
हास्केल (/ˈhæskəl/[25]) एक सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा है|सामान्य-उद्देश्य, स्थिर टाइपिंग|स्थैतिक रूप से टाइप की गई, प्रकार अनुमान और आलसी मूल्यांकन के साथ विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग प्रोग्रामिंग भाषा।[26][27] शिक्षण, अनुसंधान और औद्योगिक अनुप्रयोगों के लिए डिज़ाइन किया गया, हास्केल ने कई प्रोग्रामिंग भाषा सुविधाओं का बीड़ा उठाया है जैसे कि टाइप क्लासेस, जो टाइप सुरक्षा को सक्षम करती हैं। टाइप-सेफ ऑपरेटर ओवरलोडिंग, और मोनाड_ (फंक्शनल_प्रोग्रामिंग) इनपुट / आउटपुट। हास्केल का मुख्य कार्यान्वयन ग्लासगो हास्केल कंपाइलर (जीएचसी) है। इसका नाम तर्कशास्त्री हास्केल करी के नाम पर रखा गया है।[1] हास्केल के सिमेंटिक्स (कंप्यूटर विज्ञान) ऐतिहासिक रूप से मिरांडा (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग लैंग्वेज पर आधारित हैं, जो शुरुआती हास्केल वर्किंग ग्रुप के प्रयासों पर ध्यान केंद्रित करने के लिए काम करता था।[28] भाषा का अंतिम औपचारिक विनिर्देश जुलाई 2010 में बनाया गया था, जबकि जीएचसी का विकास भाषा विस्तार के माध्यम से हास्केल का विस्तार करना जारी रखता है।
हास्केल का उपयोग अकादमिक और उद्योग में किया जाता है।[29][30][31] As of May 2021[update]हास्केल ट्यूटोरियल के लिए Google खोजों द्वारा 28वीं सबसे लोकप्रिय प्रोग्रामिंग भाषा थी,[32] और GitHub स्रोत कोड रिपॉजिटरी पर 1% से कम सक्रिय उपयोगकर्ता हैं।[33]
इतिहास
1985 में रिसर्च सॉफ्टवेयर लिमिटेड द्वारा मिरांडा (प्रोग्रामिंग लैंग्वेज) जारी करने के बाद आलसी कार्यात्मक भाषाओं में रुचि बढ़ी। 1987 तक, एक दर्जन से अधिक गैर-सख्त कार्य, विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग भाषाएं मौजूद थीं। मिरांडा सबसे व्यापक रूप से इस्तेमाल किया गया था, लेकिन यह मालिकाना सॉफ्टवेयर था। पोर्टलैंड, ओरेगॉन में फंक्शनल प्रोग्रामिंग लैंग्वेज एंड कंप्यूटर आर्किटेक्चर (FPCA '87) पर सम्मेलन में, एक मजबूत सहमति थी कि ऐसी भाषाओं के लिए एक खुले मानक को परिभाषित करने के लिए एक समिति का गठन किया जाए। समिति का उद्देश्य कार्यात्मक-भाषा डिजाइन में भविष्य के शोध के आधार के रूप में कार्य करने के लिए मौजूदा कार्यात्मक भाषाओं को एक आम भाषा में समेकित करना था।[34]
हास्केल 1.0 से 1.4
हास्केल को एक समिति द्वारा विकसित किया गया था, जहां संभव हो वहां शेल्फ समाधानों को एक साथ लाने का प्रयास किया गया था।
प्रकार की कक्षाएं, जो प्रकार की सुरक्षा को सक्षम करती हैं। प्रकार-सुरक्षित ऑपरेटर ओवरलोडिंग, पहली बार फिलिप वाडलर और स्टीफन ब्लॉट द्वारा समानता प्रकारों के तदर्थ संचालन और उस समय भाषाओं में अंकगणितीय अधिभार को संबोधित करने के लिए प्रस्तावित किया गया था।[35] हास्केल के शुरुआती संस्करणों में संस्करण 1.2 तक और इसमें शामिल हैं, उपयोगकर्ता इंटरैक्शन और आईओ (इनपुट और आउटपुट) दोनों स्ट्रीम आधारित और निरंतरता आधारित तंत्र द्वारा नियंत्रित किए गए थे जिन्हें व्यापक रूप से असंतोषजनक माना जाता था।[36] संस्करण 1.3 में, मोनाड_ (कार्यात्मक_प्रोग्रामिंग) आईओ को टाइप क्लास के सामान्यीकरण के साथ-साथ उच्च प्रकार (टाइप कन्स्ट्रक्टर) के साथ पेश किया गया था। नोटेशन के साथ, जो मोनाड टाइप क्लास के लिए सिंटैक्टिक चीनी प्रदान करता है, इसने हास्केल को एक प्रभाव प्रणाली दी जो रेफरेंसियल पारदर्शिता बनाए रखती थी और सुविधाजनक थी।
शुरुआती संस्करणों में अन्य उल्लेखनीय परिवर्तन 'seq' फ़ंक्शन के दृष्टिकोण थे, जो मूल्यों के बीच डेटा निर्भरता बनाता है, और अत्यधिक मेमोरी खपत से बचने के लिए आलसी भाषाओं में इसका उपयोग किया जाता है; रिफैक्टरिंग को और अधिक व्यावहारिक बनाने के लिए इसे एक प्रकार के वर्ग से एक मानक कार्य में ले जाना।
हास्केल (हास्केल 1.0) का पहला संस्करण 1990 में परिभाषित किया गया था।[1] समिति के प्रयासों के परिणामस्वरूप भाषा परिभाषाओं की एक श्रृंखला (1.0, 1.1, 1.2, 1.3, 1.4) हुई।
हास्केल 98
1997 के अंत में, हास्केल 98 में श्रृंखला समाप्त हुई, जिसका उद्देश्य भाषा के एक स्थिर, न्यूनतम, पोर्टेबल संस्करण और शिक्षण के लिए एक मानक पुस्तकालय (कंप्यूटर विज्ञान) और भविष्य के विस्तार के लिए आधार के रूप में निर्दिष्ट करना था। समिति ने प्रायोगिक सुविधाओं को जोड़कर और शामिल करके हास्केल 98 के एक्सटेंशन और वेरिएंट बनाने का स्पष्ट रूप से स्वागत किया।[34] फरवरी 1999 में, हास्केल 98 भाषा मानक को मूल रूप से द हास्केल 98 रिपोर्ट के रूप में प्रकाशित किया गया था।[34] जनवरी 2003 में, हास्केल 98 भाषा और पुस्तकालय: संशोधित रिपोर्ट के रूप में एक संशोधित संस्करण प्रकाशित किया गया था।[27] भाषा तेजी से विकसित हो रही है, ग्लासगो हास्केल कंपाइलर (जीएचसी) कार्यान्वयन वर्तमान वास्तविक मानक का प्रतिनिधित्व करता है।[37]
हास्केल 2010
2006 की शुरुआत में, हास्केल 98 मानक के उत्तराधिकारी को परिभाषित करने की प्रक्रिया शुरू हुई, जिसे अनौपचारिक रूप से हास्केल प्राइम नाम दिया गया।[38] यह भाषा की परिभाषा को संशोधित करने के लिए एक सतत वृद्धिशील प्रक्रिया थी, जो प्रति वर्ष एक बार तक एक नया संशोधन तैयार करती थी। हास्केल 2010 नाम का पहला संशोधन नवंबर 2009 में घोषित किया गया था[2]और जुलाई 2010 में प्रकाशित हुआ।
हास्केल 2010 भाषा के लिए एक वृद्धिशील अद्यतन है, जिसमें ज्यादातर अच्छी तरह से उपयोग की जाने वाली और गैर-विवादास्पद विशेषताएं शामिल हैं जो पहले संकलक-विशिष्ट झंडे के माध्यम से सक्षम थीं।
- पदानुक्रमित मॉड्यूल नाम। मॉड्यूल नामों को केवल एक ऐसे पहचानकर्ता के बजाय पूंजीकृत पहचानकर्ताओं के डॉट-पृथक अनुक्रमों को शामिल करने की अनुमति है। यह मॉड्यूल को पदानुक्रमित तरीके से नामित करने देता है (उदाहरण के लिए,
Data.Listके बजायList), हालांकि तकनीकी रूप से मॉड्यूल अभी भी एक मोनोलिथिक नेमस्पेस में हैं। यह एक्सटेंशन हास्केल 98 के परिशिष्ट में निर्दिष्ट किया गया था और व्यवहार में सार्वभौमिक रूप से उपयोग किया गया था। - विदेशी फ़ंक्शन इंटरफ़ेस (FFI) अन्य प्रोग्रामिंग भाषाओं के लिए बाइंडिंग की अनुमति देता है। रिपोर्ट में केवल C (प्रोग्रामिंग भाषा) के लिए बाइंडिंग निर्दिष्ट हैं, लेकिन डिज़ाइन अन्य भाषा बाइंडिंग के लिए अनुमति देता है। इसका समर्थन करने के लिए, डेटा प्रकार की घोषणाओं में कोई कंस्ट्रक्टर नहीं होने की अनुमति दी गई थी, जो हास्केल में निर्मित नहीं किए जा सकने वाले विदेशी डेटा के लिए मजबूत गैर प्रकार को सक्षम करता है। यह एक्सटेंशन पहले हास्केल 98 रिपोर्ट के परिशिष्ट में निर्दिष्ट किया गया था और व्यापक रूप से उपयोग किया गया था।
- तथाकथित एन + के पैटर्न (फॉर्म की परिभाषाएं
fact (n+1) = (n+1) * fact n) की अनुमति नहीं थी। इस सिंटैक्टिक चीनी में भ्रामक शब्दार्थ था, जिसमें कोड ऐसा दिखता था जैसे इसका उपयोग किया गया हो(+)ऑपरेटर, लेकिन वास्तव में कोड का उपयोग करने के लिए desugared(-)तथा(>=). - प्रकार के अनुमान के नियमों में ढील दी गई ताकि अधिक कार्यक्रमों को जाँचने की अनुमति मिल सके।
- कुछ सिंटैक्स (प्रोग्रामिंग लैंग्वेज) मुद्दे (औपचारिक व्याकरण में परिवर्तन) तय किए गए थे: पैटर्न गार्ड जोड़े गए थे, जिससे गार्ड के भीतर पैटर्न मिलान हो सके; संचालन के आदेश का संकल्प सरल तरीके से निर्दिष्ट किया गया था जो वास्तविक अभ्यास को दर्शाता है; ऑपरेटरों और टिप्पणियों के भाषा के लेक्सिकल सिंटैक्स की बातचीत में एक बढ़त का मामला संबोधित किया गया था, और अनपेक्षित सिंटैक्स त्रुटियों को खत्म करने के लिए do-notation और if-then-else की बातचीत को ट्वीक किया गया था।
LANGUAGEई> निर्देश (प्रोग्रामिंग) निर्दिष्ट किया गया था। 2010 तक, भाषा के दर्जनों विस्तार व्यापक उपयोग में थे, और GHC (अन्य संकलकों के बीच) ने प्रदान कियाLANGUAGEpragma पहचानकर्ताओं की सूची के साथ अलग-अलग एक्सटेंशन निर्दिष्ट करने के लिए। समर्थन करने के लिए हास्केल 2010 कंपाइलर्स की आवश्यकता हैHaskell2010एक्सटेंशन और कई अन्य लोगों का समर्थन करने के लिए प्रोत्साहित किया जाता है, जो हास्केल 2010 में जोड़े गए एक्सटेंशन के अनुरूप हैं।
भविष्य के मानक
2020 के लिए अगले औपचारिक विनिर्देश की योजना बनाई गई थी।[3]29 अक्टूबर 2021 को GHC संस्करण 9.2.1 के साथ, GHC2021 एक्सटेंशन जारी किया गया था। हालांकि यह एक औपचारिक भाषा युक्ति नहीं है, यह हास्केल 2010 में कई स्थिर, व्यापक रूप से उपयोग किए जाने वाले जीएचसी एक्सटेंशन को जोड़ती है।[39]
सुविधाएँ
हास्केल में आलसी मूल्यांकन, बेनामी फ़ंक्शन, पैटर्न मिलान, सूची समझ, प्रकार वर्ग और प्रकार बहुरूपता शामिल हैं। यह विशुद्ध रूप से कार्यात्मक भाषा है, जिसका अर्थ है कि कार्यों का आमतौर पर कोई साइड इफेक्ट (कंप्यूटर विज्ञान) नहीं होता है। साइड इफेक्ट्स का प्रतिनिधित्व करने के लिए एक अलग निर्माण मौजूद है, ऑर्थोगोनल # कंप्यूटर विज्ञान कार्यों के प्रकार के लिए। एक शुद्ध कार्य एक दुष्प्रभाव वापस कर सकता है जिसे बाद में निष्पादित किया जाता है, शुद्ध कार्य # अन्य भाषाओं के अशुद्ध कार्यों को मॉडलिंग करता है।
हास्केल के पास दृढ़ता से टाइप की गई प्रोग्रामिंग भाषा है, स्टैटिक टाइप#स्टेटिक टाइपिंग टाइप सिस्टम हिंडले-मिलनर प्रकार के अनुमान पर आधारित है। इस क्षेत्र में इसका प्रमुख नवाचार प्रकार वर्ग है, मूल रूप से भाषा में बहुरूपता (कंप्यूटर विज्ञान) को जोड़ने के लिए एक सैद्धांतिक तरीके के रूप में माना जाता है,[40] लेकिन कई और उपयोग खोजने के बाद से।[41] निर्माण जो साइड-इफेक्ट्स का प्रतिनिधित्व करता है, एक मोनाड (कार्यात्मक प्रोग्रामिंग) का एक उदाहरण है: एक सामान्य ढांचा जो विभिन्न संगणनाओं को मॉडल कर सकता है जैसे कि त्रुटि से निपटने, गैर-नियतात्मक एल्गोरिथ्म, पार्सिंग और सॉफ्टवेयर ट्रांसेक्शनल मेमोरी। उन्हें साधारण डेटाटाइप्स के रूप में परिभाषित किया गया है, लेकिन हास्केल उनके उपयोग के लिए कुछ सिंटैक्टिक चीनी प्रदान करता है।
हास्केल का एक खुला, प्रकाशित विनिर्देश है,[27] और #कार्यान्वयन। इसका मुख्य कार्यान्वयन, ग्लासगो हास्केल कंपाइलर (जीएचसी), एक इंटरप्रेटर (कंप्यूटिंग) और मशीन कोड | नेटिव-कोड कंपाइलर दोनों है जो अधिकांश प्लेटफॉर्म पर चलता है। जीएचसी अपने समृद्ध प्रकार की प्रणाली के लिए विख्यात है, जिसमें सामान्यीकृत बीजगणितीय डेटा प्रकार और प्रकार परिवारों जैसे हाल के नवाचारों को शामिल किया गया है। कंप्यूटर लैंग्वेज बेंचमार्क गेम कॉन्करेंसी (कंप्यूटर साइंस) और समानांतर कंप्यूटिंग के अपने उच्च-प्रदर्शन कार्यान्वयन पर भी प्रकाश डालता है।[42] एक सक्रिय, बढ़ता हुआ समुदाय भाषा के आसपास मौजूद है, और ऑनलाइन पैकेज रिपॉजिटरी हैकेज में 5,400 से अधिक तृतीय-पक्ष ओपन-सोर्स लाइब्रेरी और टूल उपलब्ध हैं।[43]
कोड उदाहरण
एक हैलो, दुनिया! हास्केल में कार्यक्रम (केवल अंतिम पंक्ति सख्ती से जरूरी है):
<वाक्यविन्यास लैंग = हैकेल> मॉड्यूल मुख्य (मुख्य) जहां - दुभाषिया में आवश्यक नहीं है, मॉड्यूल फ़ाइल में डिफ़ॉल्ट है
मुख्य :: IO () - संकलक इस प्रकार की परिभाषा का अनुमान लगा सकता है main = putStrLn हैलो, वर्ल्ड! </वाक्यविन्यास हाइलाइट>
हास्केल में फैक्टोरियल फ़ंक्शन, कुछ अलग तरीकों से परिभाषित किया गया है (पहली पंक्ति टाइप सिग्नेचर है, जो वैकल्पिक है और प्रत्येक कार्यान्वयन के लिए समान है): <वाक्यविन्यास लैंग = हैकेल> फैक्टोरियल :: (इंटीग्रल ए) => ए -> ए
- पुनरावर्तन का उपयोग करना (ifthenelse अभिव्यक्ति के साथ) क्रमगुणित n = यदि n < 2
फिर 1
और n * फैक्टोरियल (n - 1)
- पुनरावर्तन का उपयोग करना (पैटर्न मिलान के साथ) भाज्य 0 = 1 क्रमगुणित n = n * भाज्य (n - 1)
- पुनरावर्तन का उपयोग करना (गार्ड के साथ) भाज्य n
| एन <2 = 1 | अन्यथा = n * भाज्य (n - 1)
- एक सूची और उत्पाद फ़ंक्शन का उपयोग करना क्रमगुणित n = उत्पाद [1..n]
- तह का उपयोग करना (उत्पाद को लागू करता है) फैक्टोरियल एन = फोल्डएल (*) 1 [1..एन]
- प्वाइंट-फ्री स्टाइल फैक्टोरियल = फोल्डर (*) 1। एनमफ्रॉमटो 1 </वाक्यविन्यास हाइलाइट>
जैसा कि पूर्णांक प्रकार में मनमाना-परिशुद्धता है, यह कोड मानों की गणना करेगा factorial 100000 (एक 456,574-अंकों की संख्या), सटीकता की कोई हानि नहीं।
त्वरित सॉर्ट ओवर सूचियों के समान एल्गोरिथ्म का कार्यान्वयन, जहां पहले तत्व को धुरी के रूप में लिया जाता है: <वाक्यविन्यास लैंग = हैकेल> - एनोटेशन टाइप करें (वैकल्पिक, प्रत्येक कार्यान्वयन के लिए समान) QuickSort :: Ord a => [a] -> [a]
- सूची समझ का उपयोग करना QuickSort [] = [] - खाली सूची पहले से ही क्रमबद्ध है क्विकसॉर्ट (x:xs) = क्विकसॉर्ट [ए | a <- xs, a <x] - सूची के बाएं भाग को क्रमबद्ध करें
++ [x] ++ - दो क्रमबद्ध भागों के बीच पिवट सम्मिलित करें
क्विकसॉर्ट [ए | a <- xs, a >= x] -- सूची के दाहिने हिस्से को क्रमबद्ध करें
- फ़िल्टर का उपयोग करना क्विकसॉर्ट [] = [] क्विकसॉर्ट (x:xs) = क्विकसॉर्ट (फ़िल्टर (<x) xs)
++ [एक्स] ++
QuickSort (फ़िल्टर (>=x) xs)
</वाक्यविन्यास हाइलाइट>
कार्यान्वयन
सभी सूचीबद्ध कार्यान्वयन ओपन सोर्स लाइसेंस के अंतर्गत वितरित किए जाते हैं।[44] हास्केल 98 मानक का पूरी तरह या लगभग अनुपालन करने वाले कार्यान्वयन में शामिल हैं:
- ग्लासगो हास्केल कंपाइलर (जीएचसी) कई अलग-अलग प्रोसेसर आर्किटेक्चर पर मूल कोड और एएनएसआई सी के लिए दो मध्यवर्ती भाषाओं में से एक के माध्यम से संकलित करता है: सी--, या हाल के संस्करणों में, एलएलवीएम (पूर्व में निम्न स्तरीय वर्चुअल मशीन) बिटकोड।[45][46] जीएचसी वास्तविक मानक हास्केल बोली बन गई है।[47] पुस्तकालय हैं (उदाहरण के लिए, ओपनजीएल के लिए बाइंडिंग) जो केवल जीएचसी के साथ काम करते हैं। जीएचसी को हास्केल प्लेटफॉर्म के साथ भी वितरित किया गया था।
- जेएचसी, जॉन मेचम द्वारा लिखित एक हास्केल संकलक, उत्पन्न कार्यक्रमों की गति और दक्षता पर जोर देता है और नए कार्यक्रम परिवर्तनों की खोज करता है।
- Ajhc Jhc का एक कांटा है।
- यूट्रेक्ट हास्केल कंपाइलर (यूएचसी) यूट्रेक्ट विश्वविद्यालय से हास्केल कार्यान्वयन है।[48] यह लगभग सभी हास्केल 98 सुविधाओं और कई प्रयोगात्मक एक्सटेंशन का समर्थन करता है। यह विशेषता व्याकरण का उपयोग करके कार्यान्वित किया जाता है और वर्तमान में ज्यादातर उत्पन्न प्रकार प्रणालियों और भाषा एक्सटेंशन पर शोध के लिए उपयोग किया जाता है।
कार्यान्वयन अब सक्रिय रूप से बनाए नहीं रखा जाता है इसमें शामिल हैं:
- हास्केल यूजर का गोफर सिस्टम (हग्स (दुभाषिया)) एक बायटेकोड दुभाषिया है। यह एक बार जीएचसी कंपाइलर के साथ सबसे व्यापक रूप से उपयोग किए जाने वाले कार्यान्वयन में से एक था,[49] लेकिन अब ज्यादातर जीएचसीआई द्वारा प्रतिस्थापित कर दिया गया है। यह एक ग्राफिक्स लाइब्रेरी के साथ भी आता है।
- एचबीसी हास्केल 1.4 का समर्थन करने वाला एक प्रारंभिक कार्यान्वयन है। यह लेनार्ट ऑगस्टसन द्वारा लेज़ी एमएल पर आधारित और लागू किया गया था। यह कुछ समय के लिए सक्रिय रूप से विकसित नहीं हुआ है।
- nhc98 मेमोरी उपयोग को कम करने पर ध्यान केंद्रित करने वाला एक बायटेकोड कंपाइलर है।
- यॉर्क हास्केल कंपाइलर (Yhc) nhc98 का एक कांटा था, जिसका लक्ष्य सरल, अधिक पोर्टेबल और कुशल होना और हास्केल ट्रेसर हैट के लिए समर्थन को एकीकृत करना था। इसमें एक जावास्क्रिप्ट बैकएंड भी था, जिससे उपयोगकर्ता वेब ब्राउज़र में हास्केल प्रोग्राम चला सकते थे।
कार्यान्वयन पूरी तरह से हास्केल 98 के अनुरूप नहीं है, और एक प्रकार की हास्केल भाषा का उपयोग करते हुए इसमें शामिल हैं:
- एटा और फ्रीज जावा वर्चुअल मशीन को लक्षित करने वाली हास्केल की बोलियां हैं।
- गोफर (सॉफ्टवेयर) हास्केल की एक शैक्षिक बोली थी, जिसमें मार्क जोन्स द्वारा विकसित कंस्ट्रक्टर क्लासेस नामक एक विशेषता थी। इसे हग्स (हास्केल यूजर के गोफर सिस्टम) द्वारा प्रतिस्थापित किया गया था।
- हीलियम, हास्केल की एक नई बोली। स्पष्ट त्रुटि संदेशों के माध्यम से सीखने को आसान बनाने पर ध्यान केंद्रित किया गया है। वर्तमान में इसमें टाइप क्लास के लिए पूर्ण समर्थन की कमी है, जो इसे कई हास्केल प्रोग्रामों के साथ असंगत बनाता है।
उल्लेखनीय अनुप्रयोग
- सबूत सहायक Agda (प्रोग्रामिंग भाषा) हास्केल में लिखा गया है।[50]
- कैबल (सॉफ्टवेयर) बिल्ड ऑटोमेशन और हास्केल पुस्तकालयों और कार्यक्रमों की पैकेजिंग के लिए एक उपकरण है।[51]
- डार्क्स एक संशोधन नियंत्रण प्रणाली है जिसे हास्केल में लिखा गया है, जिसमें कई नवीन विशेषताएं हैं, जैसे लागू करने के लिए पैच का अधिक सटीक नियंत्रण।
- ग्लासगो हास्केल कंपाइलर भी अक्सर उन्नत कार्यात्मक प्रोग्रामिंग सुविधाओं और अन्य प्रोग्रामिंग भाषाओं में अनुकूलन के लिए एक परीक्षण है।
- गिट-एनेक्स गिट संस्करण नियंत्रण के तहत (बड़ी) डेटा फ़ाइलों को प्रबंधित करने का एक उपकरण है। यह एक वितरित फ़ाइल तुल्यकालन प्रणाली (गिट-अनुबंध सहायक) भी प्रदान करता है।
- लिनस्पायर लिनक्स ने सिस्टम टूल्स डेवलपमेंट के लिए हास्केल को चुना।[52]
- पैंडोक एक मार्कअप प्रारूप को दूसरे में बदलने का एक उपकरण है।
- पग्स (प्रोग्रामिंग) राकू (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग लैंग्वेज (पूर्व में पर्ल 6) के लिए एक कंपाइलर और इंटरप्रेटर (कंप्यूटिंग) है।
- TidalCycles लाइव कोडिंग संगीत पैटर्न के लिए एक डोमेन विशेष भाषा है, जो हास्केल में सन्निहित है।[53]
- Xmonad X विंडो सिस्टम के लिए एक विंडो मैनेजर है, जो पूरी तरह हास्केल में लिखा गया है।[54]
उद्योग
- ब्लूस्पेक, इंक. सिस्टम वेरिलॉग (बीएसवी) सेमीकंडक्टर डिज़ाइन के लिए एक भाषा है जो हास्केल का विस्तार है। साथ ही, Bluespec, Inc. के उपकरण हास्केल में लागू किए गए हैं।
- क्रिप्टोग्राफी एल्गोरिदम के विकास और सत्यापन के लिए एक भाषा और टूलचेन, क्रिप्टोल हास्केल में लागू किया गया है।
- फेसबुक अपने एंटी-स्पैम प्रोग्राम को लागू करता है[55] हास्केल में, अंतर्निहित डेटा एक्सेस लाइब्रेरी को ओपन-सोर्स सॉफ़्टवेयर के रूप में बनाए रखना।[56]
- हास्केल में कार्डानो (ब्लॉकचैन प्लेटफॉर्म) लागू किया गया है।[57]
- GitHub ने सिमेंटिक (सॉफ़्टवेयर), हास्केल में अविश्वसनीय स्रोत कोड के विश्लेषण, अंतर और व्याख्या के लिए एक ओपन-सोर्स लाइब्रेरी लागू की।[58]
- मानक चार्टर्ड की वित्तीय मॉडलिंग भाषा म्यू सिंटैक्टिक हास्केल सख्त रनटाइम पर चल रही है।[59]
- seL4, पहला औपचारिक तरीका माइक्रोकर्नेल,[60] ओएस डेवलपर के लिए प्रोटोटाइप भाषा के रूप में हास्केल का इस्तेमाल किया।[60]: p.2 साथ ही, हास्केल कोड ने एक निष्पादन योग्य विनिर्देश को परिभाषित किया जिसके साथ प्रमेय-सिद्ध उपकरण द्वारा स्वचालित अनुवाद के लिए तर्क दिया गया।[60]: p.3 हास्केल कोड इस प्रकार अंतिम सी (प्रोग्रामिंग भाषा) शोधन से पहले एक मध्यवर्ती प्रोटोटाइप के रूप में कार्य करता है।[60]: p.3
- Target Corporation store' आपूर्ति श्रृंखला अनुकूलन सॉफ्टवेयर हास्केल में लिखा गया है।[61]
वेब
हास्केल के लिए लिखे गए उल्लेखनीय वेब ढांचे में शामिल हैं:[62]
- आईएचपी (वेब फ्रेमवर्क)
- यसोड (वेब फ्रेमवर्क)
- नौकर (वेब ढांचा)
- स्नैप (वेब फ्रेमवर्क)
आलोचना
2002 में जन-विलेम मेसेन और 2003 में साइमन पीटन जोन्स ने आलसी मूल्यांकन से जुड़ी समस्याओं पर चर्चा की, जबकि इसके लिए सैद्धांतिक उद्देश्यों को भी स्वीकार किया।[63][64] बेहतर प्रदर्शन जैसे विशुद्ध रूप से व्यावहारिक विचारों के अलावा,[65] वे ध्यान देते हैं कि आलसी मूल्यांकन प्रोग्रामर के लिए अपने कोड के प्रदर्शन (विशेष रूप से इसके स्थान उपयोग) के बारे में तर्क करना अधिक कठिन बना देता है।
2003 में बस्तियान हीरेन, डैन लीजेन, और अर्जन वैन आईजेजेंडोर्न ने भी हास्केल शिक्षार्थियों के लिए कुछ बाधाओं का अवलोकन किया: हास्केल की सूक्ष्म वाक्य रचना और परिष्कृत प्रकार की प्रणाली एक दोधारी तलवार है - अनुभवी प्रोग्रामरों द्वारा अत्यधिक सराहना की जाती है लेकिन शुरुआती लोगों के बीच निराशा का स्रोत भी है। चूंकि हास्केल की व्यापकता अक्सर गुप्त त्रुटि संदेशों की ओर ले जाती है।[66] इन्हें संबोधित करने के लिए, यूट्रेक्ट विश्वविद्यालय के शोधकर्ताओं ने हीलियम (हास्केल) नामक एक उन्नत दुभाषिया विकसित किया, जिसने कुछ हास्केल सुविधाओं की व्यापकता को सीमित करके और विशेष रूप से टाइप क्लास के लिए समर्थन को हटाकर त्रुटि संदेशों की उपयोगकर्ता-मित्रता में सुधार किया।
बेन लिपमीयर ने शिष्य बनाया[67] एक मूल्यांकन रणनीति के रूप में | आलसी मूल्यांकन के बारे में तर्क करने में हास्केल की कठिनाइयों को दूर करने के लिए और परिवर्तनीय सरणी जैसे पारंपरिक डेटा संरचनाओं का उपयोग करने में हास्केल की सख्त-दर-डिफ़ॉल्ट (स्पष्ट एनोटेशन द्वारा आलसी) बोली।[68] उनका तर्क है (पृष्ठ 20) कि विनाशकारी अद्यतन प्रोग्रामर को दो महत्वपूर्ण और शक्तिशाली उपकरण प्रदान करता है ... वस्तुओं के संग्रह के प्रबंधन के लिए कुशल सरणी-जैसी डेटा संरचनाओं का एक सेट, और ... सभी के लिए एक नया मूल्य प्रसारित करने की क्षमता प्रोग्रामर पर न्यूनतम बोझ वाले प्रोग्राम के हिस्से।
स्टैंडर्ड एमएल के लेखकों में से एक रॉबर्ट हार्पर (कंप्यूटर वैज्ञानिक) ने परिचयात्मक प्रोग्रामिंग सिखाने के लिए हास्केल का उपयोग नहीं करने के अपने कारण बताए हैं। इनमें गैर-सख्त मूल्यांकन के साथ संसाधनों के उपयोग के बारे में तर्क करने की कठिनाई है, आलसी मूल्यांकन डेटाटाइप्स और आगमनात्मक तर्क की परिभाषा को जटिल बनाता है,[69] और एमएल के मॉड्यूल सिस्टम की तुलना में हास्केल (पुरानी) वर्ग प्रणाली की हीनता।Cite error: Closing </ref> missing for <ref> tag कैबल के पास अब बहुत अधिक परिष्कृत बिल्ड सिस्टम है, जो निक्स पैकेज मैनेजर से काफी प्रेरित है,[70] जो संस्करण 3.0 के साथ डिफ़ॉल्ट बन गया।
संबंधित भाषाएँ
क्लीन (प्रोग्रामिंग लैंग्वेज) हास्केल का करीबी, थोड़ा पुराना रिश्तेदार है। हास्केल से इसका सबसे बड़ा विचलन I/O और साइड-इफेक्ट्स के लिए मोनाड्स के बजाय विशिष्टता प्रकारों के उपयोग में है।
हास्केल से प्रेरित भाषाओं की एक श्रृंखला, लेकिन विभिन्न प्रकार की प्रणालियों के साथ विकसित की गई है, जिनमें शामिल हैं:
- Agda (प्रमेय प्रमेय), निर्भर प्रकार के साथ एक कार्यात्मक भाषा।
- केयेन (प्रोग्रामिंग भाषा), आश्रित प्रकारों के साथ।
- एल्म (प्रोग्रामिंग लैंग्वेज), वेब फ्रंट-एंड ऐप्स बनाने के लिए एक कार्यात्मक भाषा, उपयोगकर्ता-परिभाषित या उच्च-प्रकार (प्रकार सिद्धांत) प्रकार की कक्षाओं या उदाहरणों के लिए कोई समर्थन नहीं।
- एपिग्राम (प्रोग्रामिंग लैंग्वेज), प्रोग्राम के गुणों को साबित करने के लिए उपयुक्त आश्रित प्रकारों वाली एक कार्यात्मक भाषा।
- इदरीस (प्रोग्रामिंग लैंग्वेज), आश्रित प्रकार के साथ एक सामान्य प्रयोजन कार्यात्मक भाषा, सेंट एंड्रयूज विश्वविद्यालय में विकसित की गई।
- प्योरस्क्रिप्ट जावास्क्रिप्ट के लिए संकलित है।
- ओमेगा, सख्त और अधिक।[clarification needed]
अन्य संबंधित भाषाओं में शामिल हैं:
- करी (प्रोग्रामिंग भाषा), हास्केल पर आधारित एक कार्यात्मक/तर्क प्रोग्रामिंग भाषा।
उल्लेखनीय हास्केल रूपों में शामिल हैं:
- जेनेरिक प्रोग्रामिंग#जेनेरिक हास्केल, जेनरिक प्रोग्रामिंग के लिए टाइप सिस्टम सपोर्ट के साथ हास्केल का एक संस्करण।
- ह्यूम (प्रोग्रामिंग लैंग्वेज), एक तत्व मेलबॉक्स चैनलों के एक प्रकार के टुपल्स पर स्टेटलेस ऑटोमेटा के रूप में प्रक्रियाओं के आधार पर एम्बेडेड सिस्टम के लिए एक सख्त कार्यात्मक भाषा, जहां राज्य को मेलबॉक्स में फीडबैक द्वारा रखा जाता है, और आउटपुट से चैनलों के रूप में मैपिंग विवरण हास्केल जैसी अभिव्यक्ति भाषा और वाक्य-विन्यास के साथ बॉक्स वायरिंग।
सम्मेलन और कार्यशालाएं
हास्केल समुदाय अनुसंधान और विकास गतिविधियों के लिए नियमित रूप से मिलता है। मुख्य कार्यक्रम हैं:
- कार्यात्मक प्रोग्रामिंग पर अंतर्राष्ट्रीय सम्मेलन (आईसीएफपी)
- हास्केल संगोष्ठी (पूर्व में हास्केल कार्यशाला)
- हास्केल कार्यान्वयन कार्यशाला
- कार्यात्मक प्रोग्रामिंग के वाणिज्यिक उपयोगकर्ता (सीयूएफपी)
2006 से शुरू होकर, संगठित हैकथॉन की एक श्रृंखला हुई है, एचएसी श्रृंखला, जिसका उद्देश्य प्रोग्रामिंग भाषा उपकरण और पुस्तकालयों में सुधार करना है।[71]
संदर्भ
- ↑ 1.0 1.1 1.2 Hudak et al. 2007.
- ↑ 2.0 2.1 Marlow, Simon (24 November 2009). "Announcing Haskell 2010". Haskell (Mailing list). Retrieved 12 March 2011.
- ↑ 3.0 3.1 Riedel, Herbert (28 April 2016). "ANN: Haskell Prime 2020 committee has formed". Haskell-prime (Mailing list). Retrieved 6 May 2017.