f# - एफ#ओकैमल में बदल गया




ocaml functor (4)

इस प्रश्न का उत्तर अब कुछ समय के लिए दिया गया है, लेकिन मुझे आश्चर्य हुआ कि ज्यादातर उत्तरों का कहना है कि एफ # में ओकैम फीचर्स क्या गायब हैं - यह जानना निश्चित रूप से अच्छा है कि क्या आप मौजूदा ओकैम प्रोग्राम को एफ # में बंद करना चाहते हैं (जो शायद संदर्भित लेखों में से अधिकांश का प्रेरणा)। हालांकि, ऐसी कई विशेषताएं हैं जो F # को एक अलग भाषा बनाती हैं (न केवल .NET के लिए ओकैम का सीमित संस्करण!) यहां कुछ चीजें हैं जो F # में जोड़े गए हैं:

  • माप की इकाइयां जो आपको संख्यात्मक गणनाओं से निपटने वाले कोड को टाइप-चेक करने की अनुमति देती हैं
  • उद्धरणों का उपयोग करते हुए मेटा-प्रोग्रामिंग (जो F # में LINQ का उपयोग करना संभव बनाता है और वेबशेपर प्लेटफॉर्म जैसी प्रमोशन परियोजनाओं के लिए भी आवश्यक है)
  • कार्यात्मक डेटा प्रकारों के लिए abstractions बनाने के लिए सक्रिय पैटर्न (और आमतौर पर अधिक जटिल पैटर्न मिलान अनुप्रयोगों के लिए बहुत उपयोगी सुविधा)
  • गणना अभिव्यक्ति जो एक भाषा सुविधा है जो असीमित वर्कफ़्लो (एसिंक्रोनस I / O / वेब सेवा / जीयूआई प्रोग्रामिंग के लिए लाइब्रेरी)
  • .NET संगत ऑब्जेक्ट-सिस्टम जो .NET प्लेटफ़ॉर्म (ओकैमल के साथ पूरी तरह से इंटरऑपरेट करने के लिए भी संभव बनाता है, ऑब्जेक्ट्स के लिए भी समर्थन करता है लेकिन अलग-अलग है - निश्चित रूप से दोनों प्रणालियों में कुछ फायदे हैं)।
  • अधिभारित ऑपरेटर - जहां तक ​​मुझे पता है, ओकैमल में ओवरलोडेड ऑपरेटर नहीं हैं - एफ # में आप सभी संख्यात्मक प्रकारों के साथ-साथ आपके प्रकारों का समर्थन करने के लिए + उपयोग कर सकते हैं।

और, ईमानदारी से, मुझे लगता है कि विजुअल स्टूडियो आईडीई का जिक्र करना भी उचित है। यह भाषा का हिस्सा नहीं है, लेकिन यह वास्तव में उपयोगकर्ता अनुभव में सुधार करता है (विजुअल स्टूडियो में IntelliSense समर्थन वास्तव में अच्छा है!)

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

एफ # ओकैमल से लिया गया है, लेकिन कौन सी प्रमुख वस्तुएं गायब हैं या जोड़े गए हैं? विशेष रूप से मैं उत्सुक हूं कि ओकैमल सीखने के लिए उपलब्ध संसाधन किसी भी व्यक्ति के लिए उपयोगी हैं जो F # सीखना चाहता है।


एफ # और ओकैमल भाषा के एमएल परिवार में टैक्सोनिमिक रूप से कक्षाएं हैं, जिनमें अन्य अजीब जानवरों का पूरा मार्ग भी शामिल है। एफ # ओकैमल से नया है, और इसमें मज़ेदार [मॉड्यूल के कार्य -> ​​मॉड्यूल] या पंक्ति प्रकार [ऑब्जेक्ट क्लासेस और पॉलिमॉर्फिक वेरिएंट] नहीं हैं। उनके बीच, उन दो सरलीकरणों ने शायद नेट प्लेटफ़ॉर्म पर विकसित किसी के लिए सीखने की वक्र को आसान बना दिया है। अफसोस की बात है कि, उन दो भाषा विशेषताएं ओकैमल में बेहद शक्तिशाली हैं, इसलिए एफ # के लिए कोड कैसे करें, इस बारे में अंतर्दृष्टि प्राप्त करने के लिए ओकैमल साहित्य को पढ़ना शायद बाद के साथ समयपूर्व निराशा का कारण बन जाएगा जब यह शायद सी # के लिए एक शानदार विकल्प है जहां दोनों उपलब्ध हैं।


मुख्य अंतर यह है कि एफ # का समर्थन नहीं करता है:

  • functors
  • OCaml- शैली वस्तुओं
  • polymorphic रूपों
  • camlp4 preprocessor

इसके अलावा, एफ # लेबल और वैकल्पिक पैरामीटर के लिए एक अलग वाक्यविन्यास है।

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

मतभेदों की पूरी सूची here (नोट: मृत लिंक के archive.org प्रतिस्थापन)।


मैं हमेशा एफ # को ओकैमल के चचेरे भाई के रूप में वर्णित करता हूं क्योंकि ओकैमल में कई विशेषताएं हैं जिनके पास एफ # नहीं है और कभी भी इसकी संभावना नहीं है। एफ # पिछली सीएएमएल भाषा से अधिक निकटता से संबंधित है। विशेष रूप से, एफ # में अमूर्तता के लिए बहुत सीमित समर्थन है और संरचनात्मक टाइपिंग (जैसे ओकैमल की objects और पॉलिमॉर्फिक वेरिएंट ) के लिए कोई समर्थन नहीं है।

कुछ उत्तरदाताओं ने जो लिखा है उसके विपरीत, एफ # में लेबल ("नामित") और वैकल्पिक तर्कों के लिए (सीमित) समर्थन है।

हालांकि, ये सभी उन्नत सुविधाएं हैं और आप निश्चित रूप से ओकैमल के संसाधनों का उपयोग करके छोटे पैमाने पर ओकैमल-स्टाइल कार्यात्मक प्रोग्रामिंग के पीछे बुनियादी विचारों के साथ पकड़ने लग सकते हैं। पहला प्रमुख अंतर जो आपको मिलेगा वह बड़े पैमाने पर समस्याएं जैसे encapsulation और abstraction है जो OCaml और F # में पूरी तरह से अलग तरीके से हल किए जाते हैं। यदि आप सीखना चाहते हैं कि एफ # में ऐसा कैसे करना है, तो केवल उपलब्ध साहित्य ही लेख पूरी तरह कार्यात्मक डेटा संरचनाओं पर है

मैंने यह भी पाया है कि ओकैमल का अद्भुत मॉड्यूल सिस्टम कोडों जैसे डेटा पैरामीटर को पैरामीटर करना आसान बनाता है (जैसे डेटा संरचनाएं) लेकिन ओओपी विकल्प न केवल घृणास्पद हैं बल्कि लगभग पूरी तरह से अप्रयुक्त हैं। इसके अलावा, जब सुंदर ढंग से पैरामीटरयुक्त डेटा संरचनाओं को लिखने की कोशिश की गई तो मैंने एफ # कंपाइलर में दर्जनों कीड़े को मारा क्योंकि किसी ने भी इससे पहले ऐसा करने का प्रयास नहीं किया है। एफ # stdlib में कुछ अच्छी डेटा संरचना कार्यान्वयन होते हैं लेकिन वास्तव में कोई पुन: उपयोग नहीं होता है, यानी यह एक कट'पेस्ट जॉब है।





functor