मैंने एफ # और हास्केल के बीच तुलना के लिए इंटरनेट पर खोज की है, लेकिन वास्तव में निश्चित कुछ भी नहीं मिला है। प्राथमिक अंतर क्या हैं और मैं एक को दूसरे पर क्यों चुनना चाहूंगा?
मैंने एफ # और हास्केल के बीच तुलना के लिए इंटरनेट पर खोज की है, लेकिन वास्तव में निश्चित कुछ भी नहीं मिला है। प्राथमिक अंतर क्या हैं और मैं एक को दूसरे पर क्यों चुनना चाहूंगा?
जवाबों:
हास्केल एक "शुद्ध" कार्यात्मक भाषा है, जहां एफ # में अनिवार्य / ओओ और कार्यात्मक भाषाओं दोनों के पहलू हैं। हास्केल में आलसी मूल्यांकन भी है, जो कार्यात्मक भाषाओं के बीच काफी दुर्लभ है।
इन बातों का क्या मतलब है? एक शुद्ध कार्यात्मक भाषा, इसका मतलब है कि कोई दुष्प्रभाव नहीं हैं (या साझा स्थिति में परिवर्तन, जब एक फ़ंक्शन कहा जाता है) जिसका अर्थ है कि आपको गारंटी दी जाती है कि यदि आप f (x) कहते हैं, तो फ़ंक्शन से मान वापस करने के अलावा और कुछ नहीं होता है, जैसे कंसोल आउटपुट, डेटाबेस आउटपुट, ग्लोबल या स्टैटिक वेरिएबल्स में बदलाव .. और हालांकि हास्केल में नॉन प्योर फ़ंक्शंस (मोनैड्स के माध्यम से) हो सकते हैं, यह घोषणा के माध्यम से स्पष्ट रूप से निहित होना चाहिए।
शुद्ध कार्यात्मक भाषाओं और 'नो साइड इफ़ेक्ट' प्रोग्रामिंग ने हाल ही में लोकप्रियता हासिल की है क्योंकि यह मल्टी कोर कंसीडर के लिए खुद को अच्छी तरह से उधार देता है, क्योंकि यह बिना किसी साझा राज्य के साथ गलत होने के लिए बहुत कठिन है, बजाय असंख्य ताले और सेमाफोर के।
आलसी मूल्यांकन वह जगह है जहां किसी फ़ंक्शन का मूल्यांकन नहीं किया जाता है जब तक कि यह बिल्कुल आवश्यक न हो। इसका मतलब है कि जब आवश्यक नहीं तो कई ऑपरेशन टाले जा सकते हैं। मूल सी # में इस बारे में सोचें यदि क्लॉज इस तरह है:
if(IsSomethingTrue() && AnotherThingTrue())
{
do something;
}
यदि IsSomethingTrue()
झूठ है तो AnotherThingTrue()
विधि का मूल्यांकन कभी नहीं किया जाता है।
जबकि हास्केल एक अद्भुत भाषा है, एफ # का प्रमुख लाभ (समय के लिए), यह है कि यह सीएलआर के शीर्ष पर बैठता है। यह स्वयं को पॉलीग्लॉट प्रोग्रामिंग के लिए उधार देता है। एक दिन, आप ASP.net MVC में अपना वेब UI, C # में अपने व्यावसायिक तर्क, F # में अपने मुख्य एल्गोरिदम और Ironruby में अपनी इकाई परीक्षण लिख सकते हैं। सभी .Net ढांचे के बीच।
हस्केल के बारे में अधिक जानकारी के लिए साइमन पेयटन जोन्स के साथ सॉफ्टवेयर इंजीनियरिंग रेडियो को सुनिए: एपिसोड 108: कार्यात्मक प्रोग्रामिंग और हास्केल पर साइमन पेटन जोन्स
बड़े अंतर:
समानताएं मतभेदों की तुलना में अधिक महत्वपूर्ण हैं। मूल रूप से, आपको एफ # का उपयोग करना चाहिए यदि आप .NET पर पहले से हैं, तो हास्केल अन्यथा। इसके अलावा, OO और आलस्य का मतलब है कि F # जो आप (शायद) पहले से जानते हैं, उसके करीब है, इसलिए यह सीखना आसान है।
प्लेटफ़ॉर्म: हास्केल का अपना रनटाइम है, एफ # .NET का उपयोग करता है। मुझे नहीं पता कि प्रदर्शन अंतर क्या है, हालांकि मुझे संदेह है कि अनुकूलन से पहले औसत कोड लगभग समान है। अगर आपको .NET लाइब्रेरी की जरूरत है तो F # का फायदा है।
ऑब्जेक्ट ओरिएंटेशन: F # में OO होता है, और यह सुनिश्चित करने के लिए बहुत सावधानी बरती जाती है कि .NET क्लासेस का उपयोग करना आसान हो, भले ही आपका कोड OO न हो। हास्केल में टाइप कक्षाएं होती हैं जो आपको अजीब तरह से ओओ की तरह कुछ करने देती हैं। वे आम लिस्प जेनेरिक कार्यों के साथ पार किए गए रूबी मिश्रण की तरह हैं। वे जावा / सी # इंटरफेस की तरह एक छोटे से कर रहे हैं।
आलस्य: हास्केल आलसी है, एफ # नहीं है। आलस्य कुछ अच्छी चालें सक्षम करता है और कुछ चीजें बनाता है जो धीमी गति से दिखती हैं वास्तव में तेजी से निष्पादित होती हैं। लेकिन मुझे यह अनुमान लगाना बहुत कठिन है कि मेरा कोड कितनी तेजी से चलेगा। दोनों भाषाएँ आपको दूसरे मॉडल का उपयोग करने देती हैं, आपको बस अपने कोड में इसके बारे में स्पष्ट होना है।
मामूली अंतर:
F # भाषाओं के ML परिवार का हिस्सा है और OCaml के बहुत करीब है। आप हास्केल और ओकेमेल के बीच के अंतर पर इस चर्चा को पढ़ना चाह सकते हैं ।
एक प्रमुख अंतर, जो शायद शुद्ध शुद्धता का परिणाम है, लेकिन मुझे कम उल्लेख मिलता है, यह भिक्षुओं का व्यापक उपयोग है। जैसा कि अक्सर बताया गया है, अधिकांश भाषाओं में मठों का निर्माण किया जा सकता है, लेकिन जीवन भर बहुत परिवर्तन होता है जब उनका उपयोग पुस्तकालयों में व्यापक रूप से किया जाता है, और आप उनका उपयोग स्वयं करते हैं।
मोनाड्स अन्य भाषाओं में बहुत अधिक सीमित तरीके से देखी गई चीज़ों को प्रदान करते हैं: प्रवाह नियंत्रण का अमूर्त। वे सभी प्रकार की चीजों को करने के लिए अविश्वसनीय रूप से उपयोगी और सुरुचिपूर्ण तरीके हैं, और हास्केल के एक वर्ष ने पूरी तरह से I कार्यक्रम को बदल दिया है, उसी तरह जो कई साल पहले अनिवार्यता से ओओ प्रोग्रामिंग में बदल रहा था, या, बहुत बाद में, उच्च-क्रम के कार्यों का उपयोग किया।
दुर्भाग्य से, इस तरह की जगह में कोई रास्ता नहीं है कि आप यह समझने के लिए पर्याप्त समझ प्रदान करें कि अंतर क्या है। वास्तव में, लेखन की कोई भी राशि ऐसा नहीं करेगी; आपको बस एक वास्तविक समझ हासिल करने के लिए सीखने और लिखने के लिए पर्याप्त समय बिताना होगा।
साथ ही, F # कभी-कभी .NET प्लेटफॉर्म / पुस्तकालयों के साथ इंटरफेस करते समय थोड़ा कम कार्यात्मक या अधिक अजीब (कार्यात्मक प्रोग्रामिंग दृष्टिकोण से) बन सकता है, क्योंकि पुस्तकालयों को स्पष्ट रूप से एक ओओ बिंदु से डिजाइन किया गया था।
तो आप इस तरह से अपने निर्णय पर विचार कर सकते हैं: क्या आप इन भाषाओं में से किसी एक को आज़माने के लिए देख रहे हैं, ताकि सुधार का एक त्वरित, अपेक्षाकृत छोटा वेतन वृद्धि हो, या आप अधिक समय लगाने के इच्छुक हैं और किसी बड़ी चीज़ के लिए कम तत्काल लाभ प्राप्त करना दीर्घकालिक। (या, कम से कम, अगर आपको कुछ बड़ा नहीं मिलता है, तो दूसरे को जल्दी से स्विच करने की आसान क्षमता?) यदि पूर्व, एफ # आपकी पसंद है, तो बाद वाला, हास्केल।
अन्य असंबंधित बिंदुओं की एक जोड़ी:
हास्केल के पास थोड़ा अच्छा सिंटैक्स है, जो कि कोई आश्चर्य की बात नहीं है, क्योंकि हास्केल के डिजाइनर एमएल को अच्छी तरह से जानते थे। हालाँकि, F # 's' लाइट 'सिंटैक्स ML सिंटैक्स को बेहतर बनाने की दिशा में एक लंबा रास्ता तय करता है, इसलिए वहाँ कोई बहुत बड़ा अंतर नहीं है।
प्लेटफार्मों के संदर्भ में, F # बेशक .NET का है; कितना अच्छा है कि मोनो पर काम करेंगे मुझे नहीं पता। जीएचसी अपने स्वयं के रनटाइम के साथ मशीन कोड को संकलित करता है, जो विंडोज और यूनिक्स दोनों के तहत अच्छी तरह से काम करता है, जो .NET की तुलना उसी तरह से करता है, जैसे कि, C ++ करता है। यह कुछ परिस्थितियों में एक फायदा हो सकता है, खासकर गति और निचले स्तर की मशीन पहुंच के संदर्भ में। (उदाहरण के लिए, हास्केल / जीएचसी में एक डीडीई सर्वर लिखने में मुझे कोई समस्या नहीं थी; मुझे नहीं लगता कि आप ऐसा किसी भी .NET भाषा में कर सकते हैं, और इसकी परवाह किए बिना, एमएस निश्चित रूप से आप ऐसा नहीं करना चाहते हैं।)
खैर, मैं एक मुख्य लाभ के लिए कहूंगा कि F # .NET प्लेटफॉर्म के खिलाफ संकलन करता है जो विंडोज़ पर तैनात करना आसान बनाता है। मैंने ऐसे उदाहरण देखे हैं, जिन्होंने वेब अनुप्रयोगों के निर्माण के लिए ASP.NET के साथ मिलकर F # का उपयोग करके समझाया; ;-)
दूसरी ओर, हास्केल लंबे समय तक वायाए के आसपास रहे हैं, इसलिए मुझे लगता है कि उन लोगों का समूह जो उस भाषा के वास्तविक विशेषज्ञ हैं, बहुत बड़ा है।
F # के लिए मैंने अब तक केवल एक वास्तविक कार्यान्वयन देखा है, जो कि अवधारणा OS का विलक्षणता प्रमाण है। मैंने हास्केल के अधिक वास्तविक विश्व कार्यान्वयन को देखा है।