पटरियों पर रूबी बनाम रूबी पर रूबी, क्या अंतर है?


135

मैं पटरियों पर JRuby और JRuby की कोशिश कर रहा हूँ। मुझे RR पर रूबी और रूबी के बीच अंतर पर जानकारी प्राप्त करने में परेशानी हो रही है।

मुझे किन अंतरों की तलाश करनी चाहिए?

जवाबों:


160

JRuby रूबी कार्यान्वयन है जो JVM पर चलता है जबकि Matz का रूबी एक C कार्यान्वयन है।

ध्यान देने योग्य मुख्य विशेषताएं हैं:

  1. JRuby जावा वीएम पर चलता है और इसे जावा बाइट कोड के लिए संकलित या व्याख्या किया जाता है।
  2. JRuby जावा कोड के साथ एकीकृत हो सकता है। यदि आपके पास जावा क्लास लाइब्रेरीज़ (.jar) है, तो आप रूबी कोड से JRuby के भीतर संदर्भ और उनका उपयोग कर सकते हैं। दूसरी दिशा में आप जावा के भीतर से JRuby कोड भी कह सकते हैं। JRuby JVM और एप्लिकेशन सर्वर क्षमताओं का भी उपयोग कर सकता है।
  3. JRuby को आमतौर पर जावा के एप्लिकेशन सर्वर जैसे कि Sun's GlassFish या यहां तक ​​कि Tomcat वेब सर्वर के भीतर होस्ट किया जाता है।
  4. यद्यपि आप JRuby के साथ देशी रूबी रत्नों का उपयोग नहीं कर सकते हैं, लेकिन अधिकांश लोकप्रिय रूबी पुस्तकालयों के लिए JRuby कार्यान्वयन हैं।

JRuby विकी में सूचीबद्ध अन्य अंतर हैं:


शुक्रिया, उस जवाब के बारे में जो मैं देख रहा था, बस। :)
एपोचॉल्फ

4
ओह, और यह 1.9
rogerdpack

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

वीपीएन पर वीपीएन के साथ जॉरी का उपयोग करने के साथ हम दोनों बड़े पैमाने पर प्रदर्शन करते हैं (परीक्षण अविश्वसनीय रूप से धीरे-धीरे चलते हैं) और स्थानीय रूप से (कोई वीपीएन) केवल रूबी, रेल कंसोल, आदि शुरू करने में 30 सेकंड + के बजाय 3 लगते हैं।
माइकल डुरंट

57

मुझे आश्चर्य है कि जीआईएल से संबंधित इस प्रश्न के सभी उत्तरों में एक महत्वपूर्ण बात याद आ रही है ।

मुख्य अंतर आपको जासूसी के बारे में परवाह करना चाहिए। वेब-अनुप्रयोगों में जैसे रेल के साथ बनाया गया सच है संगामिति ("ग्लोबल इंटरप्रेटर लॉक" मुफ्त)। जब JRuby के साथ दो थ्रेड चल रहे हैं (उदाहरण के लिए 2 उपयोगकर्ता अनुरोधों की सेवा) तो वे एक प्रक्रिया के भीतर समवर्ती चलाने में सक्षम हैं, जबकि MRI में GIL (1.9 के मूल थ्रेड्स के साथ) है जो समानांतर में रूबी कोड को निष्पादित करने से बचता है।

एक एप्लिकेशन डेवलपर के लिए जेरीबी पर विचार करते समय यह ध्यान रखने वाली पहली बात है, क्योंकि यह वास्तव में चमकता है, config.threadsafe!लेकिन आपको अपने कोड (और अपने जवाहरात कोड) को "सही मायने में" थ्रेड-सुरक्षित बनाने की आवश्यकता है।


7

मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि आप रेल एप्लिकेशन पर एक JRuby को एक तरह से पैकेज कर सकते हैं जो आप सामान्य RoR के साथ नहीं कर सकते हैं - मिंगल या समान देखें। आपकी पैंट को गिराए बिना / कोमोनो खोलकर बेचना संभव बनाता है।

उस ने कहा, मैं RoR पैकेजिंग से परिचित नहीं हूँ, इसलिए मुझे मत पकड़िए :)


1
आप इस पर पूरी तरह से सही हैं, हालांकि आपको इसे पूरी तरह से करने के लिए रॉयर या रोइर मणि जैसी किसी चीज की आवश्यकता होगी (पिछली बार जब मैंने मिंगल का इस्तेमाल किया था, तो यह रूबी फ़ाइलों को अन-ऑबफैक्टेड था ...)।
मार्नेन लाईबो-कोसर

3

ज्यादातर यह एक ही काम करना चाहिए। jRoR में आप RoR में सामान नहीं ले सकते। आमतौर पर इसकी मुख्य रूप से तैनाती की चिंता है।

हालाँकि, यदि आपका RoR ऐप देशी पुस्तकालयों का उपयोग करता है, जो JVM पर चलने वाले समकक्ष नहीं है, तो यह एक दर्द हो सकता है। हालाँकि, अधिकांश लिबास में एक गैर देशी संस्करण उपलब्ध होता है (कम से कम लोकप्रिय हैं जो मैं भर आया हूं)।


0

यहां कुछ शानदार जवाब पहले से ही हैं।

eebbesen ने पहले ही मूल बातें कवर कर ली हैं, और kares (खुद!) ने हमें बताया है कि JRuby का कोई GIL नहीं है।

मैं अधिक व्यावहारिक दृष्टिकोण से जोड़ूंगा, मैंने रूबी ऑन रेल्स पर ऐप लॉन्च किया है, और फिर प्रदर्शन कारणों से JRuby में स्थानांतरित कर दिया।

दो मुख्य प्रदर्शन लाभ थे: JRuby कुछ परिस्थितियों में रूबी की तुलना में अधिक तेज़ (या था), और दो, ग्लोबल इंटरप्रेटर लॉक कार्स के उल्लेखों की कमी ने मुझे मल्टीथ्रेडिंग करने की अनुमति दी, जो कि मुश्किल, जबकि परिमाण प्रदर्शन लाभों के आदेशों को अनलॉक करता है। ।

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

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