जवाबों:
बहुत सारे अंतर हैं, कुछ तकनीकी, कुछ सामाजिक। मैंने पहले अधिक महत्वपूर्ण अंतर डालने की कोशिश की है।
SML एक परिभाषा और एक मानक के साथ एक भाषा है। यह स्थिर है (और वास्तव में जम गया है इसलिए यह विकसित नहीं हो सकता है)। ऑब्जेक्टिव कैमल एक कार्यान्वयन है जो कि एक छोटे से समूह द्वारा नियंत्रित किया जाता है। यह निरंतर विकसित हो रहा है। (IMO विकास का प्रबंधन अच्छी तरह से किया जाता है।)
SML के कई कार्यान्वयन हैं; कैमल के पास सिर्फ एक है।
ऑब्जेक्टिव कैमल में कई अतिरिक्त विशेषताएं हैं, जिनमें से सबसे प्रमुख संभवतः ऑब्जेक्ट और पॉलीमॉर्फिक वेरिएंट हैं।
दो भाषाओं में नाटकीय रूप से रिकॉर्ड प्रकार के विभिन्न मॉडल हैं। संक्षेप में, कैमल में, रिकॉर्ड फ़ील्ड्स के नाम अद्वितीय होने चाहिए, जहां SML में, एक ही दायरे में दो अलग-अलग रिकॉर्ड प्रकारों में फ़ील्ड नाम समान हो सकते हैं। यह क्वर्की SML से लेकर Caml को थोड़ा मुश्किल बना सकता है।
काफी कुछ वाक्यात्मक अंतर हैं।
पुस्तकालय और मानक कार्य नाटकीय रूप से अलग हैं। कैमल लाइब्रेरी बहुत अनिवार्य है, जबकि एसएमएल स्टैंडर्ड बेसिस लाइब्रेरी अधिक कार्यात्मक है। उदाहरण के लिए, फ़ंक्शन संरचना एसएमएल में एक शीर्ष-स्तरीय आदिम है; यह कैमल लाइब्रेरी का हिस्सा नहीं है। कैमल स्ट्रिंग लाइब्रेरी एक फोल्ड फ़ंक्शन (कम से कम संस्करण 3.08 के रूप में नहीं) प्रदान नहीं करता है। कैमल List
कार्यों में से कई के कार्यान्वयन बहुत लंबी सूची के लिए असुरक्षित हैं; वे ढेर को उड़ाते हैं।
प्रकार सिस्टम सूक्ष्म रूप से भिन्न होते हैं: कैमल में, एक अभिव्यक्ति पर एक प्रकार का एनोटेशन e : ty
स्वीकार किया जाता है यदि प्रकार के साथ ty
एकीकृत होता है e
। SML में, e : ty
केवल तभी स्वीकार किया जाता है जब प्रकार ty
का एक उदाहरण है e
। यह अंतर अभ्यास में कैमल के एनोटेशन को बहुत कम उपयोगी बनाता है, क्योंकि एक प्रकार के एनोटेशन का उपयोग यह कहना असंभव है कि एक अभिव्यक्ति बहुरूपी है।
Caml का SML की तुलना में इंटरफेस (जिसे मॉड्यूल प्रकार या हस्ताक्षर कहा जाता है ) और (ठोस) कार्यान्वयन (जिसे मॉड्यूल या संरचना कहा जाता है) के बीच बहुत अधिक समझदार और समझदार संबंध है । SML में बहुत कुछ हो जाता है और आपको अच्छे सम्मेलनों को स्थापित करने के लिए प्रोग्रामर पर निर्भर रहना पड़ता है। कैमल में, अच्छे सम्मेलनों को संकलक द्वारा स्थापित और लागू किया जाता है।
SML में, अंकगणित ऑपरेटरों को फ्लोटिंग-पॉइंट और पूर्णांक डेटा दोनों पर लागू करने के लिए अधिभारित किया जाता है। कैमल में, ऑपरेटरों को अतिभारित नहीं किया जाता है; फ्लोटिंग-पॉइंट ऑपरेटरों को एक अतिरिक्त डॉट के साथ नोट किया गया है।
एसएमएल में, प्रोग्रामर इन्फिक्स ऑपरेटरों की पूर्वता और असावधानी को नियंत्रित कर सकता है। कैमल में, ये ऑपरेटर के नाम के पहले चरित्र द्वारा निर्धारित किए जाते हैं। यह प्रतिबंध आपके खुद के इन्फिक्स नोटेशन को परिभाषित करने में सक्षम होने के लाभों को सीमित करता है।
संपादकीय टिप्पणी के साथ और अधिक विस्तृत विश्लेषण के लिए, आप एडम चिप्पला के तुलना पृष्ठ पर भी देख सकते हैं ।
e : 'a . ty(a)
संभव और सार्थक है।
नॉर्मन राम्सी ने जिन वाक्यात्मक अंतरों के बारे में बताया, उनके बारे में यहाँ कुछ वेब पेज हैं:
OCaml ऑब्जेक्ट-ओरिएंटेशन फीचर्स जोड़ता है और इसमें कुछ छोटे सिंटैक्स अंतर हैं।