2009-02-16 8 views
19

मैं स्मॉलटॉक से शुरू होने के बाद से 10 वर्षों से अधिक जावा प्रोग्रामर रहा हूं। यह मेरी राय है कि अगली बड़ी भाषा उन सभी होने की संभावना है जो सर्वव्यापी जावा वर्चुअल मशीन पर चलती हैं। मैं स्काला (अन्य भाषाओं के बीच) में कुछ विशेषताओं के फायदे लेना चाहता हूं - case वर्ग पदानुक्रमों, बंदियों, प्रकार अनुमान के लिए बयान, क्योंकि यह मुझे अधिक संक्षिप्त और स्पष्ट (मुझे उम्मीद है) कोड लिखने की अनुमति देगा। Smalltalk के करीब थोड़ा!क्या कोई भी क्रोध में स्कैला का उपयोग कर रहा है (और जावा प्रोग्रामर के लिए क्या सलाह है)?

सभी चीजें हैं जो जावा में दूसरी प्रकृति हैं:

  • ant
  • तैनाती अनुप्रयोगों/में तार्किक jar रों
  • महान आईडीई उपकरण समर्थन
  • लेखन GUIs (या होने पुस्तकालयों के साथ बिल्डिंग एक स्विंग जीयूआई किसी प्रकार के रिमोटिंग के माध्यम से बात करता है?)
  • तृतीय पक्ष पुस्तकालय/ढांचे
  • विन्यास (गुण, XML, Spring आदि)
  • डीबी ड्राइवरों आदि

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

  1. क्या किसी ने यह छलांग लगाई है?
  2. क्या यह इसके लायक था?
  3. आपने क्या सबक सीखे?

(जाहिर है लोगों उपयोग कर रहे हैं स्काला - लेकिन किसी को भी वास्तविक निर्माण, एक बेहतर शब्द के अभाव, उद्यम अनुप्रयोगों के लिए है?)

+15

अगर कोई "क्रोध में" वाक्यांश को गलत तरीके से परिभाषित करता है, तो यह अभ्यास उद्देश्य के विपरीत, वास्तविक उद्देश्य में वास्तविक उद्देश्य में किसी चीज़ के उपयोग को संदर्भित करता है। वाक्यांश गुणात्मक निर्णय नहीं है, प्रति से। यह सभी के लिए स्पष्ट हो सकता है, लेकिन शायद नहीं। – nsayer

उत्तर

11

मैं क्वेरी और बड़े एक्सएमएल दस्तावेजों में हेरफेर करने के हमारे मौजूदा जावा बुनियादी ढांचे पर स्काला का इस्तेमाल किया है। मानक जावा एक्सएमएल पुस्तकालयों का उपयोग करना संभव नहीं था या आसानी से नहीं।

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

स्कैला में छींकने वाला एक और क्षेत्र मल्टीथ्रेडिंग के साथ है। इसके साथ कोई वास्तविक अनुभव नहीं है, लेकिन स्कैला में यह आसान लगता है।

प्वाइंट है, इसे अभी जावा प्रतिस्थापन के रूप में देखने की कोशिश न करें, लेकिन इसका उपयोग करें जहां आप अपने मौजूदा जावा कोड के बगल में इसे स्ट्रेनगेट का उपयोग कर सकते हैं।

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

मैं भी एक छोटा सा प्रोग्रामर हूं और प्यार स्कैला में कोड ब्लॉक का उपयोग करने में सक्षम हूं। जावा की तुलना में कम कोड है, लेकिन अभी भी स्मॉलटॉक कोड के रूप में पठनीय नहीं है।

Btw, smalltalk समुदाय फिर से समुद्री तट ढांचे के लिए धन्यवाद बढ़ रहा है, तो आप

चीजों को वापस करने के लिए चाहते हो सकता है मुझे पता चला या का एक बेहतर समझ मिल गया:

  • के उपयोग कंस्ट्रक्टर्स
  • अपरिवर्तनीय अवधारणा
  • सूचियों और प्रत्यावर्तन
  • कार्यात्मक कार्यक्रम के साथ काम सामान्य में mming

तो हाँ, मुझे लगता है कि यह इसके लायक है।

1

हां, लोग निर्माण कर रहे हैं वास्तविक "उद्यम" अनुप्रयोगों के साथ स्कैला (और क्लोजर)। बस कर दो।

बेशक, लोग स्मॉलटाक का भी उपयोग कर रहे हैं, इसलिए यदि आपको स्मॉलटाक पसंद है, तो इसका उपयोग क्यों न करें?

+0

मुझे लगता है कि स्मॉलटाक में जाने से अब एक मृत अंत होगा। यह वास्तव में एक लौ के रूप में नहीं है; मुझे स्मॉलटाक पसंद है (हालांकि मैं कभी भी एक उन्नत उपयोगकर्ता नहीं था)। लेकिन मुझे लगता है कि इसे मेरे कार्यस्थल में पेश करना गलती होगी। –

+0

क्या आप प्रश्न के कुछ विनिर्देशों को फिर से संबोधित कर सकते हैं: स्कैला? आपको संक्रमण कैसे मिला (मान लीजिए कि आप जावा प्रोग्रामर थे)? –

2

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

संपादित करें: ठीक है, तो "कुछ वर्गों को लोड करें और विधियों को निष्पादित करें" अस्पष्ट है। उदाहरण के लिए, हम अपने क्रूड वर्गों को लोड कर सकते हैं और फिर एक प्रकार के अंतरिक्ष यान को दूसरे में परिवर्तित करने के लिए विधि निष्पादित कर सकते हैं।

 
user=> (import '(gov.nasa.kepler.hibernate.dr LogCrud)) 
user=> (def crud (new LogCrud)) 
#'user/crud 
user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500)) 
user=> (prn shortCadences) 
#> 

अन्य विधियां जिन्हें इस समय अन्य प्रकार के प्रारूपों में परिवर्तित करने के लिए बुलाया जा सकता है जो डिबगिंग के लिए उपयोगी हो सकते हैं। हम इस कार्यक्षमता को समाहित करने के लिए कमांड लाइन टूल्स बना सकते हैं, लेकिन क्लोजर से सबकुछ उपलब्ध होने की कोई आवश्यकता नहीं है।

+0

क्या "कुछ कक्षाएं लोड करें और विधियों को निष्पादित करें" थोड़ा अस्पष्ट है? हम * सभी * रॉकेट वैज्ञानिक नहीं हैं जिन्हें आप जानते हैं ;-) –

5

मैं मूल रूप से, हमारे पिछले परियोजना में स्काला कोड के साथ सिर पर हर किसी को हिट के रूप में मैं एक ही हाइबरनेट + JBoss की समझ की कमी की वजह से समस्याओं डीबगिंग के बीमार हो गया। (यह आश्चर्यजनक है कि वास्तव में डेवलपर के लिए जिन्होंने लिखा मूल प्रणाली अभी भी देखते हैं और अभी भी हाइबरनेट विवरण में खो जाना।।)

हम क्या था -> एक निराला एक साथ वायर्ड राज्यविहीन EJB सेम के एक समूह के साथ ज्यादातर बनाया प्रणाली कुछ हाइबरनेट कोड कुछ एसक्यूएल के साथ एक साथ फेंक दिया। (हम मूल रूप से एक एएसपी हैं, उत्पादन क्लस्टर काफी छोटा है -> केवल 100 मशीनें।)

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

अब तक, हमने जेबॉस उदाहरणों में कोड को वास्तविक रूप से बिना किसी वास्तविक समस्या के तैनात करना शुरू कर दिया है। पहली बार जब आप जावा में स्कैला object का उपयोग करने का प्रयास करते हैं, तो आप शायद अपनी नाक को झुर्रियों में डाल देंगे। लेकिन अन्यथा, वास्तव में कोई भी ध्यान नहीं दिया।

अभी तक, हम वास्तव में शुरू होने के लगभग 5 महीने हुए हैं। हमने कुछ प्रमुख संशोधन किए हैं, और बाद में पीछे हैं, लेकिन सिस्टम अतीत की तुलना में कहीं अधिक बेहतर परीक्षण किया गया है। इसलिए, जब हम वास्तव में सिस्टम सीख रहे थे, तब हमने कुछ बुरे विचारों में छेड़छाड़ की थी, हम अब उन सभी को हटाने में सक्षम हैं, और, उत्पादन परिनियोजन के बहुत करीब आते हैं। सब कुछ, मैं कहूंगा कि सामान्य दोस्त को जावा प्रोग्रामर की तरह कोडिंग रोकने के लिए 2-3 महीने की आवश्यकता होती है, और अधिकांश मानक पुस्तकालयों के साथ "परिचित" हो जाती है।

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

उपकरण मैं उपयोग कर रहा हूँ:

  1. Restlet: इस ढांचे के साथ बहुत खुश। हमारी restlet परत अपमानजनक मामूली कोड है।
  2. JDBC -> ध्यान दें: हम बदलाव किया है क्या
  3. एक्सएमएल विकि में मूल रूप से किया गया था (और जल्द ही, JSON)
  4. Buildr, परियोजनाओं के एक जोड़े पर Maven मैं कन्वर्ट करने के लिए नहीं करना चाहता था (प्लस नेक्सस और हडसन)। मैं एसबीटी के साथ प्रयोग कर रहा हूं, जो स्केल परियोजनाओं के लिए पहले से ही बहुत अच्छा है।

हमें किसी भी पुराने जावा पुस्तकालयों का पुन: उपयोग करने में बिल्कुल कोई समस्या नहीं है, लेकिन हम उन्हें स्कैला-फीड परतों में लपेटने के लिए प्रतिबद्ध हैं। अधिकतर कम कोड लिखने के लिए।

और pimp my library पैटर्न परिचित होने के लिए सबसे महत्वपूर्ण है। "केक" पैटर्न अच्छा है, लेकिन आपको तत्काल नियंत्रण करना है, जो कभी-कभी काफी उपयोगी नहीं होता है। मैंने मिश्रित वातावरण में गुइस का भी उपयोग किया है, वास्तव में मुश्किल नहीं है। लेकिन मुझे लगता है कि मिश्रण कोड मूल रूप से सोचा जाने से कम उपयोगी तरीका है, हालांकि शायद यह इसलिए है क्योंकि मैं वास्तव में बहुत खराब, वास्तव में खराब जावा कोड बदल रहा हूं।

मेरा संपादन वातावरण ज्यादातर ओएस एक्स पर टेक्स्टमैट है, लेकिन हम लिनक्स सर्वर पर तैनात हैं।

पीएस हाँ, मुझे पता है कि यह लगभग 4 महीने पुराना है, लेकिन जो भी हो। यह प्रासंगिक है, खासकर अब जब हमारे पास कुछ अनुभव है।

+0

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

2

मैंने इसे संबंधित लिंक पर देखा, और मुझे लगता है कि मैं इसमें शामिल हूं, अब हम सड़क के नीचे कुछ साल हैं।

आईडीई समर्थन ने एक बड़ा सौदा किया है, इंटेलिजे 11 में इस बिंदु पर बहुत अच्छा स्कैला समर्थन है। सिंटेक्स हाइलाइटिंग बहुत अच्छा काम करता है, हालांकि डिबगिंग अभी भी थोड़ा परेशान हो सकती है।

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

डाटाबेस इंटरैक्शन अभी भी हवा में थोड़ा सा लगता है, लेकिन वहां कुछ ढांचे हैं जो खराब नहीं हैं और आप डेटाबेस के साथ एक तरह से या किसी अन्य के साथ काम कर सकते हैं।

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

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

आज कई स्केल लीवरेज करने वाली कई उच्च प्रोफ़ाइल कंपनियां हैं, जिनमें से अधिकांश लोग शायद ट्विटर हैं। उन्होंने ओपन सोर्स वर्ल्ड में भी अपने कुछ ढांचे का योगदान दिया है।

0

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

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