2011-08-31 8 views
25

मेरी कंपनी के पास एक बड़ी विरासत जावा कोड बेस है और हमारे कई ग्राहक वेबस्पेयर और वेबलॉगिक चलाते हैं। हम स्कैला का उपयोग शुरू करने पर विचार कर रहे हैं लेकिन यह पुष्टि करने में असमर्थ रहे हैं कि स्कैला (2.9.एक्स) आईबीएम के जेडीके (और बीईए के जेआरॉकिट) के साथ अच्छी तरह से काम करता है।क्या स्केल मालिकाना जेवीएम पर अच्छा काम करता है?

चूंकि ये जेवीएम TCK पास करता है, इसलिए मैं कहूंगा कि इसे सिर्फ काम करना चाहिए, लेकिन पिछले कुछ वर्षों में अलग-अलग जेवीएम के साथ हुई विभिन्न समस्याओं को देखते हुए मैं थोड़ा nervous हूं। क्या अन्य जेवीएम के साथ स्कैला का उपयोग करते समय जागरूक होने के लिए कोई गठिया है?

  1. किसी भी संकलक झंडे का उपयोग करने के लिए (या बचने के लिए)?
  2. क्या मुझे हॉटस्पॉट या ग्राहकों JVM पर स्कैला का उपयोग करके कोड संकलित करना चाहिए?
  3. विभिन्न जेवीएम पर स्कैला/जावा के विभिन्न संस्करणों का उपयोग करके संकलित जार के मिश्रण के साथ कोई समस्या?

कोई भी युद्ध कहानियां, लिंक और सुझाव स्वागत है।

उत्तर

13

स्कैला कंपाइलर को आपके द्वारा उपयोग किए जाने वाले JVM के बावजूद एक ही बाइट-कोड का उत्पादन करना चाहिए। मैं उम्मीद करता हूं कि स्काला सभी तीन प्लेटफॉर्म पर चलने के लिए हालांकि हॉटस्पॉट ने गतिशील भाषाओं के लिए अनुकूलित करने की कोशिश की है और थोड़ा बेहतर हो सकता है। (संभवतः चिंता करने के लिए पर्याप्त नहीं)

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

हालांकि यदि आप जेडीके के हालिया संस्करण को नहीं चला रहे हैं, तो आप कुछ समस्या देख सकते हैं।

जेवीएम एक-दूसरे से बहुत अच्छी तरह बात करते हैं और मैं आपकी खुद की जेवीएम में स्कैला चलाने की सोचता हूं ताकि आपके पास किसी भी चिंताओं को अलग किया जा सके।

4
  1. कुछ भी नहीं जो मैं सोच सकता था।

  2. कंपाइलर को कोई फर्क नहीं पड़ता है, वास्तव में यदि विभिन्न वीएम पर scalac चलाना अलग-अलग बाइटकोड उत्पन्न करेगा, तो यह निश्चित रूप से एक बग है।

  3. आपको हमेशा स्कैला के उसी संस्करण के साथ स्कैला कोड चलाया जाना चाहिए, जिसे संकलित किया गया था। 2.x पर संकलित कोड डिफ़ॉल्ट रूप से 2.x + 1 पर नहीं चलेंगे। 2.x.y पर संकलित कोड 2.x.y + 1 पर चलाना चाहिए, हालांकि।

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

5

हां, स्कैला गैर-सूर्य जेवीएम पर काम करता है। उदाहरण के लिए, स्रोत कोड से इन दो टिप्पणियों पर विचार करें:

//print SourceAnnotation in a predefined way to insure 
// against difference in the JVMs (e.g. Sun's vs IBM's) 

    // on IBM J9 1.6 do not use ForkJoinPool 

इनमें से कई नहीं हैं। आखिरकार, विभिन्न JVM संगत होने के लिए हैं - और इसके लिए परीक्षण किया गया है। लेकिन, जबकि समस्याएं उत्पन्न होती हैं, यह सुनिश्चित करने के लिए कि चीजें आसानी से चलती हैं, कार्रवाई की जाती है।

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