F # और स्काला के बीच सबसे बड़े अंतर क्या हैं?


59

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

तथ्य यह है कि एफ # जावा प्लेटफॉर्म के लिए .NET और स्काला के लिए डिज़ाइन किया गया है के बावजूद F # और स्काला के बीच सबसे बड़ा अंतर क्या हैं?


2
यदि आप वोट कर सकते हैं और सोच सकते हैं कि यह एक उपयोगी प्रश्न है या इसके नीचे उपयोगी उत्तर हैं, तो कृपया वोट करें। StackExchange साइटों को एक अच्छे समुदाय के निर्माण के लिए वोटों की आवश्यकता होती है। आप प्रति दिन 30 वोट दे सकते हैं, उन्हें बर्बाद मत करो। विशेष रूप से उच्च प्रतिष्ठा और कम मतों वाले उपयोगकर्ताओं को दिए गए कृपया इसे पढ़ें: meta.programmers.stackexchange.com/questions/393/…
Maniero

functional programming langugages that don't force the developer to only use immutable datatypes- हो सकता है कि खिलौना भाषाओं को छोड़कर कोई हो?
इंगो

1
@Ingo, अगर आपको लगता है कि ML और Ocaml कार्यात्मक प्रोग्रामिंग भाषाओं के रूप में योग्य नहीं हैं, क्योंकि वे परिवर्तनशीलता की अनुमति देते हैं, शायद आपको अपनी परिभाषा समायोजित करनी चाहिए!
फ्रैंक शीयर

3
+ फ्रैंक, आपको गलत समझ लेना चाहिए: मेरा मतलब है, यहां तक ​​कि हास्केल के पास परस्पर डेटा प्रकार हैं। इसलिए, मैं अभी भी यह जानना चाहूंगा कि किन भाषाओं में @ जोनास के दिमाग में शायद यह है कि वह केवल अपरिवर्तनीय डेटाटाइप्स का उपयोग करने के लिए मजबूर करेगा?
इंगो

जवाबों:


61

प्रमुख अंतर:

  • स्काला और एफ # दोनों एक भाषा में OO- अनिवार्य प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग को मिलाते हैं। प्रतिमानों के एकीकरण की दिशा में उनका दृष्टिकोण बहुत भिन्न है। स्काला दो प्रतिमानों को एक में फ़्यूज़ करने की कोशिश करता है (हम इसे ऑब्जेक्ट-फ़ंक्शनल प्रतिमान कहते हैं), जबकि F # दो प्रतिमानों को एक साथ प्रदान करता है। उदाहरण के लिए, एफ # में बीजीय डेटा प्रकार विशुद्ध रूप से कार्यात्मक निर्माण हैं, जिनमें कोई ओओनेस नहीं है, जबकि स्काला में एडीटी अभी भी नियमित कक्षाएं और ऑब्जेक्ट हैं। (नोट: सीएलआर बायोटेक के संकलन की प्रक्रिया में, यहां तक ​​कि एफ # एडीटी वर्ग और ऑब्जेक्ट बन जाते हैं, लेकिन वे स्रोत स्तर पर एफ # प्रोग्रामर के लिए दिखाई नहीं देते हैं।)

  • F # में फुल हिंडले-मिलनर स्टाइल टाइप इंट्रेंस है। स्काला में आंशिक प्रकार का अनुमान है। उपप्रकार और शुद्ध-ओओ-नेस के लिए समर्थन हिंद-मिलनर शैली के प्रकार स्कैला के लिए असंभव बना देता है।

  • स्काला एफ # की तुलना में बहुत अधिक न्यूनतम भाषा है। स्काला के पास बहुत ही छोटे-छोटे ऑर्थोगोनल सेट हैं जो पूरी भाषा में फिर से उपयोग किए जाते हैं। F # हर छोटी चीज़ के लिए नए वाक्यविन्यास का परिचय देता है, इस प्रकार Scala की तुलना में बहुत अधिक वाक्यविन्यास भारी हो जाता है। (स्काला में 40 कीवर्ड हैं, जबकि F # में 97 हैं। आपको कुछ बताना चाहिए। :-)

  • F # एक Microsoft भाषा होने के नाते विजुअल स्टूडियो के रूप में एक उत्कृष्ट IDE समर्थन है। स्काला की तरफ से हालात इतने अच्छे नहीं हैं। ग्रहण प्लगइन अभी भी निशान तक नहीं है। वही NetBeans प्लगइन के लिए जाता है। आईडीईए इस समय आपकी सबसे अच्छी शर्त है, हालांकि यह भी नहीं है कि आप जावा आईडीई के साथ क्या करते हैं। (Emacs प्रशंसकों के लिए, वहाँ ENSIME है। मैंने इस पैकेज के बारे में बहुत सारी अच्छी बातें सुनी हैं, लेकिन मैंने अभी तक इसकी कोशिश नहीं की है।)

  • Scala में F # की तुलना में कहीं अधिक शक्तिशाली (और जटिल) प्रकार की प्रणाली है।


अन्य अंतर:

  • F # फ़ंक्शंस डिफ़ॉल्ट रूप से कर रहे हैं। Scala में, करी उपलब्ध है लेकिन बहुत बार उपयोग नहीं की जाती है।

  • स्काला का वाक्य विन्यास जावा, मानक एमएल, हास्केल, एरलंग और कई अन्य भाषाओं का मिश्रण है। F # सिंटैक्स OCaml, C #, और Haskell से प्रेरित है।

  • स्काला उच्च प्रकार और टाइपकास्ट का समर्थन करता है। एफ # नहीं करता है।

  • स्काला एफ # की तुलना में डीएसएल के लिए बहुत अधिक उत्तरदायी है।


पुनश्च: मुझे स्काला और एफ # दोनों से प्यार है, और आशा है कि वे भविष्य में अपने संबंधित प्लेटफार्मों की प्रमुख भाषा बन जाएंगे। :-)


6
यह उत्तर कई गलत धारणाओं को समाप्त करता है। मैं बारी-बारी से एक-एक कर दूंगा। आपने कहा "एफ # में बीजगणितीय डेटा प्रकार विशुद्ध रूप से कार्यात्मक निर्माण हैं जिनमें कोई OO'ness नहीं है" लेकिन एफ # में बीजीय डेटाैटिप्स केवल वर्ग हैं और विशेष रूप से, वे ओओ उदाहरण (स्थिर सदस्य और गुणों) के साथ वृद्धि का समर्थन करते हैं।
जॉन हैरोप

7
आप कहते हैं "स्काला दो पैराडाइज को एक में फ्यूज करने की कोशिश करता है (हम इसे ऑब्जेक्ट-फंक्शनल प्रतिमान कहते हैं)" लेकिन स्काला में सामान्य टेल कॉल एलिमिनेशन का अभाव है और, परिणामस्वरूप, कोई भी गैर-तुच्छ कार्यात्मक कोड (लगभग सभी पारंपरिक कार्यात्मक मुहावरों जैसे कि निरंतरता गुजर रहा है) शैली और पुनरावर्ती गाँठ को एकजुट करना) स्काला में ओवरफ्लो को ढेर करने के लिए प्रवण हैं और इसलिए, व्यावहारिक रूप से बेकार हैं।
जॉन हैरोप

4
@ जॉनह्रोप: स्काला एडीटी का विशेष रूप से इलाज नहीं करता है। उनके साथ नियमित कक्षाओं की तरह ही व्यवहार किया जाता है। स्केल Some(2)में तत्संबंधी प्रकार है Some[Int]और Option[Int]अवांछनीय आईएमओ नहीं है। एफ # अन्य दूसरी ओर ADTS के लिए एक विशेष वाक्य रचना और उपचार है, और इस तरह सही ढंग के प्रकार के अनुमान लगा सकते हैं Some 2के रूप में int option। तो एफ # ADTS की एन्कोडिंग है बेहतर स्काला के (IMO, ज़ाहिर है) की तुलना में। मैंने यह अनुमान लगाने की कोशिश नहीं की कि यह हीन है, और मुझे खेद है अगर यह इस तरह से आया।
लापता

9
@JonHarrop: JVM में TCO की कमी ने कई स्काला डेवलपर्स को परेशान नहीं किया है। मेरा विश्वास करो, यह उतना बड़ा मुद्दा नहीं है जितना आप सोचते हैं। अधिकांश समय, हम स्पष्ट पुनरावृत्ति के बजाय उच्च आदेश कार्यों का उपयोग कर रहे हैं। और स्काला में अधिकांश उच्चतर कार्य लूप के संदर्भ में कार्यान्वित किए जाते हैं, न कि पुनरावृत्ति। इसलिए, TCO की कमी सारहीन के करीब हो जाती है।
लापता

8
मुझे ऐसा लगता है कि यह पूरा जवाब स्काला के प्रति थोड़ा पक्षपाती है। उदाहरण के लिए, स्काला एफ # की तुलना में बहुत अधिक न्यूनतर भाषा है जो कि उसके तर्क / बाद में एक अधिक जटिल प्रकार की प्रणाली के खिलाफ जाना प्रतीत होता है।
एडम गेंट

9
  • F # को कार्यात्मक पहलुओं पर बसाया गया है जबकि स्केला वस्तु-उन्मुख पहलुओं पर आधारित है।
  • F # के पास विजुअल स्टूडियो के साथ बेहतर IDE समर्थन है, जबकि Scala का ग्रहण प्लग-इन ओपन सोर्स IDE और तुलनात्मक रूप से धीमा है।
  • एफ #, स्काला की तुलना में अधिक एमएल-लाइक होने के कारण, यह एक न्यूनतम लैंबडा कैलकुलस-वाई है जो इसे ओकेएमएल, स्टैंडर्ड एमएल और स्कीम का अनुभव करता है। एफ # एक काफी सरल भाषा प्रतीत होती है।

4
"एफ # एक काफी सरल भाषा प्रतीत होती है।" << नहीं, यह नहीं है। यह स्काला से बड़ा है। मुझे कुछ समय इस विषय पर एक लेख लिखना चाहिए।
लापताफैक्टर

4
"स्काला ऑब्जेक्ट-ओरिएंटेड पहलुओं पर आधारित है।" << गलत। स्काला OOP और कार्यात्मक प्रोग्रामिंग को फ्यूज करने की कोशिश करता है। मैं व्यक्तिगत रूप से बहुत कम ही इसकी वस्तु-उन्मुख सुविधाओं का उपयोग करता हूं। हम जो करते हैं, उसमें से अधिकांश विशुद्ध रूप से कार्यात्मक है।
लापताफैक्टर

@missingfaktor: "यह स्केला की तुलना में बड़ा है"। व्याकरण कितने बड़े हैं?
जॉन हैरोप

1
मुझे नहीं पता कि चीजें बदल गई हैं या नहीं। IntelliJ चट्टानों में स्काला, प्लगइन अभी भी खुला स्रोत के साथ।
Colliot

0

एक छोटा लेकिन महत्वपूर्ण बिंदु लाइसेंस है: स्काला बीएसडी है (बहुत अधिक अनुमत मुफ्त सॉफ्टवेयर लाइसेंस है), एफ # का उपयोग "Microsoft रिसर्च साझा स्रोत लाइसेंस समझौते" के लिए किया जाता है, लेकिन आजकल एक वाणिज्यिक उत्पाद है (@Loradzo के अनुसार) हालांकि मुझे कहीं भी अधिक विशिष्ट लाइसेंस समझौते नहीं मिल सके)।


3
दरअसल, एफ # अब खुला स्रोत है और स्काला अब मार्टिन ओडस्की की कंपनी स्काला सॉल्यूशंस का एक वाणिज्यिक उत्पाद है।
जॉन हैरोप

4
@Jon Harrop: मुझे लगता है कि स्काला सॉल्यूशंस सिर्फ स्काला से संबंधित उपकरण, सेवाएं, प्रशिक्षण आदि बेच रहा है। भाषा अभी भी बीएसडी लाइसेंस के तहत लगती है।
जूनास पुलकका १

2
@ जून: बिल्कुल, एफ # का सच है।
जॉन हैरोप

5
@ जोनरहॉप: स्काला खुला स्रोत है। कृपया गलत सूचना न फैलाएं।
लापता

2
@missingfaktor: मैंने यह नहीं कहा कि स्काला बंद स्रोत था।
जॉन हैरोप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.