हास्केल

From Vigyanwiki
Haskell
File:Logo of the Haskell programming language.svg
ParadigmPurely functional
द्वारा डिज़ाइन किया गयाLennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, Simon Peyton Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
पहली प्रस्तुति1990; 34 years ago (1990)[1]
Stable release
Haskell 2010[2] / July 2010; 13 years ago (2010-07)
Preview release
Haskell 2020 announced[3]
टाइपिंग अनुशासनInferred, static, strong
ओएसCross-platform
फ़ाइल नाम एक्सटेंशनएस.hs, .lhs
वेबसाइटwww.haskell.org
Major implementations
GHC, Hugs, NHC, JHC, Yhc, UHC
Dialects
Gofer
Influenced by
Clean,[4] FP,[4] Gofer,[4] Hope and Hope+,[4] Id,[4] ISWIM,[4] KRC,[4] Lisp,[4] Miranda,[4] ML and Standard ML,[4] Orwell, SASL,[4] Scheme,[4] SISAL[4]
Influenced
Agda,[5] Bluespec,[6] C++11/Concepts,[7] C#/LINQ,[8][9][10][11] CAL,[citation needed] Cayenne,[8] Clean,[8] Clojure,[12] CoffeeScript,[13] Curry,[8] Elm, Epigram,[citation needed] Escher,[14] F#,[15] Hack,[16] Idris,[17] Isabelle,[8] Java/Generics,[8] LiveScript,[18] Mercury,[8] Ωmega, PureScript,[19] Python,[8][20] Raku,[21] Rust,[22] Scala,[8][23] Swift,[24] Visual Basic 9.0[8][9]

हास्केल (/ˈhæskəl/[25]) सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा है। जिसका सामान्य-उद्देश्य, स्थिर टाइपिंग या स्थैतिक रूप से टाइप की गई, प्रकार अनुमान और मूल्यांकन के साथ विशुद्ध रूप से फंक्शनल प्रोग्रामिंग प्रोग्रामिंग भाषा में प्रोग्राम करना हैं।[26][27] शिक्षण, अनुसंधान और औद्योगिक अनुप्रयोगों के लिए इसे डिज़ाइन किया गया, हास्केल ने कई प्रोग्रामिंग भाषाओं की सुविधाओं को प्रदान किया है जैसे कि वर्ग टाइप करें , जो टाइप करने की सुरक्षा को सक्षम बनाता हैं। टाइप-सेफऑपरेटर ओवरलोडिंग , और मोनाड (फंक्शनल प्रोग्रामिंग) इनपुट/आउटपुट के लिए बहुत उपयोगी हैं। हास्केल का मुख्य कार्यान्वयन ग्लासगो हास्केल कंपाइलर (जीएचसी) है। इसका नाम तर्क विद्वान हास्केल करी के नाम पर रखा गया है।[1] हास्केल के सिमेंटिक्स (कंप्यूटर विज्ञान) को ऐतिहासिक रूप से मिरांडा (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा पर आधारित हैं, जो प्रारंभिक हास्केल वर्किंग ग्रुप के प्रयासों पर ध्यान केंद्रित करने के लिए कार्य करता था।[28] भाषा का अंतिम औपचारिक विनिर्देश जुलाई 2010 में बनाया गया था, जबकि जीएचसी का विकास भाषा के विस्तार के माध्यम से हास्केल का विस्तार करना जारी रखता है।

हास्केल का उपयोग अकादमिक और उद्योग में किया जाता है।[29][30][31] As of May 2021 हास्केल ट्यूटोरियल के लिए गूगल खोजों द्वारा 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) हुई।

जीएचसी 7.10 के अनुसार हास्केल प्रस्तावना में प्रकार वर्गों का पदानुक्रम। फोल्डेबल और ट्रैवर्सेबल (कुछ कार्यों के प्रकार के हस्ताक्षरों में संबंधित परिवर्तनों के साथ), और फंक्टर और मोनाड के बीच मध्यवर्ती के रूप में आवेदक को सम्मलित करना, हास्केल 2010 मानक से विचलन हैं।

हास्केल 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 E> निर्देश (प्रोग्रामिंग) निर्दिष्ट किया गया था। 2010 तक, भाषा के विस्तार होने के व्यापक उपयोग किए जाने लगे थे, और जीएचसी (अन्य संकलकों के बीच) ने यह प्रदान किया कि LANGUAGE pragma पहचानकर्ताओं की सूची के साथ अलग-अलग एक्सटेंशन निर्दिष्ट करने में उत्कृष्ट हो सके। समर्थन करने के लिए हास्केल 2010 कंपाइलर्स की आवश्यकता होती है, Haskell2010 एक्सटेंशन और कई अन्य लोगों का समर्थन करने के लिए इसे प्रोत्साहित किया जाता है, जो हास्केल 2010 में जोड़े गए एक्सटेंशन के अनुरूप हैं।

भविष्य के मानक

2020 के लिए अगले औपचारिक विनिर्देश की योजना बनाई गई थी।[3]29 अक्टूबर 2021 को जीएचसी संस्करण 9.2.1 के साथ, जीएचसी2021 एक्सटेंशन जारी किया गया था। चूंकि यह एक औपचारिक भाषा युक्ति नहीं है, यह हास्केल 2010 में कई स्थिर, व्यापक रूप से उपयोग किए जाने वाले जीएचसी एक्सटेंशन को जोड़ती है।[39]

सुविधाएँ

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

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

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

यह एक सक्रिय, बढ़ता हुआ समुदाय भाषा के आसपास सम्मलित है, और ऑनलाइन पैकेज रिपॉजिटरी हैकेज में 5,400 से अधिक तृतीय-पक्ष ओपन-सोर्स लाइब्रेरी और टूल उपलब्ध हैं।[43]

कोड उदाहरण

एक Hello, World! प्रोग्राम हास्केल में इस प्रकार लिखा जाएगा (केवल अंतिम पंक्ति सख्ती से जरूरी है):

module Main (main) जहां द्विभाषिया स्थिति में इसकी आवश्यकता नहीं है, मॉड्यूल फ़ाइल में डिफ़ॉल्ट है

main :: IO () -- संकलक इस प्रकार की परिभाषा का अनुमान लगा सकता है

main = putStrLn "Hello, World!"

हास्केल में फैक्टोरियल फ़ंक्शन, कुछ अलग तरीकों से परिभाषित किया गया है (पहली पंक्ति हस्ताक्षर टाइप करें है, जो वैकल्पिक है और प्रत्येक कार्यान्वयन के लिए समान है):

factorial :: (Integral a) => a -> a

-- Using recursion (with the "ifthenelse" expression)

factorial n = if n < 2

then 1

else n * factorial (n - 1)

-- Using recursion (with pattern matching)

factorial 0 = 1

factorial n = n * factorial (n - 1)

-- Using recursion (with guards)

factorial n

| n < 2 = 1

| otherwise = n * factorial (n - 1)

-- Using a list and the "product" function

factorial n = product [1..n]

-- Using fold (implements "product")

factorial n = foldl (*) 1 [1..n]

-- Point-free style

factorial = foldr (*) 1 . enum FromTo 1

जैसा कि पूर्णांक प्रकार में मनमाना-परिशुद्धता है, यह कोड मानों की गणना करेगा factorial 100000 (एक 456,574-अंकों की संख्या), इस प्रकार सटीकता की कोई हानि नहीं होती हैं।त्वरित सॉर्ट ओवर सूचियों के समान एल्गोरिथ्म का कार्यान्वयन, जहां पहले तत्व को धुरी के रूप में लिया जाता है:

-- Type annotation (optional, same for each implementation)

quickSort :: Ord a => [a] -> [a]

-- Using list comprehensions

quickSort [] = [] -- The empty list is already sorted

quickSort (x:xs) = quickSort [a | a <- xs, a < x] -- Sort the left part of the list

++ [x] ++ -- Insert pivot between two sorted parts

quickSort [a | a <- xs, a >= x] -- Sort the right part of the list

-- Using filter

quickSort [] = []

quickSort (x:xs) = quickSort (filter (<x) xs)

++ [x] ++

quickSort (filter (>=x) xs)

कार्यान्वयन

सभी सूचीबद्ध कार्यान्वयन ओपन सोर्स लाइसेंस के अंतर्गत वितरित किए जाते हैं।[44]

हास्केल 98 मानक का पूरी तरह या लगभग अनुपालन करने वाले कार्यान्वयन में सम्मलित हैं:

  • ग्लासगो हास्केल कंपाइलर (जीएचसी) कई अलग-अलग प्रोसेसर आर्किटेक्चर पर मूल कोड और एएनएसआई सी के लिए दो मध्यवर्ती भाषाओं में से एक माध्यम से इसे संकलित करता है: C-- , या हाल के संस्करणों में, एलएलवीएम (पूर्व में निम्न स्तरीय वर्चुअल मशीन) बिटकोड का उपयोग किया जाता हैं।[45][46] जीएचसी का वास्तविक मानक हास्केल भाषा बन गई है।[47] इसकी एक लाइब्रेरी हैं (उदाहरण के लिए, ओपन जीएल के लिए बाइंडिंग) जो केवल जीएचसी के साथ कार्य करती हैं। जीएचसी को हास्केल मंच के साथ भी वितरित किया गया था।
  • जेएचसी, जॉन मेचम द्वारा लिखित हास्केल संकलक, उत्पन्न कार्यक्रमों की गति और दक्षता पर जोर देता है और नए कार्यक्रम परिवर्तनों की खोज करता है।
    • Ajhc Jhc का एक कांटा है।
  • यूट्रेक्ट हास्केल कंपाइलर (यूएचसी) यूट्रेक्ट विश्वविद्यालय से हास्केल कार्यान्वयन है।[48] यह लगभग सभी हास्केल 98 सुविधाओं और कई प्रयोगात्मक एक्सटेंशन का समर्थन करता है। यह विशेषता व्याकरण का उपयोग करके कार्यान्वित किया जाता है और वर्तमान में अधिकतम उत्पन्न प्रकार प्रणालियों और भाषा एक्सटेंशन पर शोध के लिए उपयोग किया जाता है।

कार्यान्वयन अब सक्रिय रूप से बनाए नहीं रखा जाता है इसमें सम्मलित हैं:

  • हास्केल यूजर का गोफर सिस्टम (हग्स (द्विभाषिया)) बाईटकोड द्विभाषिया है। यह एक बार जीएचसी कंपाइलर के साथ सबसे व्यापक रूप से उपयोग किए जाने वाले कार्यान्वयन में से एक था,[49] लेकिन अब अधिकतम जीएचसीआई द्वारा प्रतिस्थापित कर दिया गया है। यह ग्राफिक्स लाइब्रेरी के साथ भी आता है।
  • एचबीसी हास्केल 1.4 का समर्थन करने वाला एक प्रारंभिक कार्यान्वयन है। यह लेनार्ट ऑगस्टसन द्वारा एमएल पर आधारित करके इसे लागू किया गया था। यह कुछ समय के लिए सक्रिय रूप से विकसित नहीं हुआ है।
  • एनएचसी98 मेमोरी उपयोग को कम करने पर ध्यान केंद्रित करने वाला बायटेकोड कंपाइलर है।
    • यॉर्क हास्केल कंपाइलर (Yhc ) एनएचसी98 का ​​एक कांटा था, जिसका लक्ष्य सरल, अधिक पोर्टेबल और कुशल होना और हास्केल ट्रेसर हैट के लिए समर्थन को एकीकृत करना था। इसमें एक जावास्क्रिप्ट बैकएंड भी था, जिससे उपयोगकर्ता वेब ब्राउज़र में हास्केल प्रोग्राम चला सकते थे।

कार्यान्वयन पूरी तरह से हास्केल 98 के अनुरूप नहीं है, और इस प्रकार की हास्केल भाषा का उपयोग करते हुए इसमें सम्मलित हैं:

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

उल्लेखनीय अनुप्रयोग

उद्योग

  • ब्लूस्पेक, इंक. सिस्टम वेरिलॉग (बीएसवी) सेमीकंडक्टर डिज़ाइन के लिए एक भाषा है जो हास्केल का विस्तार है। साथ ही, ब्लूजपेक इंक के उपकरण हास्केल में लागू किए गए हैं।
  • क्रिप्टोग्राफी एल्गोरिदम के विकास और सत्यापन के लिए एक भाषा और टूलचेन, क्रिप्टोल हास्केल में लागू किया गया है।
  • फेसबुक अपने एंटी-स्पैम प्रोग्राम को लागू करता है[55] हास्केल में, अंतर्निहित डेटा एक्सेस लाइब्रेरी को खुला स्रोत सॉफ्टवेयर के रूप में बनाए रखना।[56]
  • हास्केल में कार्डानो (ब्लॉकचैन प्लेटफॉर्म) लागू किया गया है।[57]
  • GitHub ने सिमेंटिक (सॉफ़्टवेयर), हास्केल में अविश्वसनीय स्रोत कोड के विश्लेषण, अंतर और व्याख्या के लिए एक ओपन-सोर्स लाइब्रेरी लागू की।[58]
  • मानक चार्टर्ड की वित्तीय मॉडलिंग भाषा म्यू सिंटैक्टिक हास्केल सख्त रनटाइम पर चल रही है।[59]
  • seL4 , पहला औपचारिक तरीका microkernel ,[60] ओएस डेवलपर के लिए प्रोटोटाइप भाषा के रूप में हास्केल का उपयोग किया।[60]: p.2  साथ ही, हास्केल कोड ने एक निष्पादन योग्य विनिर्देश को परिभाषित किया जिसके साथ प्रमेय-सिद्ध उपकरण द्वारा स्वचालित अनुवाद के लिए तर्क दिया गया।[60]: p.3  हास्केल कोड इस प्रकार अंतिम सी (प्रोग्रामिंग भाषा) शोधन से पहले एक मध्यवर्ती प्रोटोटाइप के रूप में कार्य करता है।[60]: p.3 
  • टार्गेट कोर्पोरेशन स्टोर आपूर्ति श्रृंखला अनुकूलन सॉफ्टवेयर हास्केल में लिखा गया है।[61]

वेब

हास्केल के लिए लिखे गए उल्लेखनीय वेब फ्रेमवर्क में सम्मलित हैं:[62]

आलोचना

2002 में जन-विलेम मेसेन और 2003 में साइमन पीटन जोन्स ने मूल्यांकन से जुड़ी समस्याओं पर चर्चा की, जबकि इसके लिए सैद्धांतिक उद्देश्यों को भी स्वीकार किया।[63][64] अच्छे प्रदर्शन जैसे विशुद्ध रूप से व्यावहारिक विचारों के अतिरिक्त,[65] वे ध्यान देते हैं कि मूल्यांकन प्रोग्रामर के लिए अपने कोड के प्रदर्शन (विशेष रूप से इसके स्थान उपयोग) के बारे में तर्क करना अधिक कठिन बना देता है।

2003 में बस्तियान हीरेन, डैन लीजेन, और अर्जन वैन आईजेजेंडोर्न ने भी हास्केल शिक्षार्थियों के लिए कुछ बाधाओं का अवलोकन किया: हास्केल की सूक्ष्म वाक्य रचना और परिष्कृत प्रकार की प्रणाली है - अनुभवी प्रोग्रामरों द्वारा अत्यधिक सराहना की जाती है लेकिन प्रारंभिक लोगों के बीच निराशा का स्रोत भी है। चूंकि हास्केल की व्यापकता अधिकांशतः गुप्त त्रुटि संदेशों की ओर ले जाती है।[66] इन्हें संबोधित करने के लिए, यूट्रेक्ट विश्वविद्यालय के शोधकर्ताओं ने हीलियम (हास्केल) नामक एक उन्नत द्विभाषिया विकसित किया, जिसने कुछ हास्केल सुविधाओं की व्यापकता को सीमित करके और विशेष रूप से टाइप क्लास के लिए समर्थन को हटाकर त्रुटि संदेशों की उपयोगकर्ता-मित्रता में सुधार किया।

बेन लिपमीयर ने शिष्य बनाया[67] एक मूल्यांकन रणनीति के रूप में मूल्यांकन के बारे में तर्क करने में हास्केल की कठिनाइयों को दूर करने के लिए और परिवर्तनीय सारणी जैसे पारंपरिक डेटा संरचनाओं का उपयोग करने में हास्केल की डिफ़ॉल्ट (स्पष्ट एनोटेशन) भाषा हैं।[68] उनका तर्क है (पृष्ठ 20) कि विनाशकारी अद्यतन प्रोग्रामर को दो महत्वपूर्ण और शक्तिशाली उपकरण प्रदान करता है, वस्तुओं के संग्रह के प्रबंधन के लिए कुशल सरणी-जैसी डेटा संरचनाओं का सेट, और सभी के लिए नये मूल्यों पर प्रसारित करने की क्षमता प्रोग्रामर पर न्यूनतम बोझ वाले प्रोग्राम के लिए उपयोगी हैं।

स्टैंडर्ड एमएल के लेखकों में से एक रॉबर्ट हार्पर (कंप्यूटर वैज्ञानिक) ने परिचयात्मक प्रोग्रामिंग सिखाने के लिए हास्केल का उपयोग नहीं करने के अपने कारण बताए हैं। इनमें गैर-सख्त मूल्यांकन के साथ संसाधनों के उपयोग के बारे में तर्क करने की कठिनाई है, कम मूल्यांकन करने के लिए डेटाटाइप्स और आगमनात्मक तर्क की परिभाषा को जटिल बनाया जाता है,[69] और एमएल के मॉड्यूल सिस्टम की तुलना में हास्केल (प्राचीन) वर्ग प्रणाली के लिए उपयोग की जाती है।[70]

हास्केल के निर्माण उपकरण, कैबल (सॉफ्टवेयर) की ऐतिहासिक रूप से इसकी लाइब्रेरी के कई संस्करणों को बुरे तरीके से संभालने के लिए आलोचना की गई है, एक समस्या जिसे कैबल हेल के रूप में जाना जाता है। इन आलोचनाओं के जवाब में स्टैकेज सर्वर और स्टैक (हास्केल) बिल्ड टूल बनाए गए थे।[71] कैबल के पास अब बहुत अधिक परिष्कृत बिल्ड सिस्टम है, जो निक्स पैकेज मैनेजर से काफी प्रेरित है,[72] जो संस्करण 3.0 के साथ डिफ़ॉल्ट बन गया।

संबंधित भाषाएँ

क्लीन (प्रोग्रामिंग भाषा) हास्केल की करीबी, सह भाषा है। हास्केल से इसका सबसे बड़ा विचलन इनपुट/आउटपुट और साइड-इफेक्ट्स के लिए मोनाड्स के अतिरिक्त विशिष्टता प्रकार के उपयोग में है।

हास्केल से प्रेरित भाषाओं की इस श्रृंखला को विभिन्न प्रकार की प्रणालियों के साथ विकसित किया गया है, जिनमें निम्नलिखित सम्मलित हैं:

  • Agda (प्रमेय प्रमेय), निर्भर प्रकार के साथ फंक्शनल भाषा।
  • केयेन (प्रोग्रामिंग भाषा) , आश्रित प्रकार के साथ।
  • एल्म (प्रोग्रामिंग भाषा), वेब फ्रंट-एंड ऐप्स बनाने के लिए एक फंक्शनल भाषा, उपयोगकर्ता-परिभाषित या उच्च- प्रकार (प्रकार सिद्धांत) प्रकार की कक्षाओं या उदाहरणों के लिए कोई समर्थन नहीं हैं।
  • एपिग्राम (प्रोग्रामिंग भाषा), प्रोग्राम के गुणों को साबित करने के लिए उपयुक्त आश्रित प्रकारों वाली फंक्शनल भाषा हैं।
  • इदरीस (प्रोग्रामिंग भाषा), आश्रित प्रकार के साथ एक सामान्य प्रयोजन फंक्शनल भाषा, सेंट एंड्रयूज विश्वविद्यालय में विकसित की गई।
  • प्योरस्क्रिप्ट जावास्क्रिप्ट के लिए संकलित है।
  • ओमेगा, सख्त और अधिक।[clarification needed]

अन्य संबंधित भाषाओं में सम्मलित हैं:

उल्लेखनीय हास्केल रूपों में सम्मलित हैं:

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

सम्मेलन और कार्यशालाएं

हास्केल समुदाय अनुसंधान और विकास गतिविधियों के लिए नियमित रूप से मिलता है। मुख्य कार्यक्रम हैं:

2006 से शुरू होकर, संगठित हैकथॉन की एक श्रृंखला हुई है, एचएसी श्रृंखला, जिसका उद्देश्य प्रोग्रामिंग भाषा उपकरण और लाइब्रेरीों में सुधार करना है।[73]

संदर्भ

  1. 1.0 1.1 1.2 Hudak et al. 2007.
  2. 2.0 2.1 Marlow, Simon (24 November 2009). "Announcing Haskell 2010". Haskell (Mailing list). Retrieved 12 March 2011.
  3. 3.0 3.1 Riedel, Herbert (28 April 2016). "ANN: Haskell Prime 2020 committee has formed". Haskell-prime (Mailing list). Retrieved 6 May 2017.
  4. 4.00 4.01 4.02 4.03 4.04 4.05 4.06 4.07 4.08 4.09 4.10 4.11 4.12 Peyton Jones 2003, p. xi
  5. Norell, Ulf (2008). "Dependently Typed Programming in Agda" (PDF). Gothenburg: Chalmers University. Retrieved 9 February 2012.
  6. Hudak et al. 2007, pp. 12–38, 43.
  7. Stroustrup, Bjarne; Sutton, Andrew (2011). "Design of Concept Libraries for C++" (PDF). Archived from the original (PDF) on 10 February 2012. {{cite journal}}: Cite journal requires |journal= (help)
  8. 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Hudak et al. 2007, pp. 12-45–46.
  9. 9.0 9.1 Meijer, Erik (2006). "Confessions of a Used Programming Language Salesman: Getting the Masses Hooked on Haskell". Oopsla 2007. CiteSeerX 10.1.1.72.868.
  10. Meijer, Erik (1 October 2009). "C9 Lectures: Dr. Erik Meijer – Functional Programming Fundamentals, Chapter 1 of 13". Channel 9. Microsoft. Retrieved 9 February 2012.
  11. Drobi, Sadek (4 March 2009). "Erik Meijer on LINQ". InfoQ. QCon SF 2008: C4Media Inc. Retrieved 9 February 2012.{{cite news}}: CS1 maint: location (link)
  12. Hickey, Rich. "Clojure Bookshelf". Listmania!. Archived from the original on 3 October 2017. Retrieved 3 October 2017.
  13. Heller, Martin (18 October 2011). "Turn up your nose at Dart and smell the CoffeeScript". InfoWorld. Retrieved 2020-07-15.
  14. "Declarative programming in Escher" (PDF). Retrieved 7 October 2015.
  15. Syme, Don; Granicz, Adam; Cisternino, Antonio (2007). Expert F#. Apress. p. 2. F# also draws from Haskell particularly with regard to two advanced language features called sequence expressions and workflows.
  16. "Facebook Introduces 'Hack,' the Programming Language of the Future". WIRED. 20 March 2014.
  17. "Idris, a dependently typed language". Retrieved 26 October 2014.
  18. "LiveScript Inspiration". Retrieved 4 February 2014.
  19. Freeman, Phil (2016). "PureScript by Example". Leanpub. Retrieved 23 April 2017.
  20. Kuchling, A. M. "Functional Programming HOWTO". Python v2.7.2 documentation. Python Software Foundation. Retrieved 9 February 2012.
  21. "Glossary of Terms and Jargon". Perl Foundation Perl 6 Wiki. The Perl Foundation. Archived from the original on 21 January 2012. Retrieved 9 February 2012.
  22. "The Rust Reference: Appendix: Influences". Retrieved 3 February 2016.
  23. Fogus, Michael (6 August 2010). "MartinOdersky take(5) toList". Send More Paramedics. Retrieved 9 February 2012.
  24. Lattner, Chris (3 June 2014). "Chris Lattner's Homepage". Chris Lattner. Retrieved 3 June 2014. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  25. Chevalier, Tim (28 January 2008). "कोई मुझे "हास्केल" का उच्चारण बता सकता है?". Haskell-cafe (Mailing list). Retrieved 12 March 2011.
  26. Type inference originally using Hindley-Milner type inference
  27. 27.0 27.1 27.2 Peyton Jones 2003.
  28. Edward Kmett, Edward Kmett – Type Classes vs. the World
  29. Mossberg, Erik (2020-06-08), erkmos/haskell-companies, retrieved 2020-06-22
  30. O'Sullivan, Bryan; Goerzen, John; Stewart, Donald Bruce (15 November 2008). रियल वर्ल्ड हास्केल: कोड जिस पर आप विश्वास कर सकते हैं (in English). "O'Reilly Media, Inc.". pp. xxviii–xxxi. ISBN 978-0-596-55430-9.
  31. "प्रोडक्शन में हास्केल: रिस्कबुक". Serokell Software Development Company (in English). Retrieved 2021-09-07.
  32. "प्रोग्रामिंग लैंग्वेज इंडेक्स की PYPL लोकप्रियता". pypl.github.io (in English). May 2021. Archived from the original on 7 May 2021. Retrieved 16 May 2021.
  33. Frederickson, Ben. "गिटहब उपयोगकर्ताओं द्वारा रैंकिंग प्रोग्रामिंग भाषाएं". www.benfrederickson.com. Retrieved 6 September 2019.
  34. 34.0 34.1 34.2 Peyton Jones 2003, Preface.
  35. Wadler, Philip (October 1988). "तदर्थ बहुरूपता को कम तदर्थ कैसे बनाया जाए".
  36. Peyton Jones, Simon (2003). "हेयर शर्ट पहनना: हास्केल पर एक पूर्वव्यापी". Microsoft.
  37. "हास्केल विकी: कार्यान्वयन". Retrieved 18 December 2012.
  38. "हास्केल में आपका स्वागत है'". The Haskell' Wiki. Archived from the original on 20 February 2016. Retrieved 11 February 2016.
  39. GHC 2020 Team (29 October 2021) GHC 9.2.1 released
  40. Wadler, P.; Blott, S. (1989). "तदर्थ बहुरूपता को कम तदर्थ कैसे बनाया जाए". Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM: 60–76. doi:10.1145/75277.75283. ISBN 978-0-89791-294-5. S2CID 15327197.
  41. Hallgren, T. (January 2001). "फंक्‍शनल डिपेंडेंसीज के साथ फन, या हास्केल में स्‍टेटिक संगणनाओं में वैल्‍यू के रूप में टाइप". Proceedings of the Joint CS/CE Winter Meeting. Varberg, Sweden.
  42. Computer Language Benchmarks Game
  43. "HackageDB आँकड़े". Hackage.haskell.org. Archived from the original on 3 May 2013. Retrieved 26 June 2013.
  44. "Implementations" at the Haskell Wiki
  45. "The LLVM Backend". GHC Trac.
  46. Terei, David A.; Chakravarty, Manuel M. T. (2010). "जीएचसी के लिए एक एलएलवीएम बैकएंड". Proceedings of ACM SIGPLAN Haskell Symposium 2010. ACM Press.
  47. C. Ryder and S. Thompson (2005). "Porting HaRe to the GHC API"
  48. Utrecht Haskell Compiler
  49. Hudak et al. 2007, pp. 12–22.
  50. Agda 2, Agda Github Community, 2021-10-15, retrieved 2021-10-16
  51. "हास्केल कैबल". Retrieved 8 April 2015.
  52. "लिनस्पायर/फ्रीस्पायर कोर ओएस टीम और हास्केल". Debian Haskell mailing list. May 2006.
  53. "ज्वारीय चक्रों के साथ लाइव कोड | ज्वारीय चक्र". doc.tidalcycles.org (in English). Retrieved 2022-01-19.
  54. xmonad.org
  55. "हास्केल के साथ स्पैम से लड़ना". Facebook Code (in English). 26 June 2015. Retrieved 11 August 2019.
  56. "ओपन-सोर्सिंग Haxl, हास्केल के लिए एक पुस्तकालय". Facebook Code (in English). 10 June 2014. Retrieved 11 August 2019.
  57. "इनपुट-आउटपुट-एचके/कार्डानो-नोड: कार्डानो विकेंद्रीकृत ब्लॉकचैन में भाग लेने के लिए उपयोग किया जाने वाला मुख्य घटक". GitHub. Retrieved 2022-03-18.
  58. Parsing, analyzing, and comparing source code across many languages: github/semantic, GitHub, 7 June 2019, retrieved 7 June 2019
  59. "कार्यात्मक प्रोग्रामिंग कार्यशाला रिपोर्ट के वाणिज्यिक उपयोगकर्ता" (PDF). Retrieved 10 June 2022.
  60. 60.0 60.1 60.2 60.3 A formal proof of functional correctness was completed in 2009. Klein, Gerwin; Elphinstone, Kevin; Heiser, Gernot; Andronick, June; Cock, David; Derrin, Philip; Elkaduwe, Dhammika; Engelhardt, Kai; Kolanski, Rafal; Norrish, Michael; Sewell, Thomas; Tuch, Harvey; Winwood, Simon (October 2009). "seL4: Formal verification of an OS kernel" (PDF). 22nd ACM Symposium on Operating System Principles. Big Sky, MT, USA.
  61. "तिखोन जेल्विस: लक्ष्य पर हास्केल". YouTube.
  62. "वेब/फ्रेमवर्क - हास्केलविकि". wiki.haskell.org. Retrieved 17 September 2022.
  63. Jan-Willem Maessen. Eager Haskell: Resource-bounded execution yields efficient iteration. Proceedings of the 2002 Association for Computing Machinery (ACM) SIGPLAN workshop on Haskell.
  64. [dead link]Simon Peyton Jones. Wearing the hair shirt: a retrospective on Haskell. Invited talk at POPL 2003.
  65. "आलसी मूल्यांकन से उत्कृष्ट प्रदर्शन हो सकता है, जैसे कंप्यूटर भाषा बेंचमार्क गेम".
  66. Heeren, Bastiaan; Leijen, Daan; van IJzendoorn, Arjan (2003). "हीलियम, हास्केल सीखने के लिए" (PDF). Proceedings of the 2003 ACM SIGPLAN Workshop on Haskell: 62–71. doi:10.1145/871895.871902. ISBN 1581137583. S2CID 11986908.
  67. "डीडीसी - हास्केल विकि". Haskell.org. 3 December 2010. Retrieved 26 June 2013.
  68. Ben Lippmeier, Type Inference and Optimisation for an Impure World, Australian National University (2010) PhD thesis, chapter 1
  69. Robert Harper (25 April 2011). "आलस्य की बात". closed access
  70. Robert Harper (16 April 2011). "मॉड्यूल सबसे ज्यादा मायने रखते हैं।". closed access
  71. "कैबल नर्क को सुलझाना". www.yesodweb.com. Retrieved 11 August 2019.
  72. "कबाल न्यू-बिल्ड की घोषणा: निक्स-शैली स्थानीय बनाता है". Retrieved 1 October 2019.
  73. "हैकथॉन - हास्केल विकि".


ग्रन्थसूची

Reports
Textbooks
Tutorials
History

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