तो सवाल करने पर निर्भर करता: वहाँ कोई कारण, के अलावा एक और करने के लिए एक प्रतिमान की एक वरीयता या कुछ टीम या कंपनी वरीयताओं, कि बनाना होगा से कर रहे हैं आप एफ # बल्कि लेने IronPython या उपाध्यक्ष से विपरीत? मान लीजिए कि आप दोनों में समान रूप से आत्मविश्वास रखते हैं? या वे सभी व्यावहारिक उद्देश्यों के लिए बिल्कुल समकक्ष हैं?
के रूप में आम तौर पर मामला है, "यह आप क्या कर रहे पर निर्भर करता है" लेकिन जब से तुम से पूछा, यहां शुरू:
टूलसेट विविधता
देखने की मेरी बात में, IronPython है अनिवार्य रूप से सी # के समान ही सिंटैक्स के साथ - मुझे पता है, यह पूरी तरह से भिन्न प्रकार के सिस्टम के साथ दो भाषाओं के लिए एक व्यापक सामान्यीकरण है, लेकिन वे अभी तक एक और अनिवार्य, ओओ भाषा के बारे में और कुछ नहीं कह सकते हैं। चाहे उसका सी #, या जावा, या सी ++, या पायथन, आप लगभग उसी तकनीक, मुहावरे, रणनीतियों, शैली इत्यादि का उपयोग करके भाषाएं हल करते हैं। यदि आप .NET डेवलपर हैं, तो आपने लगभग निश्चित रूप से सी # या वीबी के साथ काम किया है। नेट, और जब तक आप भाषाओं का उपयोग कर रहे हैं, तब तक आप एक अनिवार्य शैली में कोड लिख रहे हैं।
एफ # के पक्ष में सबसे बड़ा बिंदु यह है कि यह अधिक कार्यात्मक प्रोग्रामिंग शैलियों को प्रोत्साहित करता है, फ़ंक्शन संरचना के पक्ष में ओओ विरासत के माध्यम से अपरिवर्तनीयता को कम करता है, अपरिवर्तनीयता के बाद एक विचार के बजाय डिफ़ॉल्ट रूप से, और इसी तरह। यदि आप कार्यात्मक कोड लिखना चाहते हैं, तो आपको एक कार्यात्मक भाषा का उपयोग करने की आवश्यकता है।
अनुमोदित, आप सी # और पायथन में कार्यात्मक शैली लिख सकते हैं, लेकिन कार्यात्मक सुविधाओं को बाद में विचार के रूप में तैयार किया गया है। पाइथन में मल्टीलाइन लैम्बडास की कमी है, और सी # बहुत वर्बोज़ है और कभी-कभी buggy उन जगहों पर कार्यात्मक शैली का उपयोग करने के लिए जहां आप इसका उपयोग करना चाहते हैं, सी # विशेष रूप से पूरे boatload of gotchas प्रतिनिधियों के संबंध में और स्थानीय चर को कैप्चर करने के लिए दोनों भाषाओं में पूंछ-कॉल अनुकूलन की कमी है लगभग हर जगह जहां आप उनका उपयोग करना चाहते हैं, सी # के प्रकार की अनुमान एफ # की तुलना में एक मजाक है। मैंने सी # को एक कार्यात्मक भाषा के रूप में उल्लसित रूप से खराब परिणामों के साथ उपयोग करने का प्रयास किया है :)
अब ज्यादातर लोग यह स्वीकार कर सकते हैं कि समस्याएं मुश्किल हो रही हैं, लेकिन सी # या पायथन का उपयोग करके एक कार्यात्मक शैली में प्रोग्राम करना असंभव नहीं है। हालांकि, मेरे अनुभव में, यह ऐसी भाषा नहीं है जो इसे असंभव बनाती हैं, इसकी टीम पर प्रोग्रामर।यदि आपके पास एक अनिवार्य भाषा में 10 या 12 लोग कोड लिख रहे हैं, तो आप बहुत लंबे समय तक एक कार्यात्मक शैली को लागू करने में सक्षम नहीं होंगे - भाषाएं अनिवार्य शैली को हतोत्साहित करने के लिए कुछ भी नहीं करती हैं। और चूंकि प्रोग्रामर पहले से ही उस शैली में कोड करते हैं, यही वह है जो आपको मिलता है। जब तक कि आपकी टीम पर कुछ वास्तव में कट्टरपंथी और थोड़ा मस्तिष्कवादी एफपी उत्साही न हों, मुझे नहीं लगता कि एक अनिवार्य भाषा में पूरी तरह से कार्यात्मक प्रोग्रामिंग शैली को बहुत लंबे समय तक लागू कर सकता है।
एफ # के पक्ष में सबसे अच्छा तर्क आवश्यक रूप से कार्यात्मक प्रोग्रामिंग नहीं है, बल्कि आपके टूलसेट की वास्तव में विविधता है। आयरनपीथन और सी # (समान प्रोग्रामिंग प्रतिमान और विभिन्न प्रकार की प्रणाली) को जोड़ने की तुलना में आपको एक बड़ी आरओआई मिलती है F # और C# (विभिन्न प्रोग्रामिंग प्रतिमान और समान प्रकार की प्रणाली)।
ठीक है मेरी कंपनी के
मामले का अध्ययन, के साथ ऐसा ही कहा जा रहा, मैं अपनी कंपनी में एफ # के लिए पुश करने के लिए कोशिश कर रहा हूँ। हम जो भी करते हैं उस पर मैं बड़ी मात्रा में विस्तार नहीं करूंगा, लेकिन अनिवार्य रूप से मेरी टीम टाइम वार्नर, कॉमकास्ट और अन्य केबल प्रदाताओं जैसी कंपनियों के लिए केबल और फोन सेवाओं को ऑर्डर करने की प्रक्रिया के माध्यम से उपयोगकर्ताओं को मार्गदर्शन करती है।
यह वास्तव में इसकी तुलना में अधिक शामिल प्रक्रिया है। शुरुआत के लिए, एक जटिल नियम इंजन है जो उत्पादों, निर्भरताओं और उत्पादों के बीच बहिष्कारों की उपलब्धता निर्धारित करता है। हम नियम इंजन ग्राफ पर चलते हैं और इसके बाहर एक निर्णय पेड़ बनाते हैं, फिर हम पेड़ को एक ग्राहक को सौंप देते हैं ताकि वे कर सकें इसे उपयोगकर्ता को प्रदर्शित करें और उपयोगकर्ता इनपुट, क्लाइंट मैप्स जीयूआई को हमारे निर्णय वृक्ष संरचना में वापस इकट्ठा करें, हम पेड़ पर चलते हैं और नियम इंजन, आदि के खिलाफ सबकुछ मान्य करते हैं।
मैं कहूंगा कि हमारा 9 5% कोड बस नेविगेट कर रहा है , पेड़ की तरह डेटा संरचनाओं में हेरफेर, और प्रसंस्करण। अभी, हम जो कुछ भी लिखते हैं वह सी # है और इसकी तरह एक गड़बड़ है। संयोग से, एफ # की शक्तियों में से एक एएसटी और प्रतीकात्मक प्रसंस्करण में हेरफेर कर रहा है (C# and F# code for processing ASTs की तुलना देखें), और यह सब संभव है क्योंकि पैटर्न मिलान अद्भुत है।
पैटर्न मिलान एक असली हत्यारा सुविधा है, यह ठीक है कि हमारे सी # कोड को इसे साफ करने की ज़रूरत है, और यही कारण है कि हमें एफ # की आवश्यकता है। हमारे पास आयरनपीथन के लिए कोई उपयोग नहीं है क्योंकि यह सी # की तुलना में प्रतीकात्मक प्रसंस्करण पर बेहतर नहीं है।
सारांश
कार्यात्मक प्रोग्रामिंग प्रतिमान और पैटर्न मिलान दो हत्यारा सुविधाओं मैं एफ # हर रोज के साथ का आनंद कर रहे हैं। मैं एफ # के async
थ्रेडिंग मॉडल, संदेश पास करने वाले संदेश, प्राणियों का समर्थन, सक्रिय पैटर्न जैसे उपन्यास सुविधाओं, और इसी तरह के बारे में जा सकता हूं, लेकिन वे सभी बुलेट बिंदु टिप्पणियां हैं। मेरे लिए, यह उन दो हत्यारा विशेषताएं हैं जो कम से कम अपनी परियोजनाओं के लिए पाइथन पर एफ # के मामले का मामला बनाते हैं।
का कार्यात्मक प्रतिमान चेहरा के रूप में कार्य करता है जो आप अधिक पसंद करते हैं (आपके कार्यात्मक - और राजनीतिक - आवश्यकताओं के भीतर)? –
मुझे नहीं लगता कि यह एक बेवकूफ सवाल है, लेकिन यह एक विचित्र है। वे विकसित करने के लिए बहुत अलग भाषाएं हैं, साथ ही साथ भी विशिष्ट हैं, और मुझे उम्मीद नहीं है कि ग्रह पर दो से अधिक लोगों को कभी भी यह विकल्प बनाना होगा। कोई भी जो शायद संभवतः उस भाषा के साथ चला गया जहां वे अधिक परिचित थे। – Kylotan
यदि आपका प्रश्न "ईमानदार" था, तो आपने इस तथ्य को स्वीकार किया होगा कि मैंने आपको F # की अंतर्निर्मित 'सेट' डेटा संरचना का संदर्भ देकर दो बार अपना पहला बिंदु अस्वीकार कर दिया है। –