F # OCaml से लिया गया है, लेकिन कौन सी प्रमुख वस्तुएं गायब हैं या जोड़ी गई हैं? विशेष रूप से मुझे इस बात की उत्सुकता है कि क्या OCaml सीखने के लिए उपलब्ध संसाधन किसी ऐसे व्यक्ति के लिए भी उपयोगी हैं जो F # सीखना चाहते हैं।
F # OCaml से लिया गया है, लेकिन कौन सी प्रमुख वस्तुएं गायब हैं या जोड़ी गई हैं? विशेष रूप से मुझे इस बात की उत्सुकता है कि क्या OCaml सीखने के लिए उपलब्ध संसाधन किसी ऐसे व्यक्ति के लिए भी उपयोगी हैं जो F # सीखना चाहते हैं।
जवाबों:
मुख्य अंतर यह है कि F # समर्थन नहीं करता है:
इसके अलावा, एफ # में लेबल और वैकल्पिक मापदंडों के लिए एक अलग वाक्यविन्यास है।
सिद्धांत रूप में, OCaml प्रोग्राम जो इन सुविधाओं का उपयोग नहीं करते हैं, उन्हें F # के साथ संकलित किया जा सकता है। OCaml सीखना F # (और इसके विपरीत, मुझे लगता है) के लिए एक पूरी तरह से उचित परिचय है।
मतभेदों की पूरी सूची यहां है (नोट: आर्काइव। डेड लिंक के प्रतिस्थापन)।
इस प्रश्न का उत्तर कुछ समय के लिए दिया गया है, लेकिन मुझे काफी आश्चर्य हुआ कि अधिकांश उत्तर कहते हैं कि OCaml के फीचर्स F # में क्या गायब हैं - यह जानना निश्चित रूप से अच्छा है कि क्या आप मौजूदा OCaml प्रोग्रामों को F # (जो शायद है) में पोर्ट करना चाहते हैं अधिकांश संदर्भित लेखों की प्रेरणा)। हालाँकि, कई विशेषताएं हैं जो F # को एक अलग भाषा बनाती हैं (न कि .NET के लिए OCaml का केवल एक सीमित संस्करण!) यहाँ F # में कुछ चीज़ें जोड़ी गई हैं:
+
सभी न्यूमेरिक प्रकारों के साथ-साथ अपने प्रकारों का भी उपयोग कर सकते हैं जो इसका समर्थन करते हैं।और, ईमानदारी से, मुझे लगता है कि यह विजुअल स्टूडियो आईडीई का उल्लेख करने योग्य भी है। यह भाषा का हिस्सा नहीं है, लेकिन यह वास्तव में उपयोगकर्ता के अनुभव में सुधार करता है (विजुअल स्टूडियो में इंटेलीसेनस समर्थन वास्तव में अच्छा है!)
यदि आप सूची को देखते हैं, तो कई चीजें हैं जो एफ # की लोकप्रियता में काफी हद तक योगदान करती हैं, इसलिए यह "ओनकेर्ल विदाउट फंक्शनलर्स" की तुलना में बहुत अधिक है। F # निश्चित रूप से OCaml पर आधारित है (और अन्य भाषाओं जैसे हास्केल से विचार लेता है) और उनके साथ कई पहलुओं को साझा करता है, हालांकि इसमें बहुत सी अन्य चीजें भी हैं। मुझे लगता है कि अतुल्यकालिक वर्कफ़्लोज़, .NET शैली OO और मेटा-प्रोग्रामिंग जैसी चीज़ों के बिना, Microsoft डेवलपर डिवीजन विज़ुअल स्टूडियो 2010 में F # को शामिल नहीं करेगा।
<@ a @>
, जैसे अकेले टाइप परिभाषाएं दें <@ type t = int @>
और यह मनमाना व्याकरणों को बहुत कम एक्स्टेंसिबल लेक्सर्स और पार्सर्स को हैंडल नहीं कर सकता जैसा कि कैमलप 4 करता है। एक सभ्य मैक्रो सिस्टम की कमी एक कमी है लेकिन, IMHO, F # के लिए किसी भी सभ्य लेक्सर्स और पार्सर्स की कमी कहीं अधिक गंभीर बाधा है। मैं वास्तव में OCaml का उपयोग करके अपने लेक्सर्स और पर्सर्स बनाने के लिए डेवलपर्स को सलाह देता हूं, खुद को उस सबसेट तक सीमित कर देता हूं जो OCaml के बेहतर टूल सपोर्ट से लाभान्वित करने के लिए F # समर्थन करता है और इसे F # में पोर्ट करता है!
मैं हमेशा F # को OCaml के चचेरे भाई के रूप में वर्णित करता हूं क्योंकि OCaml में कई विशेषताएं हैं जो F # के पास नहीं है और कभी भी प्राप्त होने की संभावना नहीं है। F # पिछले CAML भाषा से अधिक निकटता से संबंधित है। विशेष रूप से, एफ # में अमूर्तता के लिए बहुत सीमित समर्थन है और संरचनात्मक टाइपिंग के लिए कोई समर्थन नहीं है (जैसे ओकेएमएल की वस्तुएं और बहुरूपी संस्करण )।
कुछ उत्तरदाताओं ने जो लिखा है, उसके विपरीत, एफ # में लेबल ("नाम") और वैकल्पिक तर्कों के लिए (सीमित) समर्थन है।
हालाँकि, ये सभी उन्नत सुविधाएँ हैं और आप निश्चित रूप से OCaml के बारे में संसाधनों का उपयोग करके छोटे पैमाने पर OCaml- शैली की फंक्शनल प्रोग्रामिंग के पीछे मूल विचारों के साथ पकड़ना शुरू कर सकते हैं। पहला बड़ा अंतर जो आपको पता चलेगा कि बड़े पैमाने पर समस्याएं हैं जैसे एनकैप्सुलेशन और एब्स्ट्रैक्शन जो कि पूरी तरह से OCaml और F # में अलग-अलग तरीकों से हल होते हैं। यदि आप सीखना चाहते हैं कि एफ # में ऐसा कैसे करें, तो केवल उपलब्ध साहित्य विशुद्ध रूप से कार्यात्मक डेटा संरचनाओं पर यह लेख है ।
मुझे यह भी पता चला है कि OCaml का अद्भुत मॉड्यूल सिस्टम कोड को प्रकारों (जैसे डेटा स्ट्रक्चर्स) पर पैरामीटर बनाना आसान बनाता है, लेकिन OOP विकल्प न केवल छिपे हुए हैं बल्कि .NET पर लगभग पूरी तरह से अप्रयुक्त हैं। इसके अलावा, जब सुरुचिपूर्ण ढंग से पैरामीटर डेटा संरचना लिखने की कोशिश कर रहा हूं तो मैंने एफ # संकलक में दर्जनों बग मार दिए क्योंकि किसी ने भी ऐसा करने का प्रयास नहीं किया है। F # stdlib में कुछ अच्छे डेटा संरचना कार्यान्वयन शामिल हैं, लेकिन वस्तुतः कोई पुन: उपयोग नहीं होता है, अर्थात यह एक cut'n'paste कार्य है।
एफ # और ओकेएमएल भाषाओं के एमएल परिवार में टैक्सोनिमिक रूप से कक्षाएं हैं, जिसमें अन्य अजीब जानवरों का एक पूरा पास भी शामिल है। F # OCaml की तुलना में नया है, और इसमें या तो फंक्शनलर्स [मॉड्यूल के कार्य -> मॉड्यूल] या पंक्ति प्रकार [ऑब्जेक्ट क्लास और पॉलीमॉर्फिक वेरिएंट] नहीं हैं। उन दोनों के बीच, वे दो सरलीकरण संभवत: .Net प्लेटफॉर्म पर विकसित करने वाले किसी व्यक्ति के लिए सीखने की अवस्था को आसान बनाते हैं। अफसोस की बात है कि उन दो भाषा सुविधाएँ ओमेक्एल में बेहद शक्तिशाली हैं, इसलिए एफ # कोड के लिए अंतर्दृष्टि प्राप्त करने के लिए ओकेएमएल साहित्य को पढ़ने से संभवतः बाद में समय के साथ निराशा पैदा होगी जब यह संभवतः सी # के लिए एक उत्कृष्ट विकल्प होगा, जहां दोनों उपलब्ध हैं।
F # सीधे OCaml सिंटैक्स का समर्थन करता है। यह 100% संगत नहीं हो सकता है, लेकिन मुझे लगता है कि यह बहुत करीब है।
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
यहां अंतरों की एक सूची दी गई है (यह सुनिश्चित नहीं है कि यह कैसे अप-टू-डेट है)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html