2009-11-29 7 views
62

स्कैला के प्रकार सिस्टम को हास्केल विशेषज्ञ को कैसे समझाया जाए? स्कैला के फायदे किस उदाहरण दिखाते हैं?स्कैला और हास्केल प्रकार प्रणालियों के अंतर और समानताएं क्या हैं?

हास्केल के प्रकार सिस्टम को एक उन्नत स्कैला व्यवसायी को कैसे समझाया जाए? हास्केल में क्या किया जा सकता है जिसे स्कैला में नहीं किया जा सकता है?

उत्तर

95

स्काला एक Haskell प्रोग्रामर करने के लिए:

स्काला प्रथम श्रेणी के मॉड्यूल के साथ एक सख्त और अशुद्ध भाषा है। डेटा प्रकारों को सूक्ष्म मतभेदों के साथ "कक्षाएं" या "लक्षण" के रूप में घोषित किया जाता है, और मॉड्यूल या "ऑब्जेक्ट्स" उन प्रकार के मान होते हैं। स्कैला सार्वभौमिक रूप से मात्राबद्ध प्रकार पैरामीटर लेने वाले प्रकार के रचनाकारों का समर्थन करता है। ऑब्जेक्ट्स/कक्षाओं/लक्षणों में ऐसे सदस्य होते हैं जिनमें मूल्य, म्यूटेबल चर, और फ़ंक्शंस (जिसे "विधियों" कहा जाता है, जिसमें मॉड्यूल को this नामक चर के रूप में निहित रूप से पारित किया जाता है)। मॉड्यूल में टाइप सदस्य हो सकते हैं जो पैरामीटर भी ले सकते हैं। टाइप सदस्यों को अस्तित्व में प्रमाणित किया जाता है और टाइप पैरामीटर उच्च-प्रकार के हो सकते हैं। क्योंकि प्रकार प्रथम श्रेणी के मूल्यों के सदस्य हो सकते हैं, स्कैला path-dependent types नामक निर्भर टाइपिंग का स्वाद प्रदान करता है।

प्रथम श्रेणी के कार्य भी मॉड्यूल हैं। एक फ़ंक्शन एक मॉड्यूल है जिसमें apply नामक विधि है। एक विधि प्रथम श्रेणी नहीं है, लेकिन एक प्रथम श्रेणी के फ़ंक्शन में विधि को लपेटने के लिए एक वाक्यविन्यास प्रदान किया जाता है। दुर्भाग्यवश, एक मॉड्यूल को इसके सभी प्रकार के पैरामीटर सामने की आवश्यकता होती है, इसलिए आंशिक रूप से लागू प्रथम श्रेणी के फ़ंक्शन को सार्वभौमिक रूप से प्रमाणित करने की अनुमति नहीं है। आम तौर पर, स्कैला में 1 से अधिक रैंक के प्रकार के लिए पूरी तरह से प्रत्यक्ष तंत्र की कमी होती है, लेकिन रैंक-एन प्रकारों को अनुकरण करने के लिए उच्च-प्रकार वाले प्रकारों पर पैरामीटर किए गए मॉड्यूल का उपयोग किया जा सकता है।

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

स्कैला उप प्रकार का समर्थन करता है, और यह सीमा काफी अनुमान लगाती है। लेकिन समय के साथ अनुमान लगाया गया है। उच्च प्रकार के प्रकार की पहचान समर्थित है। हालांकि, स्कैला में किसी भी सार्थक प्रकार की प्रणाली की कमी नहीं है, और इसलिए कोई दयालु अनुमान नहीं है और कोई तरह का एकीकरण नहीं है। यदि एक प्रकार परिवर्तनीय पेश किया गया है, तो यह अन्यथा एनोटेट किए जाने तक * जैसा है। कुछ प्रकार जैसे Any (सभी प्रकार के सुपरटेप) और Nothing (प्रत्येक प्रकार का उप प्रकार) तकनीकी रूप से हर प्रकार हैं, हालांकि उन्हें तर्क टाइप करने के लिए लागू नहीं किया जा सकता है।

हास्केल एक स्काला प्रोग्रामर करने के लिए:

हास्केल एक पूरी तरह कार्यात्मक भाषा है। इसका मतलब है कि कार्यों को किसी भी दुष्प्रभाव की अनुमति नहीं है। उदाहरण के लिए, एक हास्केल प्रोग्राम स्क्रीन पर प्रिंट नहीं करता है, लेकिन यह एक ऐसा फ़ंक्शन है जो IO[_] डेटाटाइप का मान देता है जो आईओ उपप्रणाली के प्रदर्शन के अनुक्रमों का अनुक्रम वर्णन करता है।

जबकि स्कैला डिफ़ॉल्ट रूप से सख्त है और गैर-कार्य फ़ंक्शन तर्कों के लिए "उप-नाम" एनोटेशन प्रदान करता है, हास्केल "बाय-ज़रूरत" अर्थशास्त्र का उपयोग करके डिफ़ॉल्ट रूप से आलसी है, और सख्त तर्कों के लिए एनोटेशन प्रदान करता है।

हास्केल में टाइप अनुमान पूर्ण अनुमान होने के साथ स्कैला से अधिक पूर्ण है। इसका मतलब है कि एनोटेशन टाइप करना लगभग कभी जरूरी नहीं है।

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

हास्केल में, एक मॉड्यूल प्रकार और कार्यों का संग्रह है, लेकिन मॉड्यूल प्रथम श्रेणी की इकाइयां नहीं हैं। इम्प्लिकिट्स टाइप क्लास द्वारा प्रदान किए जाते हैं, लेकिन इन्हें वैश्विक रूप से घोषित किए जाने के बाद स्कॉप्ड किया जाता है, और उन्हें स्पष्ट रूप से स्कैला में पारित नहीं किया जा सकता है। दिए गए प्रकार के लिए किसी प्रकार के वर्ग के कई उदाहरणों को newtype के साथ लपेटकर हल किया जाता है, जबकि स्कैला में इसे स्कॉइंग या उदाहरणों को स्पष्ट रूप से पारित करके हल किया जाएगा।

चूंकि हास्केल "ऑब्जेक्ट उन्मुख" नहीं है, इसलिए कोई विधि/फ़ंक्शन डिचोटोमी नहीं है। प्रत्येक कार्य प्रथम श्रेणी है और प्रत्येक फ़ंक्शन डिफ़ॉल्ट रूप से विरामित होता है (कोई फंक्शन 1, फ़ंक्शन 2, आदि)।

हास्केल में कोई सबटाइप तंत्र नहीं है, लेकिन टाइप क्लास में सबक्लास रिलेशनशिप हो सकती है।

+0

क्या आप कुछ उदाहरण प्रदान कर सकते हैं? –

+0

क्या आप स्केल डेवलपर के परिप्रेक्ष्य से हास्केल को समझा सकते हैं? – missingfaktor

+0

@Apocalisp: उच्च-आदेश एकीकरण अपरिहार्य है और यहां तक ​​कि जब एक यूनिफायर पाया जा सकता है, तो एमजीई विशिष्ट रूप से परिभाषित नहीं है। सबसे अच्छा यह हैस्केल में एक गहराई से एम्बेडेड गैर-निर्धारणा छोड़ने लगता है। हास्केल में उच्च-आदेश एकीकरण का क्या उपयोग किया जाता है और इसकी ट्रैक्टबिलिटी और गैर-विशिष्टता के मुद्दों को कैसे नियंत्रित किया जाता है? –

6

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

+3

क्या आप जानते हैं कि इस पोस्ट के बाद से छह साल में ऐसा उपचार प्रकाशित हुआ है? मुझे उस पेपर को पढ़ने में दिलचस्पी होगी। –

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

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