<पी> रूबी 4.0 एक प्रमुख रिलीज़ है, जिसे रूबी की 30वीं वर्षगांठ (25 दिसंबर, 2025) पर समुदाय के तीन दशकों का जश्न मनाने के लिए लॉन्च किया गया है, न कि बड़े बदलावों के कारण। <पी> मुझे यह जानकर आश्चर्य हुआ कि रूबी वास्तव में सिमेंटिक वर्जनिंग का पालन नहीं करती है! <पी> इसके बजाय, जब परिवर्तन उसे प्रभावित करते हैं तो मैट्ज़ (रूबी के निर्माता) प्रमुख संस्करण को बढ़ाते हैं। यह संस्करण रूबी के 30 साल पूरे होने का प्रतीक है और भाषा का विस्तार करने के लिए सुविधाएँ प्रस्तुत करता है। <पी>
<पी> रूबी 4 में अपग्रेड करने वाले रूबीवादियों के लिए अच्छी खबर यह है किअपग्रेड करना अपेक्षाकृत दर्द रहित होना चाहिए। Ruby::Box जैसी कुछ नई सुविधाएं हैं और ZJIT , समवर्तीता में कुछ सुधार, और कुछ अन्य परिशोधन जो अधिकतर पश्चगामी-संगत हैं। <पी> आइए गहराई से देखें और देखें कि रूबी 4 में क्या बदलाव आया है—और आप कैसे आसानी से अपग्रेड कर सकते हैं।पी> Ruby::Box? क्या है
<पी> रूबी 4.0 की सबसे दिलचस्प प्रयोगात्मक विशेषताओं में से एक Ruby::Box है , जो रूबी प्रक्रियाओं के अंदर पृथक नामस्थान या "कंटेनर" (डॉकर कंटेनर के साथ भ्रमित नहीं होना) का परिचय देता है। <पी> यह अनिवार्य रूप से आपकी रूबी प्रक्रिया के भीतर एक अलग रूबी दुनिया को स्पिन करने का एक तरीका है। जब आप एक नया Ruby::Box बनाते हैं , कोई भी वर्ग, मॉड्यूल, वैश्विक चर, स्थिरांक, या यहां तक कि सी एक्सटेंशन जो आप उस बॉक्स के अंदर लोड करते हैं, उसी तक सीमित हैं। <पी> यह भाषा के स्तर पर हल्के वर्चुअलाइजेशन की तरह है, जहां प्रत्येक बॉक्स की अपनी स्थिति होती है और यह अन्य बॉक्स या मुख्य वातावरण में परिभाषाओं को लीक नहीं करेगा। <पी> क्योंकि यह प्रयोगात्मक है, आपको मुश्किल किनारों या अस्थिरता का सामना करना पड़ सकता है। प्रदर्शन ओवरहेड एक विचार है. चीज़ों को अलग-थलग करना मुफ़्त नहीं है, इसलिए कोर टीम ने जानबूझकर इसे ऑप्ट-इन किया है। <पी> रूबी 4.0 के अनुसार, बॉक्स का उद्देश्य तुरंत सही समानांतर निष्पादन प्रदान करना नहीं है। वे बेहतर कोड लोडिंग की नींव रखते हैं और कुछ अधिक सार्थक में विकसित हो सकते हैं। मैं रूबी को इतने दिलचस्प तरीके से विकसित होते देखने के लिए उत्साहित हूं। यदि आप रूबी बॉक्स का उपयोग करना चाहते हैं, तो आपको पहले पर्यावरण चर को सक्षम करना होगा: RUBY_BOX=1
ZJIT क्यों मायने रखता है
<पी> रूबी 4.0 ने ZJIT पेश किया है, जो एक बिल्कुल नया जस्ट-इन-टाइम कंपाइलर है, जिसे YJIT के उत्तराधिकारी के रूप में विकसित किया गया है। यदि आप गिनती रख रहे हैं, तो एमआरआई में अब दो हैं जेआईटी कंपाइलर। ZJIT, YJIT से भिन्न है और इन्हें समानांतर रूप से विकसित किया जा रहा है। यदि आप पहले से ही YJIT का उपयोग कर रहे हैं, तो आपको स्विच करने की आवश्यकता नहीं है। YJIT पुनर्कथन
<पी> YJIT ("फिर भी एक और JIT") Shopify द्वारा बनाया गया था और रूबी 3.1 में पेश किया गया था। यह एक लेज़ी बेसिक ब्लॉक वर्जनिंग दृष्टिकोण का उपयोग करता है - तुरंत कोड के छोटे हिस्से (बेसिक ब्लॉक) को संकलित करना और रनटाइम प्रकारों के आधार पर उन्हें विशेषज्ञता देना। <पी> YJIT ने जोड़ने में अपेक्षाकृत आसान होने के साथ-साथ कई रूबी ऐप्स को महत्वपूर्ण रूप से तेज़ करने में सिद्ध किया है। यह रस्ट में लिखा गया है और हाल के रूबी संस्करणों में डिफ़ॉल्ट/प्राथमिक JIT रहा है। ZJIT किस प्रकार भिन्न है
<पी> ZJIT एक अधिक पारंपरिक विधि-आधारित JIT रणनीति अपनाता है। छोटे ब्लॉकों को टुकड़ों में संकलित करने के बजाय, ZJIT एक SSA (स्टेटिक सिंगल असाइनमेंट) मध्यवर्ती प्रतिनिधित्व और एक अधिक पारंपरिक कंपाइलर पाइपलाइन का उपयोग करके बड़ी इकाइयों (संपूर्ण विधियों या बड़े कोड खंडों) को संकलित करता है। <पी> इसे कुछ हद तक "पाठ्यपुस्तक" जेआईटी कंपाइलर की तरह डिज़ाइन किया गया है, जिससे योगदानकर्ताओं के लिए समझना और सुधार करना आसान हो जाएगा। <पी> रूबी कोर टीम स्पष्ट रूप से बताती है कि ZJIT के साथ उनके दो लक्ष्य रूबी की दीर्घकालिक प्रदर्शन सीमा को बढ़ाना (YJIT की तुलना में अधिक उन्नत अनुकूलन को सक्षम करके) और JIT को समुदाय द्वारा अधिक हैक करने योग्य बनाना है। रूबी 4.0 में ZJIT को सक्षम करना
<पी> ZJIT उपलब्ध है लेकिन रूबी 4.0 में डिफ़ॉल्ट रूप से सक्षम नहीं है। <पी> इसे आज़माने के लिए, आपको अपने सिस्टम पर रस्ट 1.85 या उच्चतर स्थापित रूबी का निर्माण करना होगा। जबकि JIT कोड रूबी बाइनरी का हिस्सा है, इसे बनाने के लिए रस्ट की आवश्यकता होती है। फिर, आप ZJIT का उपयोग करने के लिए रूबी को '--zgit' ध्वज के साथ चला सकते हैं। <पी> यदि आप JIT को डिफ़ॉल्ट रूप से छोड़ देते हैं, तो भी आप YJIT से लाभान्वित हो रहे हैं (जो स्वयं सुधार करता रहता है)। यदि आप --rjit का उपयोग कर रहे थे ध्वज, आप देखेंगे कि इसे इस रिलीज़ में हटा दिया गया है। रूबी 4 में ट्रैक्टर्स में कुछ सुधार किए गए हैं
<पी> रूबी 3.0 ने समांतरता के लिए एक प्रायोगिक सुविधा, ट्रैक्टर्स की शुरुआत की। ट्रैक्टर जीआईएल (ग्लोबल इंटरप्रेटर लॉक) के आसपास काम करने के लिए एक ही प्रक्रिया में कई रूबी दुभाषियों (सिस्टम का वह हिस्सा जो आपके कोड को निष्पादित करता है) को चलाने की अनुमति देता है, जो आमतौर पर रूबी को एक समय में एक ही थ्रेड तक सीमित करता है। हालाँकि मैंने कभी भी ट्रैक्टर्स का उपयोग नहीं किया है, उनमें निरंतर निवेश एक स्पष्ट संकेत है कि वे रूबी के भविष्य के लिए महत्वपूर्ण हैं। <पी> रूबी 4.0 में, ट्रैक्टर अभी भी हैं प्रयोगात्मक के रूप में चिह्नित, लेकिन उन्हें मुख्यधारा की प्रयोज्यता के करीब ले जाने के लिए कुछ प्रमुख सुधार और एपीआई परिवर्तन प्राप्त हुए हैं। <पी> यदि आपने ट्रैक्टर्स का उपयोग किया है, तो आप जानते हैं कि संदेश भेजना और प्राप्त करना थोड़ा मुश्किल हो गया है। रूबी 4.0 मौजूदा एपीआई को अधिक मजबूत Ractor::Port से बदल देता है तंत्र. ए Ractor::Port मूलतः एक पाइप या चैनल है जिसका उपयोग ट्रैक्टर्स मूल्यों के आदान-प्रदान के लिए कर सकते हैं। प्रत्येक ट्रैक्टर में अब एक डिफ़ॉल्ट पोर्ट (Ractor.current.default_port) है ), और आप कस्टम पोर्ट ऑब्जेक्ट भी बना सकते हैं और उन्हें पास कर सकते हैं। <पी> ट्रैक्टर्स में बदलाव का मतलब यह भी है कि कुछ महत्वपूर्ण बदलाव हुए हैं। सबसे विशेष रूप से, Ractor.yield और Ractor#take हटा दिए गए. <पी> हुड के तहत, रूबी 4.0 के रेक्टर कार्यान्वयन को बेहतर प्रदर्शन और सुरक्षा के लिए ट्यून किया गया है। उन्होंने ट्रैक्टर्स के बीच साझा राज्य को कम कर दिया। ट्रैक्टर्स के बीच कम साझा स्थिति का मतलब है गलती से अलगाव तोड़ने की कम संभावना और मल्टी-कोर सिस्टम पर बेहतर सीपीयू कैश उपयोग। <पी> ट्रैक्टरों को अब बेहतर स्केल करना चाहिए और तेजी से चलना चाहिए, हालांकि वे अभी भी थ्रेड या प्रक्रियाओं के रूप में व्यापक रूप से उपयोग नहीं किए जाते हैं। *.nil रूबी 4
में परिवर्तन <पी> nil को विभाजित करना अब nil.to_a पर कॉल नहीं करता रूबी 4.0 में. <पी> पुराने रूबी संस्करणों में, arr = [*nil] जैसा कुछ किया जा रहा है nil.to_a पर कॉल करेगा पर्दे के पीछे (जो [] लौटाता है ), तो आपको एक खाली सरणी मिलेगी। यह थोड़ा जादुई और असंगत था (*nil क्यों एक ख़ाली सरणी की तरह व्यवहार करें?). <पी> रूबी 4.0 में, यह अजीब व्यवहार समाप्त हो गया है। स्प्लैट का उपयोग करना (* ) nil पर नहींहोगा to_a को लागू करें . इसे अनिवार्य रूप से "कुछ भी नहीं छींटाकशी" के रूप में माना जाता है। यह परिवर्तन इसे डबल-स्प्लैट **nil के अनुरूप बनाता है nil.to_hash पर कॉल नहीं करता , जिसे रूबी 3.4 में पेश किया गया था। रूबी 4 में एक पंक्ति की शुरुआत में तार्किक ऑपरेटर
<पी> यह एक छोटा सा वाक्यविन्यास सुधार है जो कई रूबीवादियों को मुस्कुराने पर मजबूर कर देगा! <पी> अब आप && डाल सकते हैं , || , and , या or शुरुआत में पिछली पंक्ति से बूलियन अभिव्यक्ति जारी रखने के लिए एक पंक्ति का। उदाहरण के लिए, आप लिख सकते हैं: if user_signed_in?
&& user.admin?
&& feature_enabled?
perform_admin_task
end
<पी> यह वैसा ही है if user_signed_in? &&
user.admin? &&
feature_enabled?
perform_admin_task
end
<पी> यह मेरे लिए थोड़ा अजीब है कि ये पहले से ही समान नहीं थे, इसलिए मैं इस अपडेट के लिए खुश हूं। रूबी 4 में कुछ क्लास अपडेट
<पी> रूबी 4.0 भी मुख्य वर्गों में कुछ छोटे बदलावों और सुधारों के साथ आता है। <पी> सबसे पहले, Set क्लास अब एक अंतर्निहित कोर क्लास है, जिसका अर्थ है कि आप इसे require 'set' के बिना उपयोग कर सकते हैं . यह set/sorted_set.rb को हटाने के साथ आता है . <पी> यही बात अब Pathname के लिए भी सच है , जिसे कोर क्लास में पदोन्नत किया गया था। <पी> कुछ नए Array भी हैं तरीके! यह रिलीज़ Array#find के प्रदर्शन में सुधार करता है , जो एक साधारण रैखिक खोज की तुलना में अधिक समझदारी से सरणियों की खोज करता है। हमें Array#rfind का परिचय भी मिला - यह कोई टाइपिंग त्रुटि नहीं है! यह विधि स्थिति से मेल खाने वाला अंतिम तत्व ढूंढती है सरणी में. <पी> रूबी 4 ने कुछ नई गणित विधियाँ, आत्मनिरीक्षण नियंत्रण, Enumerator भी जोड़ा सुधार, और भी बहुत कुछ! आपको सुधारों की पूरी सूची के लिए आधिकारिक दस्तावेज़ अवश्य देखना चाहिए। रूबी 4 में अपग्रेड कैसे करें
<पी> किसी प्रोडक्शन ऐप में रूबी संस्करण को अपग्रेड करना हमेशा सावधानी से किया जाना चाहिए, लेकिन यदि आप रूबी 3.4 से आ रहे हैं, तो यह आसान अपग्रेड में से एक होना चाहिए आपने अनुभव किया है. <पी> सुरक्षित संक्रमण सुनिश्चित करने के लिए यहां कुछ सुझाव दिए गए हैं: नोट जारी करें
<पी> सबसे पहले, आधिकारिक रिलीज़ नोट्स पढ़ें! आधिकारिक पदावनति नोटिसों की दोबारा जांच करें। ऐसा नहीं होना चाहिए यहाँ कोई आश्चर्य हो. रूबी 3.4 को आपको किसी भी आगामी अवमूल्यन के बारे में चेतावनी देनी चाहिए थी। बहिष्कार चेतावनियाँ
<पी> यदि आपने अपने रूबी दुभाषिया से अवनति चेतावनियों को नजरअंदाज किया है, तो भाषा में किसी भी अपडेट से पहले उन पर ध्यान दें। बेसलाइन परीक्षण
<पी> इसके बाद, सुनिश्चित करें कि आपके परीक्षण अच्छे हों। इससे आपको यह विश्वास बनाने में मदद मिलेगी कि आपके ऐप का व्यवहार नहीं बदला है। यदि आपके पास कोई नहीं है परीक्षण, अब कम से कम अपने महत्वपूर्ण पथों को कवर करने के लिए परीक्षणों में निवेश करने का एक अच्छा समय है। बंडलर अपडेट करें
<पी> आगे बंडलर को अपडेट करना एक अच्छा विचार है। एक बार जब आप नवीनतम संस्करण पर पहुँच जाएँ, तो bundle install चलाएँ और त्रुटियों या चेतावनियों की जाँच करें। अपना रूबी संस्करण बढ़ाएँ
<पी> अब आप रूबी के नए संस्करण को इंस्टॉल और स्विच कर सकते हैं। रूबी संस्करण प्रबंधकों को rbenv पसंद है या asdf आपके स्थानीय संस्करण को नियंत्रित करने के लिए रूबी दुनिया में लोकप्रिय हैं। यदि आपका ऐप डॉकर में चलता है, तो आप डॉकरफाइल में रूबी संस्करण को अपडेट करना चाहेंगे। यदि आपका ऐप डॉकर के बिना किसी प्लेटफ़ॉर्म पर चलता है, तो आप वहां अपना रूबी संस्करण अपडेट करना चाहेंगे। अपने Gemfile में रूबी 4.0 में अपग्रेड करें
<पी> अपने जेमफ़ाइल में अपना रूबी संस्करण अपडेट करें (यदि आपने इसे ruby से लॉक कर दिया है निर्देश) और bundle install चलाएँ एक आखिरी बार. अपने परीक्षण चलाएं
<पी> अंत में, अपने परीक्षण चलाएँ! यदि कुछ भी टूटा नहीं है, तो और भी अधिक आत्मविश्वास पैदा करने के लिए अपने एप्लिकेशन में महत्वपूर्ण पथों को चलाना सुनिश्चित करें। अपना अपग्रेड शिप करने से पहले, हनीबेजर जैसी अपवाद निगरानी सेवा का उपयोग करने पर विचार करें ताकि आप वास्तव में जान सकें यदि रूबी 4 में आपका अपग्रेड उपयोगकर्ताओं के लिए कोई समस्या पैदा कर रहा है। <पी> यदि आप इन चरणों का पालन करते हैं, तो आपको रूबी द्वारा पेश की जाने वाली सर्वोत्तम चीज़ों के बारे में अपडेट रहने का अपेक्षाकृत दर्द-मुक्त अनुभव होना चाहिए। जब आप उन परीक्षणों को चलाएं, तो रूबी को 30वें जन्मदिन की शुभकामनाएं देना न भूलें!