2009-11-08 15 views
15

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

+2

http://xkcd.com/1312/ – Surya

उत्तर

51

इस समय मेरे सिर में बस कुछ विचार हैं।

पेशेवरों

  • सीखना Haskell जिस तरह से आप प्रोग्रामिंग के बारे में सोचना बदल जाएगा। (लोगों को अक्सर अन्य भाषाओं में Haskell की तरह कोड लिखने के लिए खुद को पाते हैं एक बार वे Haskell जानें)
  • प्रकार सुरक्षा (शून्य सूचक अपवाद किसी को?)
  • प्रकार निष्कर्ष मतलब है कि आप प्रकार के बारे में चिंता करने की ज़रूरत नहीं है मुख्यधारा भाषाओं ऊपर मील की दूरी पर है जब तक कि बिल्कुल जरूरी नहीं है।
  • यह उच्च निष्पादक निष्पादन योग्य बनाता है।
  • समानता par और pseq combinators
  • इंटरैक्टिव पर्यावरण (गले/GHCi) आप विचारों जल्दी प्रोटोटाइप करने के लिए
  • की अनुमति देने के साथ लगभग तुच्छ है एक अच्छा सहायक समुदाय (irc, मेलिंग सूचियों आदि)
  • बहुत अर्थपूर्ण है और संक्षिप्त वाक्य रचना
  • GHC सक्रिय रूप से विकसित किया जा रहा है और बेहतर, उच्च प्रदर्शन कंप्यूटिंग
  • QuickCheck की कि अतिरिक्त लात के लिए GPU पर कोड निष्पादन के लिए समर्थन> इकाई परीक्षण सहित

विपक्ष

  • सीखना Haskell आप के लिए सभी अन्य भाषाओं को बर्बाद कर देगा।
  • काफी गुप्त प्रोग्राम हैं जो कोई समझता है लिखने के लिए
  • बहुत आसान पाने के लिए, अपने आप को नहीं भी कुछ दिनों के बाद
+3

क्षमताओं की सूची का प्रमुख एक तत्व नहीं होगा? शायद आपका मतलब है कि पहला जोड़ा लेता है = पी – codebliss

+2

मॉड्यूलरिटी के बारे में कैसे? जटिल अनुप्रयोग बनाते समय सबसे बड़ी समस्याएं क्या हैं? क्या सही प्रकार प्राप्त करना मुश्किल है, या क्या आपको बहुत कुछ रिफैक्टर करना होगा? क्या यह monadic और गैर-monadic संस्करण लिखने के लिए परेशान है? – egaga

+0

"लर्निंग हैकेल आपके लिए अन्य सभी भाषाओं को बर्बाद कर देगा।" सच है। हास्केल में लिखने से पहले, मैं शुरू की गई हर परियोजना के लिए सोच रहा था "ठीक है, वह भाषा कौन सा होगी?"।अब मैं हास्केल की तुलना में कुछ भी नहीं सोच रहा हूं (संभवत: आगाडा या इडिस को छोड़कर)। निष्पक्ष होने के लिए, मुझे नहीं पता कि यह एक बहुत अधिक कॉन्ट्रा है या नहीं। हास्केल में वास्तव में बहुत कुछ बेहतर काम करता है। हास्केल में * केवल * काम करने की मुख्य समस्या यह है कि विशिष्ट कार्यों के लिए अच्छी पुस्तकालय और ढांचे हैं जो कोई प्रयास के बिना उपयोग नहीं कर सकते हैं, क्योंकि वे एक अलग भाषा में हैं (कहें, नोड.जेएस इत्यादि) – Turion

1

क्या आप लिखने के लिए, क्या अनुप्रयोगों के प्रकार चाहते हैं जटिल है? आप क्या समस्याएं हल करना चाहते हैं?

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

यदि समस्या को मॉडलिंग करते समय यह एक सीएडी (कंप्यूटर-एडेड डिज़ाइन) प्रोग्राम लिखने जैसे कार्यात्मक प्रोग्रामिंग के साथ अच्छी तरह से फिट नहीं होता है, तो ओओपी बेहतर विकल्प होगा, क्योंकि प्रोग्रामिंग प्रतिमान मॉडल के साथ बेहतर फिट बैठता है।

लेकिन, यदि आप इन समस्याओं से प्रभावित नहीं हैं तो Haskell उपयोग करने के लिए एक महान भाषा हो सकती है।

+0

नहीं था एक कार्यात्मक भाषा में लिखा ऑटोकैड? – Chuck

+0

@ चक - ऐसा लगता है कि सी में लिखा गया है http://www.fourmilab.ch/autofile/www/subsection2_38_3_1.html –

+0

ओह, अजीब। किसी कारण से मैंने सोचा कि यह लिस्प था। सुधारों के लिए धन्यवाद। – Chuck

20

कुछ परियोजनाओं के लिए हास्केल का उपयोग करने के लिए विपक्ष हैं, लेकिन सीखने हास्केल के लिए कोई विपक्ष नहीं है। इसमें समय लगता है, लेकिन यह इसके लायक है। आप एक बेहतर प्रोग्रामर होंगे।

2

लेकिन अब मैं एक

...

तब मैं पेशेवरों और इस शक्तिशाली भाषा का विपक्ष में जानना चाहते हैं (बस सही विकल्प बनाने के लिए) का चयन करना चाहते।

यदि आप मुझे सामान्यीकृत करने की अनुमति देंगे, तो भाषा की पसंद वास्तव में उस समस्या पर निर्भर करती है जिसे आप हल करने की कोशिश कर रहे हैं। कोई भी विकल्प नहीं है जो सब कुछ के लिए काम करेगा, और हमेशा कुछ ऐसी भाषा होगी जो अब आप उपयोग कर रहे हैं उससे बेहतर दिखाई देगी।

नई भाषाएं सीखना जारी रखें, हालांकि, अनुभवों के बारे में जानने के लिए अनुभव आपकी क्षमताओं को बढ़ाएंगे जब किसी परियोजना के लिए कोई भाषा गलत होती है।

10

पेशेवर:
1) हास्केल सबसे अत्याधुनिक प्रोग्रामिंग भाषा है। मैंने कुछ शोध किया है और हैकेल एकमात्र असली अत्याधुनिक प्रोग्रामिंग भाषा प्रतीत होता है। एग्डा और कॉक जैसे अन्य लोग हैं, लेकिन वे वास्तविक दुनिया प्रोग्रामिंग (जैसे पुस्तकालय समर्थन) के लिए काफी प्रयोगात्मक और कमी सुविधाओं हैं। एक अत्याधुनिक प्रोग्रामिंग भाषा में निवेश करना सबसे अच्छा है।

(नोट: मैं इस बारे में बहस नहीं करता कि क्यों हैकेल अत्याधुनिक है, और लगभग कोई अन्य प्रोग्रामिंग भाषा नहीं है। इसमें बहुत अधिक समय लगेगा। तो यह केवल मेरी व्यक्तिगत राय है। अन्य विवरणों के लिए सच है)

(ध्यान दें:। कुछ सुविधाओं को मैं बाद में उल्लेख शायद GHC विशिष्ट हैं, लेकिन मैं अभी भी केवल Haskell लिखना)

2) हास्केल प्रोग्रामर आम तौर पर बहुत स्मार्ट हैं। पुस्तकालयों की कोड गुणवत्ता असाधारण रूप से उच्च है। इसके अलावा, स्टैक ओवरफ्लो पर युक्तियां बहुत अच्छी तरह लिखी गई हैं, और उच्च स्तर पर भी (डॉन स्टीवर्ट जैसे लोगों के लिए धन्यवाद, सिर्फ एक नाम देने के लिए)। मुझे लगता है कि प्रोग्रामिंग में सुधार करने के सर्वोत्तम तरीकों में से एक है अन्य लोगों के कोड से सीखना। उस संबंध में हास्केल बहुत अच्छा है।

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

4) हास्केल अमूर्त गणितीय अवधारणाओं (उदाहरण के लिए monads, functors, combinators, GADT, आदि) के साथ प्रोग्रामिंग का समर्थन करता है। मुझे लगता है कि यह प्रोग्रामिंग उत्पादकता को बढ़ावा देता है।

5) हास्केल प्रकार प्रणाली बहुत लचीला है, और प्रकार अनुमान का समर्थन करता है। यह संभावित त्रुटियों को बहुत कम करता है। संकलन समय पर टाइप सिस्टम की जांच की जाती है। प्रकार सिस्टम प्रलेखन के रूप में मदद करता है।

6) कुछ अत्याधुनिक अवधारणाओं को पहले हैकेल में लागू किया गया है (क्विक चेक लाइब्रेरी की तरह)। बहुत सारे दिलचस्प एक्सटेंशन हैं।

7) हैकेल सिंटैक्स बहुत अच्छी तरह डिज़ाइन किया गया है। कोई अनावश्यक संश्लेषण नहीं है। कोड कॉम्पैक्ट है और पैटर्न मिलान और सूची समझ के लिए synatax काफी अच्छा है। Knuth वकील साक्षर प्रोग्रामिंग जैसे लोग, और हैकेल/जीएचसी इसका समर्थन करता है।

8) Haskell आलसी मूल्यांकन

विपक्ष का समर्थन करता है:
1) यह बहुत जानने के लिए मुश्किल है, और यह Haskell में महारत हासिल करने, महीनों घंटे लगते हैं। उचित कंप्यूटर विज्ञान पृष्ठभूमि के बिना यह भी कठिन है। मोनाड्स और फंक्चर जैसी चीजें समझना मुश्किल है, खासकर गणितीय पृष्ठभूमि के बिना। तो अधिकांश प्रोग्रामर में शायद हैकेल सीखने की क्षमता या इच्छा नहीं है। हास्केल 'सरल' नहीं है। कितनी सरलता एक साधारण भाषा है जो सभी उन्नत सुविधाओं का समर्थन करती है।

2) आईडीई विकल्प अन्य प्रोग्रामिंग भाषाओं के लिए उतने अच्छे नहीं हैं। मैं अपने आईडीई के रूप में लेक्सह का उपयोग करता हूं, यह बहुत अच्छा है, लेकिन यह जावा विकास के लिए ग्रहण से तुलनीय नहीं है।

3) हास्केल का उपयोग एंड्रॉइड या आईफोन विकास के लिए नहीं किया जा सकता है। इसके विपरीत Scala एंड्रॉइड विकास के लिए इस्तेमाल किया जा सकता है, और यह जावा के लिए भी संगत है, जो एक बड़ा फायदा है।

4) मुझे लगता है कि कुछ पुस्तकालयों में उन लोगों का समर्थन करने की कमी है जो उन्हें बनाए रखते हैं और सुधारते हैं। मैं हैकेल में अर्थपूर्ण वेब प्रोग्रामिंग करता हूं, और पुस्तकालय समर्थन बेहतर हो सकता है।

हास्केल सभी परियोजनाओं के लिए उपयुक्त नहीं है। यदि आपको प्रदर्शन के हर मिलीसेकंड की आवश्यकता है, तो सी/सी ++ अभी भी सबसे अच्छा विकल्प है। तो हैकेल कई परियोजनाओं के लिए उपयुक्त है, लेकिन सभी नहीं।

हास्केल के पास अन्य प्रोग्रामिंग भाषाओं पर कई तकनीकी फायदे हैं। हालांकि, हैकेल का उपयोग करने के खिलाफ राजनीतिक कारण हो सकता है। उदाहरण के लिए स्कैला मौजूदा जावा बुनियादी ढांचे के साथ बेहतर एकीकृत करता है।

+3

"हास्केल प्रोग्रामर आमतौर पर बहुत स्मार्ट होते हैं" -> यह "कारण" प्रतिमानों के बारे में अधिकतर चर्चाओं में दिखाई देता है, और विशेष रूप से जब हास्केल का उल्लेख किया जाता है। मुझे हास्केल से प्यार है, लेकिन यह सिर्फ शुद्ध मूर्खतापूर्ण है। पूर्वाग्रह अच्छे नहीं हैं; कंप्यूटर विज्ञान में कोई वैध dogmas नहीं हैं। एक गलत तर्क के रूप में एक गलत तर्क के रूप में इलाज करना केवल दयनीय है। –

+0

स्मार्ट के बजाय "बहुत अच्छा प्रोग्रामर" लिखना बेहतर होगा। हास्केल जैसी भाषाएं और अधिक तो Coq/Agda (Istabelle, और अन्य) बहुत अच्छे प्रोग्रामर आकर्षित करती हैं और आम तौर पर ऐसे प्रोग्रामर को छोड़ती हैं जो इतनी अच्छी नहीं हैं। उत्तरार्द्ध आईओ के साथ बहुत निराश हैं या श्रेणी सिद्धांत की समझ की कमी के कारण वे हैकेल का उपयोग करना बंद कर देते हैं। ऐसी कई भाषाएं हैं जो शौकिया प्रोग्रामर (जैसे PHP) या जावा जैसे लैंगुग को लक्षित करती हैं जिन्हें "सरल और परिचित" महसूस करने का लक्ष्य रखना होता है। "औसत" एग्डा उपयोगकर्ता ने सीएस या गणित में पीएचडीडीग्री पूरा कर लिया है और यह एक बहुत अच्छा प्रोग्रामर है। – mrsteve

+0

अच्छा, यह अधिक सटीक होगा। कुछ अन्य कारण हैं जो कम या ज्यादा बहस योग्य हैं, लेकिन मैं आपसे सहमत हूं। उदाहरण के लिए, दोनों प्रतिमान पुराने हैं, और असली में ऐसी कई चीजें हैं जो उत्परिवर्तन के बारे में हैं। फिर भी, आपके वैध कारण हैं। –

13

मैं भी अपनी मात्र सुंदरता के बावजूद हास्केल के व्यावहारिक सुविधाओं में से कुछ तनाव, चाहते हैं:

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

यदि आपके पास विकल्प है, तो मैं पूरी तरह से किसी अन्य भाषा पर हास्केल सीखने की सलाह देता हूं। ऐसा लगता है कि मौजूदा भाषाओं में सुरक्षा, अमूर्तता और व्यावहारिकता के बीच इष्टतम व्यापारिकता है।

संबंधित मुद्दे