SML और OCaml के बीच अंतर क्या हैं? [बन्द है]


99

दो एमएल बोलियों को अलग करता है?


जवाबों:


157

बहुत सारे अंतर हैं, कुछ तकनीकी, कुछ सामाजिक। मैंने पहले अधिक महत्वपूर्ण अंतर डालने की कोशिश की है।

  • SML एक परिभाषा और एक मानक के साथ एक भाषा है। यह स्थिर है (और वास्तव में जम गया है इसलिए यह विकसित नहीं हो सकता है)। ऑब्जेक्टिव कैमल एक कार्यान्वयन है जो कि एक छोटे से समूह द्वारा नियंत्रित किया जाता है। यह निरंतर विकसित हो रहा है। (IMO विकास का प्रबंधन अच्छी तरह से किया जाता है।)

  • SML के कई कार्यान्वयन हैं; कैमल के पास सिर्फ एक है।

  • ऑब्जेक्टिव कैमल में कई अतिरिक्त विशेषताएं हैं, जिनमें से सबसे प्रमुख संभवतः ऑब्जेक्ट और पॉलीमॉर्फिक वेरिएंट हैं।

  • दो भाषाओं में नाटकीय रूप से रिकॉर्ड प्रकार के विभिन्न मॉडल हैं। संक्षेप में, कैमल में, रिकॉर्ड फ़ील्ड्स के नाम अद्वितीय होने चाहिए, जहां SML में, एक ही दायरे में दो अलग-अलग रिकॉर्ड प्रकारों में फ़ील्ड नाम समान हो सकते हैं। यह क्वर्की SML से लेकर Caml को थोड़ा मुश्किल बना सकता है।

  • काफी कुछ वाक्यात्मक अंतर हैं।

  • पुस्तकालय और मानक कार्य नाटकीय रूप से अलग हैं। कैमल लाइब्रेरी बहुत अनिवार्य है, जबकि एसएमएल स्टैंडर्ड बेसिस लाइब्रेरी अधिक कार्यात्मक है। उदाहरण के लिए, फ़ंक्शन संरचना एसएमएल में एक शीर्ष-स्तरीय आदिम है; यह कैमल लाइब्रेरी का हिस्सा नहीं है। कैमल स्ट्रिंग लाइब्रेरी एक फोल्ड फ़ंक्शन (कम से कम संस्करण 3.08 के रूप में नहीं) प्रदान नहीं करता है। कैमल Listकार्यों में से कई के कार्यान्वयन बहुत लंबी सूची के लिए असुरक्षित हैं; वे ढेर को उड़ाते हैं।

  • प्रकार सिस्टम सूक्ष्म रूप से भिन्न होते हैं: कैमल में, एक अभिव्यक्ति पर एक प्रकार का एनोटेशन e : tyस्वीकार किया जाता है यदि प्रकार के साथ ty एकीकृत होता है e। SML में, e : tyकेवल तभी स्वीकार किया जाता है जब प्रकार tyका एक उदाहरण है e। यह अंतर अभ्यास में कैमल के एनोटेशन को बहुत कम उपयोगी बनाता है, क्योंकि एक प्रकार के एनोटेशन का उपयोग यह कहना असंभव है कि एक अभिव्यक्ति बहुरूपी है।

  • Caml का SML की तुलना में इंटरफेस (जिसे मॉड्यूल प्रकार या हस्ताक्षर कहा जाता है ) और (ठोस) कार्यान्वयन (जिसे मॉड्यूल या संरचना कहा जाता है) के बीच बहुत अधिक समझदार और समझदार संबंध है । SML में बहुत कुछ हो जाता है और आपको अच्छे सम्मेलनों को स्थापित करने के लिए प्रोग्रामर पर निर्भर रहना पड़ता है। कैमल में, अच्छे सम्मेलनों को संकलक द्वारा स्थापित और लागू किया जाता है।

  • SML में, अंकगणित ऑपरेटरों को फ्लोटिंग-पॉइंट और पूर्णांक डेटा दोनों पर लागू करने के लिए अधिभारित किया जाता है। कैमल में, ऑपरेटरों को अतिभारित नहीं किया जाता है; फ्लोटिंग-पॉइंट ऑपरेटरों को एक अतिरिक्त डॉट के साथ नोट किया गया है।

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

संपादकीय टिप्पणी के साथ और अधिक विस्तृत विश्लेषण के लिए, आप एडम चिप्पला के तुलना पृष्ठ पर भी देख सकते हैं ।


4
आप समानता (OCaml बनाम सुरक्षित लेकिन प्रतिबंधित समानता प्रकार SML में), गैर-सामान्यीकृत प्रकार चर ('OCaml में _a), Printf, OCaml में मॉड्यूल नामों के रूप में फ़ाइल नामों की व्याख्या, OCaml के stdlib में कहीं अधिक करीने से भूल गए। आपने दूसरी बार कुछ और (कार्यान्वयन?) का मतलब होने पर दो बार इंटरफ़ेस लिखा।
JD

1
और OCaml या पैटर्न मिलान में गार्ड और पैटर्न।
जेडी

1
ध्यान दें कि टाइप एनोटेशन की उपयोगिता पर सीमा 3.12 में कुछ हद तक कम कर दी गई है, जहां एनोटेटिंग e : 'a . ty(a)संभव और सार्थक है।

4
आप महत्वपूर्ण अवलोकन करते हैं: "कैमल लाइब्रेरी बहुत जरूरी है"। यह पूरे दर्शन की अनुमति देता है, इस बिंदु तक कि मल्टीकोर हार्डवेयर पर समानांतर कार्यान्वयन असंभव से कठिन प्रतीत होता है। इसके विपरीत, कम से कम दो समानांतर SML हैं: Mlton और Poly / ML।
मकेरी

2
अपने तीसरे बिंदु के बारे में, रिकॉर्ड नामों को OCaml में अब और विशिष्टता की आवश्यकता नहीं है।
पाटज

31

नॉर्मन राम्सी ने जिन वाक्यात्मक अंतरों के बारे में बताया, उनके बारे में यहाँ कुछ वेब पेज हैं:


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