हैस्केल एक स्थिर रूप से टाइप किया गया, पूरी तरह से कार्यात्मक प्रोग्रामिंग भाषा है जो अपनी अभिव्यक्ति और मजबूती के लिए जानी जाती है। यह गणितीय कार्यों और अपरिवर्तनीयता के उपयोग पर जोर देती है, जिससे डेवलपर्स संक्षिप्त और स्पष्ट कोड लिख सकते हैं। हैस्केल को बड़े पैमाने पर अनुप्रयोगों के विकास को सुविधाजनक बनाने के लिए डिज़ाइन किया गया है, जबकि एक उच्च स्तर की अमूर्तता बनाए रखता है। यह जटिल एल्गोरिदम, डेटा विश्लेषण और समवर्ती प्रोग्रामिंग से संबंधित कार्यों के लिए विशेष रूप से उपयुक्त है, इसके शक्तिशाली प्रकार प्रणाली और आलसी मूल्यांकन के कारण।
हैस्केल का निर्माण 1980 के दशक के अंत में एक मानकीकृत, ओपन-सोर्स प्रोग्रामिंग भाषा के रूप में किया गया था, जिसका उद्देश्य कई मौजूदा कार्यात्मक भाषाओं को एकीकृत करना था, जिसमें मिरांडा और एमएल शामिल हैं। इस भाषा का नाम हैस्केल करी के नाम पर रखा गया, जो एक गणितज्ञ और तर्कशास्त्री थे, जिनका संयोजक तर्क पर काम कार्यात्मक प्रोग्रामिंग की नींव रखता है।
प्रारंभिक प्रयासों के परिणामस्वरूप 1990 में पहली संस्करण, हैस्केल 1.0 का निर्माण हुआ। अगले वर्षों में, विभिन्न विस्तार और सुधार पेश किए गए, और हैस्केल 98 मानक 1999 में प्रकाशित हुआ। इस मानकीकरण का उद्देश्य बढ़ते पुस्तकालय पारिस्थितिकी तंत्र के लिए एक स्थिर आधार बनाना और अकादमी और उद्योग दोनों में व्यापक अपनाने को सुविधाजनक बनाना था।
आज, हैस्केल एक बहुपरकारी भाषा में विकसित हो चुकी है, जिसका व्यापक उपयोग अकादमी, उद्योग और अनुसंधान में होता है। जीएचसी (ग्लासगो हैस्केल कंपाइलर) जैसे उपकरणों और हैस्केल प्लेटफॉर्म जैसे पुस्तकालयों के विकास के साथ, समुदाय ने विभिन्न अनुप्रयोगों के लिए व्यापक समर्थन को बढ़ावा दिया है, विशेष रूप से डेटा विज्ञान, वित्त और वेब विकास के क्षेत्रों में।
हैस्केल कई कार्यात्मक भाषाओं और परंपराओं से प्रेरणा लेता है, जिसमें लिस्प और एमएल जैसी भाषाओं के विचार शामिल हैं। यह एरलांग और स्काला जैसी भाषाओं के साथ भी जड़ें साझा करता है, विशेष रूप से उनके कार्यात्मक प्रोग्रामिंग पहलुओं में। हैस्केल की प्रकार प्रणाली ने रस्ट और स्विफ्ट जैसी भाषाओं को प्रभावित किया है, जो कार्यात्मक प्रोग्रामिंग तत्वों को अनिवार्य परंपराओं के साथ शामिल करती हैं।
हैस्केल एक मजबूत स्थिर टाइपिंग प्रणाली का उपयोग करता है, जो संकलन के समय प्रकारों की जांच करता है। यह दृष्टिकोण रनटाइम त्रुटियों को न्यूनतम करता है और कोड की विश्वसनीयता को बढ़ाता है।
add :: Int -> Int -> Int
add x y = x + y
हैस्केल स्वचालित रूप से प्रकारों का अनुमान लगा सकता है, जिससे संक्षिप्त कार्य घोषणाएँ संभव होती हैं, जबकि प्रकार सुरक्षा बनाए रखी जाती है।
square x = x * x
हैस्केल की मूल्यांकन रणनीति आलसी है, जिसका अर्थ है कि अभिव्यक्तियों का मूल्यांकन तब तक नहीं किया जाता जब तक कि उनके मान वास्तव में आवश्यक न हों, जिससे अनंत डेटा संरचनाएँ और कुछ परिदृश्यों में बेहतर प्रदर्शन संभव होता है।
ones :: [Int]
ones = 1 : ones -- 1 का अनंत सूची बनाता है
हैस्केल में कार्य पहले श्रेणी के नागरिक होते हैं, जिससे उन्हें तर्क के रूप में पास किया जा सकता है, अन्य कार्यों से लौटाया जा सकता है, और डेटा संरचनाओं में संग्रहीत किया जा सकता है।
applyTwice f x = f (f x)
पैटर्न मिलान डेटा को विघटित करने का एक संक्षिप्त तरीका प्रदान करता है, जिससे कोड को पढ़ना और लिखना आसान हो जाता है।
describeList :: [a] -> String
describeList [] = "सूची खाली है।"
describeList [x] = "सूची में एक तत्व है।"
describeList xs = "सूची में कई तत्व हैं।"
हैस्केल में सभी डेटा अपरिवर्तनीय होते हैं, जिसका अर्थ है कि इसे एक बार बनाने के बाद बदला नहीं जा सकता। यह एक घोषणात्मक प्रोग्रामिंग शैली को प्रोत्साहित करता है और साइड इफेक्ट्स से बचता है।
x = 5
-- x = x + 1 -- यह एक त्रुटि का कारण बनेगा
हैस्केल साइड इफेक्ट्स को संभालने और स्थिति प्रबंधित करने के लिए मोनैड्स का उपयोग करता है, जो गणनाओं के अनुक्रम के लिए एक शक्तिशाली अमूर्तता प्रदान करता है।
import Control.Monad
main = do
putStrLn "अपना नाम दर्ज करें:"
name <- getLine
putStrLn ("नमस्ते, " ++ name ++ "!")
सूची संकलन मौजूदा सूचियों के आधार पर सूचियों के संक्षिप्त और पठनीय निर्माण की अनुमति देता है, जिसमें फ़िल्टरिंग और मैपिंग क्षमताएँ शामिल हैं।
evens = [x | x <- [1..10], even x] -- सम संख्याओं की सूची उत्पन्न करता है
हैस्केल उच्च-क्रम के कार्यों के उपयोग को प्रोत्साहित करता है, जिससे कार्यों को अन्य कार्यों के रूप में पैरामीटर के रूप में स्वीकार किया जा सकता है।
map :: (a -> b) -> [a] -> [b]
map f xs = [f x | x <- xs]
हैस्केल के प्रकार वर्ग बहुरूपता की अनुमति देते हैं और डेवलपर्स को सामान्य इंटरफेस परिभाषित करने में सक्षम बनाते हैं जिन्हें विभिन्न प्रकार लागू कर सकते हैं।
class Eq a where
(==) :: a -> a -> Bool
जीएचसी सबसे व्यापक रूप से उपयोग किया जाने वाला हैस्केल कंपाइलर है, जो उच्च-प्रदर्शन ऑप्टिमाइजिंग कंपाइलर और समवर्तीता और समानांतरता सहित हैस्केल सुविधाओं के लिए व्यापक समर्थन प्रदान करता है।
स्टैक और कैबल हैस्केल परियोजनाओं के प्रबंधन के लिए लोकप्रिय निर्माण प्रणाली हैं। स्टैक पुनरुत्पाद्य निर्माण पर ध्यान केंद्रित करता है, जबकि कैबल एक अधिक लचीला पैकेज प्रबंधन प्रणाली प्रदान करता है।
हैस्केल विकास के लिए सामान्य आईडीई में विजुअल स्टूडियो कोड, हैस्केल प्लगइन के साथ इंटेलिजे आईडिया, और हैस्केल समर्थन के साथ एटम शामिल हैं। ये आईडीई सिंटैक्स हाइलाइटिंग, डिबगिंग, और जीएचसी के साथ एकीकरण जैसी सुविधाएँ प्रदान करते हैं।
स्टैक का उपयोग करके हैस्केल परियोजना बनाने के लिए, आप आमतौर पर stack new project-name
के साथ एक नई परियोजना बनाएंगे, और फिर कोड को संकलित करने के लिए stack build
का उपयोग करेंगे। कैबल के लिए, प्रक्रिया cabal init
के साथ परियोजना को कॉन्फ़िगर करने से शुरू होती है, इसके बाद cabal build
होता है।
हैस्केल का उपयोग विभिन्न क्षेत्रों में किया जाता है, जिसमें:
हैस्केल अपनी पूरी तरह से कार्यात्मक परंपरा, मजबूत स्थिर टाइपिंग, और आलस्य के लिए खड़ा है, जो अधिक अनिवार्य भाषाओं जैसे C++, Java, और Python के साथ विपरीत है।
डेवलपर्स के लिए जो हैस्केल कोड को अन्य भाषाओं में अनुवादित करना चाहते हैं, hsc2hs
जैसे उपकरण हैस्केल को C पुस्तकालयों के साथ एकीकृत करने में मदद कर सकते हैं। विभिन्न स्रोत-से-स्रोत अनुवादक उपकरण उपलब्ध हैं, हालांकि मुख्य रूप से C और C++ जैसी भाषाओं के लिए। कोड की स्पष्टता बनाए रखना और हैस्केल में टिप्पणियों का उपयोग अनुवाद प्रक्रिया को आसान बना सकता है।