वास्तविक दुनिया में हास्केल का उपयोग किस लिए किया जाता है? [बन्द है]


475

हास्केल के आसपास बहुत प्रचार है, हालांकि, वास्तविक दुनिया के अनुप्रयोगों में इसका उपयोग कैसे किया जाता है, इस बारे में जानकारी प्राप्त करना कठिन है। हास्केल की सबसे लोकप्रिय परियोजनाएं / उपयोग क्या हैं और यह इन समस्याओं को हल करने में उत्कृष्टता क्यों है?


56
नहीं, मैं नहीं करूंगा क्योंकि यह स्पष्ट कट उत्तर है। राय और इस तरह के लिए कोई wiggle कमरा। मैं सिर्फ यह जानना चाहता हूं कि भाषा किस लिए बनाई गई थी।
सर्जियो तापिया


12
@ Papuccino1, रुको, क्या आप जानना चाहते हैं कि इसके लिए क्या उपयोगी है, या इसके लिए क्या बनाया गया था ? पूर्व वह है जो सवाल पूछ रहा है, और वहां राय के लिए बहुत जगह है ...
3

3
@ Papuccino1 - आपके शीर्षक में अतिरिक्त शब्द सवाल का क्या फायदा पहुंचाते हैं? इसके अलावा, मुझे लगता है कि आप इस संदर्भ में "कार्यात्मक" शब्द के उपयोग को गलत समझ रहे हैं, लेकिन यह बताना मुश्किल है।
क्रिस लूत्ज

2
अपनी खुद की वेबसाइट के अनुसार कई कंपनियां विभिन्न प्रकार के उद्देश्यों के लिए इसका उपयोग करती हैं ... haskell.org/haskellwiki/Haskell_in_ind Industries
जूलियन

जवाबों:


309

इस भाषा के लिए कुछ सामान्य उपयोग क्या हैं?

रैपिड अनुप्रयोग का विकास।

यदि आप "हास्केल क्यों?" जानना चाहते हैं, तो आपको कार्यात्मक प्रोग्रामिंग भाषाओं ( https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming से लिया गया ) के लाभों पर विचार करने की आवश्यकता है :

  • कार्यात्मक कार्यक्रम अपने ImperativeLanguage समकक्षों की तुलना में बहुत अधिक प्रवृत्त होते हैं। अक्सर यह प्रोग्रामर उत्पादकता को बढ़ाता है

  • एफपी त्वरित प्रोटोटाइप को प्रोत्साहित करता है। जैसे, मुझे लगता है कि यह चरमप्रक्रम के लिए सबसे अच्छा सॉफ्टवेयर डिज़ाइन प्रतिमान है ... लेकिन मुझे क्या पता है?

  • एफपी कार्यक्षमता के आयाम में मॉड्यूलर है, जहां ObjectOrientedProgramming विभिन्न घटकों के आयाम में मॉड्यूलर है।

  • आपके केक और इसे खाने की क्षमता। कल्पना करें कि आपके पास एक जटिल OO सिस्टम प्रोसेसिंग संदेश है - प्रत्येक घटक संदेश के आधार पर राज्य परिवर्तन कर सकता है और फिर कुछ वस्तुओं को संदेश भेज सकता है, जिनसे वह जुड़ता है। यदि कॉल पदानुक्रम में कोई वस्तु गहरी संदेश त्रुटिपूर्ण है, तो क्या यह आसानी से हर परिवर्तन को वापस लाने में सक्षम होने के लिए बहुत अच्छा नहीं होगा? कैसे विभिन्न राज्यों के इतिहास के बारे में?

  • आपके लिए बनाए गए कई हाउसकीपिंग कार्य: डेटा संरचना (पैटर्नमैचिंग) को डिकंस्ट्रक्ट करना, वैरिएबल बाइंडिंग (क्लोजर के साथ लेक्सिकलस्कोप), मजबूत टाइपिंग (टाइप इंफ़ेक्शन), गारबेजकोलेक्शन, स्टोरेज आवंटन, चाहे बॉक्सेड (पॉइंटर-टू-वैल्यू) का उपयोग करना हो या अनबॉक्स (सीधे मूल्य) ) प्रतिनिधित्व ...

  • सुरक्षित मल्टीथ्रेडिंग! अपरिवर्तनीय डेटा संरचनाएं डेटा रेस की स्थिति के अधीन नहीं हैं, और परिणामस्वरूप ताले द्वारा संरक्षित होने की आवश्यकता नहीं है। यदि आप हमेशा नए ऑब्जेक्ट्स को आवंटित कर रहे हैं, तो मौजूदा लोगों को विनाशकारी रूप से हेरफेर करने के बजाय, लॉकिंग को आवंटन और गारबेजकोलेक्शन सिस्टम में छिपाया जा सकता है।

इसके अलावा हास्केल के अपने फायदे हैं जैसे:

  • गणितीय संकेतन से प्रेरित स्पष्ट, सहज वाक्य रचना।
  • मौजूदा सूचियों के आधार पर एक सूची बनाने के लिए समझ की सूची।
  • लंबोदर भाव: स्पष्ट नाम दिए बिना कार्य बनाते हैं। इसलिए बड़े फॉर्मूलों को संभालना आसान है।
  • हास्केल पूरी तरह से पारदर्शी रूप से पारदर्शी है । I / O का उपयोग करने वाले किसी भी कोड को इस तरह चिह्नित किया जाना चाहिए। इस तरह, यह आपको बिना कोड (गणना) के साइड इफेक्ट्स (जैसे स्क्रीन पर टेक्स्ट डालना) के साथ कोड को अलग करने के लिए प्रोत्साहित करता है।
  • आलसी मूल्यांकन एक बहुत अच्छी सुविधा है:
    • यहां तक ​​कि अगर कुछ आमतौर पर एक त्रुटि का कारण होगा, तब भी यह तब तक काम करेगा जब तक आप परिणाम का उपयोग नहीं करते हैं। उदाहरण के लिए, आप 1 / 0किसी सूची के पहले आइटम के रूप में रख सकते हैं और यह तब भी काम करेगा जब आप केवल दूसरी वस्तु का उपयोग करते हैं।
    • इस सुडोकू सॉल्वर जैसे खोज कार्यक्रमों को लिखना आसान है क्योंकि यह हर संयोजन को एक बार में लोड नहीं करता है - यह बस उन्हें उत्पन्न करता है जैसे कि यह साथ जाता है। आप इसे अन्य भाषाओं में कर सकते हैं, लेकिन केवल हास्केल डिफ़ॉल्ट रूप से ऐसा करता है ।

आप निम्नलिखित लिंक देख सकते हैं:


20
निम्नलिखित विचार अक्सर मेरे दिमाग को पार करते हैं: शुद्ध भाषा में, एक फ़ंक्शन हमेशा एक ही परिणाम देता है जब समान मापदंडों को पारित किया जाता है। यह एक गारंटी है। इसके विपरीत इम्पीरेटिव भाषाएं "स्टेटमेंट्स" के ऊपर सब कुछ बनाती हैं। किसी भी प्रकार की गारंटी के साथ एक बयान नहीं आता है (इसके निष्पादन को छोड़कर समय लगता है और गर्मी पैदा होती है)। तो नींव पहले से ही अस्थिर है और उसके ऊपर सब कुछ अस्थिर रहेगा। मेरे लिए यह हेकेल सीखने का एक कारण था।
बजे मार्टिन ड्रुट्ज़बर्ग

8
यह प्रश्न पूछे जाने के बाद से 6 साल हो गए हैं और जब से गो प्रोग्रामिंग भाषा की शुरुआत हुई है। एक कमजोर प्रकार की प्रणाली होने के बावजूद और आमतौर पर "उद्देश्यपूर्ण रूप से हीन" (कार्यात्मक / एमएल प्रशंसकों के अनुसार), यह उन 6 वर्षों में अधिक से अधिक (और अधिक महत्वपूर्ण) सॉफ्टवेयर जहाज करने में कामयाब रहा है, जो हस्केल के 26 वर्षों में है। मेरा मतलब है कि यह एक केस स्टडी के रूप में है; स्पष्ट रूप से ऐसी चीजें हैं जो कार्यात्मक भाषाओं को पकड़ रही हैं, और वे सभी प्रचार के लिए जिम्मेदार नहीं हो सकते हैं।
वेबर 2

3
आप एक बिंदु भूल गए - हैसेल में कोडिंग एक निरपेक्ष विस्फोट है;) मुझे बहुत मज़ा आया है कि हैसेल में कुछ समस्याओं पर अपना हाथ आजमा रहा हूं।
जे एटकिन

8
@MartinDrautzburg बेशक बयानों की गारंटी के साथ आते हैं। बिना गारंटी के किस तरह की उपयोगी भाषा में कथन होंगे? सी में उदाहरण के लिए x = 5;गारंटी देता है कि इसे निष्पादित करने के बाद, xइसमें मूल्य शामिल है 5
user253751

5
@ E4z9 हाँ, लेकिन C ++ में यह गारंटी है कि operator =कहा जाता है। और यह गारंटी देता है कि क्या होता है यदि आप एकoperator =
user253751

234

मुझे लगता है कि इस पोस्ट में लोग उन लोगों के लिए सबसे महत्वपूर्ण बिंदु याद कर रहे हैं जिन्होंने कभी भी एक कार्यात्मक प्रोग्रामिंग भाषा का उपयोग नहीं किया है: अपने दिमाग का विस्तार करना। यदि आप कार्यात्मक प्रोग्रामिंग में नए हैं तो हास्केल आपको उन तरीकों से सोचने का मौका देगा जो आपने पहले कभी नहीं सोचा था। परिणामस्वरूप अन्य क्षेत्रों और अन्य भाषाओं में आपकी प्रोग्रामिंग में सुधार होगा। कितना? परिमाण लगाना कठिन।


2
मैं एक iPhone, मैक का उपयोग कर रहा हूं। हास्केल का उपयोग कहाँ किया जाता है? मेरा मतलब है कि मैंने जिन ऐप्स का इस्तेमाल किया है, वे ऑब्जेक्टिव-सी या स्विफ्ट + में डेटाबेस और सर्वर के लिए लिखे गए हैं। स्विफ्ट भी कार्यात्मक हो सकता है। तो फिर से मैं उलझन में हूँ कि यह कहाँ है
Honey

2
Facebook इसके साथ SPAM का पता लगाता है
Alex

25
एक अलग स्वर में लिखा गया यह उत्तर कहता है कि हास्केल एक प्रोग्रामर के लिए एक बेहतरीन व्यायाम है, जिसे IMO एक महान सामान्य प्रयोजन की भाषा नहीं बनाता है
Passer By

5
केरा स्टूडियोज में हम Haskell का उपयोग करके iOS और Android गेम्स और ऐप्स लिखते हैं।
इवान पेरेज

1
मैं इससे पूरी तरह सहमत हूं। मैंने दशकों से अनिवार्य भाषाओं में बहुत सारे कोड लिखे हैं। मैं कुछ महीनों के लिए हास्केल की खोज कर रहा हूं और उसने उन चीजों के बारे में अपना दिमाग खोल दिया है जिनके बारे में मैंने पहले नहीं सोचा था।
अदाहुस

87

हास्केल की तरह एक सामान्य उद्देश्य भाषा के लिए क्या अच्छा है के लिए एक अच्छा जवाब है: सामान्य रूप से कार्यक्रम लिखना।

व्यवहार में इसका उपयोग किस लिए किया जाता है, इसकी स्थापना के लिए मेरे पास तीन दृष्टिकोण हैं:

इंगित करता है कि यह ग्राफिक्स, नेटवर्किंग, सिस्टम प्रोग्रामिंग, डेटा संरचनाओं, डेटाबेस, विकास, पाठ प्रसंस्करण के लिए अच्छा है ...

और अंत में, इस पर मेरी राय कि यह वास्तव में मजबूत है:

मुझे आशा है कि आपको यह समझ में आ जाएगा कि आपका प्रश्न कितना व्यापक है, यदि इसका उत्तर किसी विशिष्टता के साथ दिया जाना है।


15
टैग क्लाउड टूट गया है
इलियट कैमरन

टैग क्लाउड उपयोग करते हुए उत्पन्न किया गया था wordcloud ?
Janus Troelsen

29

एक्शन में हास्केल का एक उदाहरण xmonad है , "कोड के 1200 से कम लाइनों में एक विशेषता विंडो प्रबंधक"।


18

से हास्केल विकी :

हास्केल में एयरोस्पेस और डिफेंस से लेकर फाइनेंस तक, वेब स्टार्टअप्स, हार्डवेयर डिजाइन फर्म्स और लॉन-मेम्बर निर्माताओं के लिए व्यावसायिक रूप से उपयोग की एक विविध रेंज है। यह पृष्ठ हास्केल के औद्योगिक उपयोग पर संसाधन एकत्र करता है।

विकिपीडिया के अनुसार, हास्केल भाषा को मौजूदा कार्यात्मक भाषाओं को एक आम में समेकित करने की आवश्यकता से बनाया गया था , जिसे भविष्य के अनुसंधान के लिए कार्यात्मक-भाषा डिजाइन में इस्तेमाल किया जा सकता है।

यह उपलब्ध जानकारी के आधार पर स्पष्ट है कि यह मूल उद्देश्य से आगे निकल गया है और इसका उपयोग अनुसंधान की तुलना में बहुत अधिक किया जाता है। अब इसे सामान्य प्रयोजन कार्यात्मक प्रोग्रामिंग भाषा माना जाता है।

यदि आप अभी भी अपने आप से पूछ रहे हैं, "मुझे इसका उपयोग क्यों करना चाहिए?", तो इसका उपयोग क्यों करें पढ़ें ? हास्केल विकी परिचय का खंड।


13

हास्केल एक सामान्य प्रयोजन प्रोग्रामिंग भाषा है। यह किसी भी चीज़ के लिए इस्तेमाल किया जा सकता है जिसे आप करने के लिए किसी अन्य भाषा का उपयोग करते हैं। आप अपनी कल्पना से कुछ भी सीमित नहीं हैं। यह किसके लिए अनुकूल है? खैर, बहुत ज्यादा सब कुछ। ऐसे कुछ कार्य हैं जिनमें एक कार्यात्मक भाषा उत्कृष्ट नहीं है।

और हां, मैं ड्रीमकिनोड से रेयन हूं। :)

मैं यह भी उल्लेख करना चाहूंगा कि, यदि आप विकिपीडिया पृष्ठ नहीं पढ़ते हैं, तो कार्यात्मक प्रोग्रामिंग एक प्रतिमान है जैसे ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग एक प्रतिमान है। बस के मामले में आप नहीं जानते थे। हास्केल इस अर्थ में भी कार्यात्मक है कि यह काम करता है; यह उस पर काफी अच्छा काम करता है।

सिर्फ इसलिए कि एक भाषा एक वस्तु नहीं है उन्मुख भाषा का मतलब यह नहीं है कि भाषा कुछ भी सीमित है। हास्केल एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है, और जावा के समान सामान्य उद्देश्य है।


9

मेरे पास एक अच्छा है, फेसबुक ने PHP कोड को फिर से लिखने के लिए एक स्वचालित उपकरण बनाया। वे स्रोत को एक सार सिंटैक्स ट्री में पार्स करते हैं, कुछ परिवर्तन करते हैं:

if ($f == false) -> if (false == $f)

मुझे पता नहीं क्यों, लेकिन यह उनकी विशेष शैली प्रतीत होती है और फिर वे इसे सुंदर रूप से प्रिंट करते हैं।

https://github.com/facebook/lex-pass

हम छोटे डोमेन विशिष्ट भाषाओं को बनाने के लिए हैस्केल का उपयोग करते हैं। बड़ी मात्रा में डाटा प्रोसेसिंग। वेब विकास। वेब मकड़ियों। परीक्षण अनुप्रयोगों। लेखन प्रणाली प्रशासन स्क्रिप्ट। बैकएंड स्क्रिप्ट, जो अन्य पार्टियों के साथ संवाद करती है। मॉनिटरिंग स्क्रिप्ट (हमारे पास एक डीएसएल है जो मुनिन के साथ मिलकर काम करता है, इससे आपके एप्लिकेशन के लिए सही मॉनिटर कोड लिखना बहुत आसान हो जाता है।)

हर तरह का सामान। यह कुछ बहुत ही शक्तिशाली और उपयोगी सुविधाओं के साथ बस एक सामान्य सामान्य भाषा है, अगर आप कुछ हद तक गणितीय रूप से इच्छुक हैं।


6
पुन :: FB शैली, गलत को == से पहले डालने का मतलब है यदि आप भूल जाते हैं और केवल एक ही लिखते हैं = तो परिणामी व्यवहार चुपचाप गलत तरीके से एक अनपेक्षित असाइनमेंट ऑपरेशन करने और सामान्य रूप से जारी रखने के बजाय गलत होगा
मैग्नस

A वह चतुर है, आपका बल जो विशेष रूप से संकलित समय के लिए जाना जाता है।
एडगर क्लार्क ने

@EdgarKlerks, PHP का कोई संकलन समय नहीं है। यह अपवाद को उठाने के लिए मजबूर करता है जहां गलती थी, बल्कि विचित्र व्यवहार या दूर के कोड में त्रुटियों के लिए अग्रणी था।
डेफ़र

हालाँकि मुझे falseबाईं ओर लिखने का लाभ दिखाई देता है, लेकिन मुझे इसे स्वचालित रूप से करने के लिए एक उपकरण का उपयोग करने की बात नहीं दिखती है: यदि आपको पहले से ही एक ==ऑपरेटर मिल गया है, तो आप पहले से ही जानते हैं कि आपके पास बग नहीं है जो उस हिस्से का है lex-pass पकड़ने के लिए होता है, और अगर आपको =इसके बदले मिला है तो यह बताने का कोई निश्चित तरीका नहीं है कि यह जानबूझकर है या नहीं।
जेरेमी लिस्ट

1
@JeremyList शायद वे कोडिंग शैली पर बहुत कड़े हैं। मैं देख सकता हूँ कि बड़े करीने से स्वरूपित कोड को और अधिक बड़े करीने से स्वरूपित कोड लिखने के लिए आमंत्रित करता है। बस एक जंगली अनुमान है।
एडगर क्लार्क्स

6

से हास्केल :

हास्केल एक मानकीकृत, सामान्य प्रयोजन वाली विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग भाषा है , जिसमें गैर-सख्त शब्दार्थ और मजबूत स्थिर टाइपिंग है। इसका नाम तर्कशास्त्री हास्केल करी के नाम पर रखा गया है।

मूल रूप से हास्केल का उपयोग बहुत अधिक कुछ भी बनाने के लिए किया जा सकता है जिसे आप सामान्य रूप से अन्य सामान्य-उद्देश्य भाषाओं (जैसे सी #, जावा, सी, सी ++, आदि) का उपयोग करके बनाएंगे।


5

उदाहरण के लिए, इंटरैक्टिव, रियलटाइम HTML5 वेब एप्लिकेशन विकसित करने के लिए। एल्म देखें , जिसका संकलन हास्केल में कार्यान्वित किया गया है और जिसका वाक्य विन्यास हास्केल से बहुत अधिक उधार लेता है।


3

हास्केल और इसके उपयोग के बारे में जानकारी के लिए यह एक बहुत अच्छा स्रोत है:

ओपन सोर्स हास्केल रिलीज और ग्रोथ


लिंक-केवल उत्तर आदर्श नहीं हैं। इस सवाल ने कहा कि चूंकि यह सवाल बंद है, इसलिए इसे हटाने की तुलना में संपादित करना बेहतर हो सकता है।
1

3
2009 के बाद से इस संसाधन को अपडेट नहीं किया गया है।
रॉबर्ट हार्वे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.