2009-07-10 24 views
32

मैं औसत पायथन कौशल के साथ एक अनुभवी सी ++ प्रोग्रामर हूं। कारणों मैं पहली जगह में अजगर का अध्ययन कर रहे थे:क्या मुझे स्कैला का अध्ययन करना चाहिए?

  • प्रोग्रामिंग पर एक अलग दृष्टिकोण (बनाम गतिशील स्थिर, बनाम संकलित व्याख्या की, आदि)
  • परियोजनाओं के विस्तार है कि मैं पर काम कर सकते बढ़ाने के लिए प्राप्त करने के लिए (पायथन मुझे वेब विकास करने, सिम्बियन फोन के लिए विकसित करने या त्वरित सिस्टम प्रशासन स्क्रिप्ट को दस्तक देने की अनुमति देता है)
  • मेरे सी ++ कौशल के पूरक के लिए।

मुझे लगता है कि पायथन महान है और मेरा मानना ​​है कि मैंने उपरोक्त लक्ष्यों को हासिल किया है। मैं इसे छोटी परियोजनाओं, स्क्रिप्ट और वेब विकास के लिए उपयोग करना जारी रखूंगा।

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

कुछ प्रोग्रामिंग भाषाओं को देखने के बाद, मुझे लगता है कि स्कैला एक अच्छे उम्मीदवार की तरह दिखता है: मुझे टाइप अनुमान पसंद है और यह जेवीएम पर चलता है, इसलिए जहां भी JVM उपलब्ध हो, यह उपलब्ध होना चाहिए। मैं इसका उपयोग करते समय कार्यात्मक प्रोग्रामिंग के बारे में और भी जान सकता हूं।

लेकिन ... मैं भी कुछ संदेह है, और यही मेरी सही जगह उम्मीद है कि स्टैक ओवरफ़्लो समुदाय की मदद कर सकते हैं:

  • पोर्टेबिलिटी: लिनक्स और विंडोज कम से कम मुझे आशा है कि। मोबाइल फोन के बारे में क्या, क्या इसे वहां चलाने के लिए संभव है?
  • सी ++ संगतता: क्या मैं स्कैला के साथ सी ++ कोड मिश्रण कर सकता हूं? (जेएनआई?)
  • प्रोग्रामिंग प्रतिमान: मुझे इस समय कार्यात्मक प्रोग्रामिंग (एफपी) में स्विच करने में सहज महसूस नहीं होता है। क्या मैं पहले कुछ एफपी के साथ ऑब्जेक्ट उन्मुख और प्रक्रियात्मक का उपयोग कर सकता हूं और फिर अनुपात सीखने के रूप में बदल सकता हूं?
  • टूल चेन परिपक्वता: आईडीई और डिबगर्स के साथ आपका अनुभव क्या है? मैं अभी ग्रहण का उपयोग कर रहा हूं और यह ठीक लगता है।
  • सीखने की गति: मेरे अनुभव पर विचार करते हुए, आप कितनी तेजी से सोचते हैं कि मैं स्कैला के साथ एक व्यावहारिक स्तर तक पहुंच सकता हूं?
  • परिनियोजन: आप स्कैला प्रोग्राम को वास्तव में कैसे तैनात करते हैं? क्या यह एक जार है, क्या यह एक निष्पादन योग्य है?

अंत में, आपको लगता है कि कुछ स्केलस नुकसान क्या हैं?

+2

पुस्तक:। स्काला में प्रोग्रामिंग, मार्टिन ओडर्स्की एट अल, ARTIMA, 2007 – akarnokd

+0

अपने जवाब और सुझावों के लिए आप सभी को धन्यवाद। मैंने स्काला पर नजदीकी नजर डालने का फैसला किया है। – rpg

+0

मेरे लिए सर्वश्रेष्ठ पुस्तक "हॉला फॉर द इंपेटिएंट" केयर होर्स्टमैन द्वारा थी। पहले 9 अध्याय स्वतंत्र रूप से उपलब्ध हैं। – Jabba

उत्तर

28
  • पोर्टेबिलिटी: लिनक्स और विंडोज कम से कम मुझे उम्मीद है। मोबाइल फोन के बारे में क्या, क्या कोई इसे वहां चलाने में सफल रहा?

हां। एंड्रॉइड पर स्कैला के बारे में काफी कुछ आंदोलन है। जे 2 एमई के लिए, मैंने उस सम्मान में कुछ देखा, लेकिन ज्यादा नहीं। स्रोत कोड भंडार पर जे 2 एमई से संबंधित कुछ कोड है। मुझे यकीन नहीं है कि यह कितना व्यवहार्य है, लेकिन मुझे लगता है कि इसके लिए बहुत अधिक मांग नहीं है।

मैं यह भी उल्लेख करूंगा कि वांछित लक्ष्य प्लेटफॉर्म के बारे में स्कैला-लैंग पर पूल था, और जे 2 एमई उनमें से एक था, टोटेम ध्रुव पर बहुत कम था।

  • सी ++ संगतता: क्या मैं स्कैला के साथ सी ++ कोड मिश्रण कर सकता हूं? (जेएनआई?)

साथ ही आप जावा के साथ सी ++ मिश्रण कर सकते हैं, जो कुछ भी लायक है।यदि आपके पास इसका कोई अनुभव नहीं है, तो आप केवल जावा संसाधनों को पढ़ सकते हैं, क्योंकि उनमें से कुछ भी स्कैला के साथ लागू नहीं होगा (बिना स्कैला सिंटैक्स)।

  • प्रोग्रामिंग प्रतिमान: मुझे इस समय एफपी में स्विच करने में सहज महसूस नहीं होता है। क्या मैं पहले कुछ एफपी के साथ ओओ और प्रक्रियात्मक का उपयोग कर सकता हूं और फिर अनुपात सीखने के रूप में बदल सकता हूं?

निश्चित रूप से, हाँ। स्कैला यह सुनिश्चित करने के लिए बाहर निकलता है कि आपको एक कार्यात्मक शैली में प्रोग्राम करने की आवश्यकता नहीं है। कार्यात्मक लोगों से स्कैला की यह मुख्य आलोचना है, वास्तव में: कुछ भाषात्मक कार्यात्मक नहीं मानते हैं जब तक कि यह प्रोग्रामर को कार्यात्मक शैली में लिखने के लिए मजबूर नहीं करता है।

वैसे भी, आप अपने तरीके से काम करने पर सही हो सकते हैं। मेरी शर्त, हालांकि, यह है कि आप कार्यात्मक आदतों को उठाए बिना महसूस कर सकते हैं कि वे कार्यात्मक हैं।

शायद आप मैट्रिक्स कक्षा लिखने के बारे में अपने ब्लॉग में Matrices श्रृंखला देख सकते हैं। हालांकि यह मानक ओओ कोड की तरह दिखता है, वास्तव में, यह बहुत कार्यात्मक है।

  • टूल चेन परिपक्वता: आईडीई और डिबगर्स के साथ आपका अनुभव क्या है? मैं अभी ग्रहण का उपयोग कर रहा हूं और यह ठीक लगता है।

आईडीईए (इंटेलिजे), नेटबीन और ग्रहण सभी को स्कैला के लिए अच्छा समर्थन है। ऐसा लगता है कि आईडीईए सबसे अच्छा है, और नेटबीन/ग्रहण एक दूसरे को मेंढक-कूदते रहते हैं, हालांकि नेटबीन निश्चित रूप से देर से ग्रहण से अधिक स्थिर रहा है। दूसरी तरफ, ग्रहण पर समर्थन एक बहुत ही आशाजनक मार्ग ले रहा है जो अगले 6 महीनों में परिणाम उत्पन्न करना चाहिए - यह सिर्फ यह है कि यह एक बंपिंग मार्ग है। :-)

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

ईएमएसीएस लोगों के पास स्कैला के लिए भी व्यापक उपकरण हैं, और बहुत से छोटे संपादकों के लिए भी इसका समर्थन है। उदाहरण के लिए, मैं छोटे कार्यक्रमों और स्क्रिप्ट के लिए जेडिट के समर्थन के साथ बहुत सहज हूं।

अच्छा मेवेन समर्थन भी है - वास्तव में, Lift स्थापित करने का मानक तरीका मैवेन स्थापित करना है, और उसके बाद लिफ्ट आर्केटाइप बनाना है। वह एक उपयुक्त स्कैला संस्करण में खींच जाएगा। scala:cc लक्ष्य है जो ट्रिगर किए गए पुनर्मूल्यांकन को भी करेगा।

पुनर्मूल्यांकन की बात करते हुए, न तो मैवेन, और विशेष रूप से न ही चींटियों को पुन: संकलित करने की आवश्यकता को पहचानने के लिए एक अच्छा काम करते हैं। उस समस्या से SBT (सरल बिल्ड टूल), स्कैला में लिखा गया है, जो स्कैला कंपाइलर प्लगइन के उपयोग के माध्यम से उस समस्या को हल करता है। एसबीटी मेवेन के साथ-साथ मेवेन/आइवी रिपोजिटरी के समान प्रोजेक्ट लेआउट का उपयोग करता है, लेकिन मैवेन/आईवी कॉन्फ़िगरेशन फ़ाइलों के समर्थन के साथ-साथ एक्सएमएल के बजाय स्कैला कोड में प्रोजेक्ट कॉन्फ़िगरेशन भी किया जाता है।

  • सीखने की गति: मेरे अनुभव पर विचार करते हुए, आप कितनी तेजी से सोचते हैं कि मैं स्कैला के साथ एक व्यावहारिक स्तर तक पहुंच सकता हूं?

बहुत तेज़। पूरी तरह से ओओ भाषा के रूप में, स्कैला पहले से ही कुछ अच्छी सुविधाओं का परिचय देती है, जो सी ++ में मौजूद कुछ सामानों के मुकाबले तुलनात्मक है लेकिन जावा नहीं, हालांकि वे अलग-अलग फैशन में काम करते हैं।उस संबंध में, एक बार जब आप महसूस करते हैं कि ऐसी विशेषताएं क्या हैं और उन्हें सी ++ सामान से संबंधित करती हैं, तो आप जावा प्रोग्रामर से बहुत आगे होंगे, क्योंकि आप पहले ही जानते होंगे कि उनके साथ क्या करना है।

  • परिनियोजन: आप स्कैला प्रोग्राम को वास्तव में कैसे तैनात करते हैं? क्या यह एक जार है, क्या यह एक निष्पादन योग्य है?

जावा जैसी ही चीज़। आप JARs, WARs, या किसी अन्य जावा लक्ष्य को तैनात कर सकते हैं, क्योंकि स्कैला कंपाइलर क्लास फाइलें उत्पन्न करता है। वास्तव में, आप कक्षा फ़ाइलों से स्कैला की जेएआर फ़ाइल उत्पन्न करने के लिए जावा के जार का उपयोग करते हैं, और मेवेन लिफ्ट समर्थन भवन WAR फ़ाइलों के लिए लक्षित करता है।

हालांकि, स्क्रिप्ट फ़ाइलों के लिए एक विकल्प है। आप शैल स्क्रिप्ट स्क्रिप्ट के समान सीधे स्कैला स्रोत कोड चलाने के लिए "स्कैला" पर कॉल कर सकते हैं। यह विंडोज़ पर भी किया जा सकता है। हालांकि, निष्पादन को तेज करने के लिए संकलन डिमन के उपयोग के साथ भी, समय शुरू हो गया है कि भारी स्क्रिप्टिंग वातावरण में स्कैला के प्रभावी उपयोग की आवश्यकता Nailgun जैसी कुछ है।

स्कैला के नुकसान के लिए, this स्टैक ओवरफ़्लो प्रश्न में मेरा उत्तर (और अन्य) देखें।

16

स्कैला एक विकसित भाषा है जो निवेश करने के लिए अच्छी तरह से योग्य है, खासकर अगर आप जावा दुनिया से आ रहे हैं। स्कैला व्यापक रूप से Artima पर कवर किया गया है। बिल वेनेर्स से यह article देखें और Twitter and Scal ए के बारे में भी पढ़ें।

आपके प्रश्नों के बारे में: जहाँ कहीं भी एक JVM है

  • जावा चला सकते हैं। मोबाइल फोन के साथ कोई भाग्य हालांकि। आपको एक पूर्ण जेआरई की आवश्यकता है, न कि वहां उपलब्ध सबसेट।
  • जेएनआई के साथ यह संभव है। यदि जावा के साथ कुछ संभव है, तो स्कैला के साथ यह संभव है। स्कैला जावा कक्षाओं को कॉल कर सकते हैं।
  • कार्यात्मक प्रोग्रामिंग स्कैला का एक मजबूत बिंदु है - आपको इसे सीखने की आवश्यकता है। हालांकि आप इसका पूरा लाभ उठाए बिना इसका उपयोग शुरू कर सकते हैं और इसके साथ अपना रास्ता काम कर सकते हैं।
  • ग्रहण का एक प्लग-इन है। यह सबसे अच्छा नहीं है, लेकिन यह काम करेगा। अधिक जानकारी here
  • यदि आप अनुभव कर रहे हैं, तो मैं वास्तव में तेज़ कहूंगा। मैं अनुशंसा करता हूं कि आपको एक पुस्तक शुरू करने के लिए मिल जाए।
  • तैनाती के लिए यह faq प्रविष्टि देखें।
+5

एक अतिरिक्त: एंड्रॉइड पर स्कैला चलाने के लिए संभव लगता है: http://www.scala-lang.org/node/160 –

3

दरअसल - अगर मैं आप थे - मैं भाषाओं की बजाय प्रोग्रामिंग प्रतिमानों का अध्ययन करता। बेशक आपको प्रतिमान का अध्ययन करने के लिए एक उदाहरण भाषा का अध्ययन करना होगा। दोषों को जानना & विभिन्न प्रतिमानों के लाभ आपको एक अलग पक्ष से अपनी समस्याओं को देखने में सक्षम बनाता है और आपको एक बेहतर प्रोग्रामर बनाता है (यहां तक ​​कि उन भाषाओं में भी जिन्हें आप पहले से जानते हैं)।

पहले से ज्ञात प्रतिमान की एक भाषा चुनना आवश्यक होने पर एक सापेक्ष आसान कार्य है। चूंकि स्कैला एफपी है (कम से कम आपने इसका उल्लेख किया है) और सी ++/पायथन ओओपी है, यह आपके लिए एक अच्छी भाषा है, मैं कहूंगा।

6

प्रोग्रामिंग प्रतिमान: मुझे इस समय एफपी में स्विच करने में सहज महसूस नहीं होता है। क्या मैं पहले कुछ एफपी के साथ ओओ और प्रक्रियात्मक का उपयोग कर सकता हूं और फिर अनुपात सीखने के रूप में बदल सकता हूं?

स्कैला के लिए अनिवार्य प्रोग्रामिंग के लिए पूर्ण समर्थन है, इसमें कोई एफपी तत्व नहीं वाले प्रोग्राम लिखना एक हवा है (हालांकि, एफपी उपयोगी है और वैसे भी सीखने योग्य है)।

सीखने की गति: मेरे अनुभव पर विचार करते हुए, आप कितनी तेजी से सोचते हैं कि मैं स्कैला के साथ एक व्यावहारिक स्तर तक पहुंच सकता हूं?

जल्दी। स्कैला में कई रोचक विशेषताएं हैं जो सी ++, जावा पर्यावरण से आने वाले लोगों से परिचित नहीं हो सकती हैं, उदाहरण के लिए टाइपिंग सिस्टम की कुछ विशेषताएं। कुछ लोग तर्क देते हैं कि स्कैला में सीखने के लिए बहुत कुछ है इससे पहले कि आप इसे जानते हों, समस्या भाषा के साथ है; मैं असहमत हूं। उन सुविधाओं की उपस्थिति भाषा का एक लाभ है। अधिक फीचर मेरियर। आखिरकार, आपको उन्हें एक ही समय में उपयोग करने की ज़रूरत नहीं है, जैसे कि आपको स्टोर में बेची जा रही चीज़ों को खरीदने की ज़रूरत नहीं है।

5

सीखने की गति: मेरे अनुभव पर विचार करते हुए, आप कितनी तेजी से सोचते हैं कि मैं स्कैला के साथ एक व्यावहारिक स्तर तक पहुंच सकता हूं?

मैं भी एक सी से आते हैं ++ पृष्ठभूमि, एक बात मैंने देखा है कि जब से तुम बहुत कम कोड लिखेंगे एक तुलनीय कार्य के लिए C++ की तुलना में, अपने सीखने के रूप में आप और अधिक में किया जाएगा शीघ्र हो जाएगा एक ही समय अवधि। यह वही घटना थी जिसे मैंने रूबी के साथ अनुभव किया था।

2

जेम्स स्ट्रैचन (उत्पादक जावा ओपन सोर्स डेवलपर, लूप में नहीं) के लिए स्कैला here की एक दिलचस्प चर्चा है, और क्यों उन्हें लगता है कि यह जावा (लैंगेज, मंच नहीं) से प्रगति है।

स्कैला ऐसा लगता है कि यह बहुत अधिक कर्षण प्राप्त कर रहा है। मुझे नहीं लगता कि यह पैन में एक फ्लैश है, और वर्तमान में सीखने के लिए भाषाओं की मेरी सूची (आंशिक रूप से कार्यात्मक पहलू के लिए)

0

स्कैला की सीखने योग्यता के बारे में यहां एक अचूक साक्ष्य है।

हमारी कंपनी में, हमें U.Waterloo से कई इंटर्न मिले। उन्हें स्कैला में लिखने के लिए कहा गया था; इसे पहले कभी नहीं देखा।

उन्होंने स्काला और लिफ्ट को उल्लेखनीय रूप से तेज़ उठाया; अब वे स्कैला कोड का उत्पादन कर रहे हैं; यह सही नहीं हो सकता है, लेकिन कोई भी सही नहीं है।

तो, तथ्य यह है कि प्रबंधक को स्कैला नहीं पता है जब आप गोद लेने पर निर्णय लेते हैं तो सबसे अच्छा तर्क नहीं हो सकता है।

संबंधित मुद्दे