2009-01-28 13 views
9

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

मेरा प्रश्न यह है कि, क्या अलग-अलग एप्लिकेशन या उपयोग हैं जहां हास्केल जैसी भाषा सामान्य लिस्प जैसी अधिक गतिशील भाषा की तुलना में अधिक समझ सकती है। उदाहरण के लिए, ऐसा लगता है कि लिस्प का उपयोग अधिक नीचे प्रोग्रामिंग के लिए किया जा सकता है, जैसे कि वेबसाइट या जीयूआई बनाने में, जहां हास्केल का उपयोग किया जा सकता है जहां टीसीपी/आईपी सर्वर या कोड पार्सर्स बनाने में समय जांच को अधिक आवश्यकता होती है।

लोकप्रिय लिस्प अनुप्रयोगों: Emacs

लोकप्रिय हास्केल अनुप्रयोगों: Pugs Darcs

आप सहमत हैं, और इस पर किसी भी अध्ययन कर रहे हैं?

उत्तर

14

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

उदाहरण के लिए, हास्केल एक ऐसी भाषा है जो प्रकारों के संदर्भ में आपकी समस्या के बारे में सोचने पर जोर देती है। यदि हास्केल के डेटा प्रकारों के संदर्भ में आपकी समस्या को व्यक्त करने का एक सुविधाजनक तरीका है, तो आपको शायद यह पता चलेगा कि यह आपके प्रोग्राम को लिखने के लिए एक सुविधाजनक भाषा है।

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

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

5

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

ठीक है,:

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

अवांछित, कमजोर टाइप किए गए और दृढ़ता से टाइप की गई भाषाओं की तुलना करने के बारे में कई अध्ययन हैं। ये अध्ययन अनिवार्य रूप से या तो कहते हैं कि उनमें से एक बेहतर है, या कहें कि कोई अवलोकन करने योग्य अंतर नहीं है। हालांकि, में अध्ययनों के बीच थोड़ा समझौता हुआ है।

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

+2

आम लिस्प भी दृढ़ता से टाइप किया जाता है, यह केवल रनटाइम पर टाइप निर्धारित करता है, यानी यह गतिशील रूप से टाइप किया जाता है (स्थिर के विपरीत, जैसे हास्केल)। "स्थिर" <-> "कमजोर" <-> "मजबूत" के साथ "गतिशील" को भ्रमित न करें! – Svante

+0

इसके अलावा, कॉमन लिस्प प्रोग्रामिंग प्रोग्रामिंग समेत विभिन्न प्रकार की प्रोग्रामिंग शैलियों का समर्थन करता है, इसलिए यह विवाद भी एक साइड विषय है (उस में हास्केल "शुद्ध" है जबकि सीएल भी अन्य तरीकों से खुद को उधार देता है)। – Svante

+1

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

4

मैं आम तौर पर एक आम लिस्प परिप्रेक्ष्य से आता हूं, और जहां तक ​​मैं देख सकता हूं, आम लिस्प एप्लिकेशन के लिए उपयुक्त है।

हां, डिफ़ॉल्ट गतिशील टाइपिंग (यानी रनटाइम पर टाइप डिटेक्शन) है, लेकिन आप ऑप्टिमाइज़ेशन के लिए वैसे भी प्रकार घोषित कर सकते हैं (अन्य पाठकों के लिए साइड नोट के रूप में: सीएल दृढ़ता से टाइप किया गया है; स्थिर के साथ कमजोर/मजबूत भ्रमित न करें/गतिशील!)।

मैं कल्पना कर सकता हूं कि हास्केल एवियनिक्स क्षेत्र में एडा के प्रतिस्थापन के रूप में थोड़ा बेहतर हो सकता है, क्योंकि यह संकलन समय पर कम से कम सभी प्रकार के चेक को मजबूर करता है।

मुझे नहीं पता कि सीएल को टीसीपी/आईपी सर्वर या कोड पार्सर्स के लिए हास्केल के रूप में उपयोगी क्यों नहीं होना चाहिए - बल्कि विपरीत, लेकिन हास्केल के साथ मेरे संपर्क अब तक संक्षिप्त हैं।

+4

हास्केल एडा प्रतिस्थापन के रूप में उपयोगी नहीं है। आलसी आलसी डेटा संरचनाओं और कचरा संग्रह के कारण अकसर अप्रत्याशित प्रदर्शन है। यह फ्लाइट सॉफ्टवेयर में वांछनीय नहीं है। –

3

हास्केल एक शुद्ध कार्यात्मक भाषा है। हालांकि यह अनिवार्य संरचनाओं (monads का उपयोग करके) की अनुमति देता है, यह आम तौर पर प्रोग्रामर को एक और गणितीय उन्मुख दृष्टिकोण का उपयोग करके समस्या को अलग तरीके से सोचने के लिए मजबूर करता है। उदाहरण के लिए, आप एक चर के लिए एक और मान पुन: असाइन नहीं कर सकते हैं।

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

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

कुछ एचस्केल विकास किट, जैसे जीएचसी, इंटरैक्टिव वातावरण भी पेश करता है।

0

डायनेमिक टाइपिंग के लिए सबसे अच्छा उपयोग जो मैंने पाया है वह तब होता है जब आप उन चीज़ों पर निर्भर करते हैं जिन पर आपका कोई नियंत्रण नहीं है, इसलिए यह गतिशील रूप से भी उपयोग किया जा सकता है।

var volume = parseXML("mydoc.xml").speaker.volume() 

बतख टाइपिंग का उपयोग नहीं कुछ इस तरह का कारण बन:

var volume = parseXML("mydoc.xml").getAttrib["speaker"].getAttrib["volume"].ToString() 

दूसरी ओर हास्केल के लाभ सुरक्षा में है उदाहरण XML दस्तावेज़ से जानकारी प्राप्त करने के लिए हम कुछ इस तरह कर सकता है । उदाहरण के लिए आप Fahrenheit and Celsius are never mixed unintentionally में डिग्री, प्रकारों का उपयोग करके सुनिश्चित कर सकते हैं। इसके अलावा मुझे लगता है कि स्थैतिक टाइप की गई भाषाओं में बेहतर आईडीई हैं।

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