Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है।
क्या आप परिवर्तनों के साथ बने रहना चाहेंगे?
आइए एक नज़र डालते हैं!
अंतहीन रेंज (Endless Ranges)
Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्तर पर ले जाता है।
नई अंतहीन रेंज ऐसी दिखती है:
(1..)
यह एक नियमित रेंज से अलग है क्योंकि इसमें (1..10) की तरह अंतिम मान नहीं होता।
उदाहरण उपयोग:
["a", "b", "c"].zip(1..) # [["a", 1], ["b", 2], ["c", 3]] [1,2,3,4,5][1..] # [2, 3, 4, 5] (1..).step(5).take(100) # [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]
आप और क्या उदाहरण सोच सकते हैं?
Enumerable::ArithmethicSequence
Ruby 2.6 में एक नए प्रकार का Enumerable ऑब्जेक्ट पेश किया गया है।
मैं Enumerable::ArithmethicSequence की बात कर रहा हूं।
अभी दो मेथड्स हैं जो आपको एक ArithmethicSequence देते हैं:
- Range#step
- Numeric#step
इसमें क्या खास है?
एक ArithmethicSequence जानता है कि कितने तत्व हैं, पहला तत्व क्या है और अंतिम तत्व क्या है।
उदाहरण:
(1..10).step(2).first # 1 (1..10).step(2).last # 9
ये first और last मेथड्स Ruby 2.6 से पहले उपलब्ध नहीं थे और इसीलिए ArithmethicSequence अब मौजूद है!
एक और अंतर:
(1..10).step(2) == (1..10).step(2) # false - Ruby 2.5 (और पुराने) (1..10).step(2) == (1..10).step(2) # true - Ruby 2.6
Ruby 2.6 में अंकगणितीय अनुक्रमों की तुलना की जा सकती है।
एकाधिक आर्गुमेंट्स के साथ हैश मर्ज करें
यदि आप कई हैशेज को मर्ज करना चाहते हैं ताकि उन्हें एक में जोड़ा जा सके...
आप यह कर सकते हैं:
a = { a: 1 } b = { b: 2 } c = { c: 3 } a.merge(b).merge(c) # {:a=>1, :b=>2, :c=>3}
Ruby 2.6 एक नया तरीका जोड़ता है:
a.merge(b, c) # {:a=>1, :b=>2, :c=>3}
समान परिणाम, लेकिन आपको मेथड को केवल एक बार कॉल करना होगा!
नया अपवाद विकल्प
जब आप Integer जैसे रूपांतरण मेथड का उपयोग करते हैं तो यदि मान को परिवर्तित नहीं किया जा सकता तो आपको एक अपवाद मिलेगा।
उदाहरण:
Integer("a") # ArgumentError (invalid value for Integer(): "a")
Ruby 2.6 exception कीवर्ड आर्गुमेंट जोड़ता है:
- Integer()
- Float()
- Rational()
- Complex()
आप इस कीवर्ड से इन मेथड्स के व्यवहार को नियंत्रित कर सकते हैं।
उदाहरण:
Integer("a", exception: false) # nil
Random.bytes
यदि आपको कुछ रैंडम बाइट्स चाहिए तो Ruby 2.6 Random क्लास में एक नया bytes मेथड जोड़ता है।
यहां एक उदाहरण है:
Random.bytes(10) # "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"
यह पूरी तरह से नई कार्यक्षमता नहीं है क्योंकि यह हमेशा securerandom मॉड्यूल के माध्यम से उपलब्ध रही है।
require 'securerandom' SecureRandom.bytes(10)
फिर इस नए मेथड से क्यों परेशान हों?
Random.bytes सुरक्षा के बदले गति देता है, यह SecureRandom से 8x तेज है।
Range#%
Ruby 2.6 में Range में एक नया % मेथड जोड़ा गया है।
उदाहरण:
((0..) % 2).take(5) # [0, 2, 4, 6, 8]
यह मेथड Range#step के बराबर है।
TracePoint#parameters
TracePoint क्लास आपको मेथड कॉल्स, क्लास डेफिनिशन्स और थ्रेड्स जैसे इवेंट्स को ट्रेस करने में मदद करती है।
Ruby 2.6 एक नया parameters मेथड जोड़ता है।
इस नए मेथड के साथ आप कॉल किए जा रहे मेथड के पैरामीटर सूची को प्रिंट कर सकते हैं।
उदाहरण:
TracePoint.trace(:call, :b_call, :c_call) do |tp| p [tp.event, tp.parameters] end def orange(a,b,c*) end orange(1,2,3)
परिणाम:
[:call, [[:req, :a], [:req, :b], [:rest, :c]]]
ट्रांजिएंट हीप (Transient Heap)
ट्रांजिएंट हीप अल्पकालिक ऑब्जेक्ट्स के लिए एक प्रदर्शन सुधार है जिसका उद्देश्य मेमोरी फ्रैगमेंटेशन की समस्या और malloc के धीमे कॉल्स को कम करना है।
Malloc है कि Ruby इंटरप्रेटर (और अधिकांश C प्रोग्राम) ऑपरेटिंग सिस्टम से मेमोरी कैसे मांगते हैं।
NEWS एंट्री के अनुसार, हम 6-7% स्पीडअप देख रहे हैं।
मैंने कुछ बेंचमार्क चलाए:
ऐसा लगता है कि यह तब सबसे प्रभावी होता है जब कई हैशेज 10 तत्वों से छोटे बनाए जाते हैं।

इन परिणामों के आधार पर Ruby 2.6 (प्रीव्यू 3) में बड़े हैशेज धीमे हैं।
अन्य ऑब्जेक्ट्स जो ट्रांजिएंट हीप से लाभ उठा सकते हैं:
- Arrays
- Struct
- नियमित ऑब्जेक्ट्स (आपके द्वारा बनाई गई क्लासेज से)
Array#union और Array#difference
Ruby 2.6 में Array क्लास में दो नए मेथड्स, union और difference जोड़े गए हैं।
उदाहरण:
[1,2,3,4,5].difference([3]) # [1, 2, 4, 5] [1,2,3,4,5].union([5,6,7]) # [1, 2, 3, 4, 5, 6, 7]
ये नए मेथड्स एकाधिक आर्गुमेंट्स लेते हैं।
सारांश
Ruby 2.6 नई उपयोगी सुविधाओं के साथ आ रहा है जो आपको कम समय में बेहतर कोड लिखने में मदद करेंगी। एक और प्रदर्शन-संबंधी सुविधा, MJIT (मेथड बेस्ड जस्ट-इन-टाइम कंपाइलर) को एक समर्पित लेख में कवर किया जाएगा।
Ruby 2.6 के 25 दिसंबर, 2018 को जारी होने की उम्मीद है।
यदि आप परिवर्तनों के साथ बने रहना चाहते हैं, अपने Ruby कौशल में सुधार करना चाहते हैं और एक शानदार Ruby डेवलपर बनना चाहते हैं तो आज ही मेरे Ruby न्यूज़लेटर से जुड़ना न भूलें।
पढ़ने के लिए धन्यवाद!