- Ruby 4.0.0 जारी हो गया है, जिसमें नया Ruby Box और ZJIT पेश किया गया है और कई प्रदर्शन तथा भाषा सुधार शामिल हैं
- Ruby Box एक प्रायोगिक फीचर है, जो क्लास, मॉड्यूल, global variable, और native/Ruby library definitions को isolated execution में चलाने देता है
- ZJIT एक Rust-आधारित अगली पीढ़ी का JIT compiler है, जो मौजूदा YJIT की तुलना में संरचनात्मक रूप से अधिक विस्तारयोग्य है और बाहरी योगदान को आसान बनाता है
- Ractor parallel execution model को स्थिरता और प्रदर्शन के लिहाज़ से बेहतर किया गया है, और भविष्य में इसकी experimental स्थिति हटाने की योजना है
- core classes, standard library, C API, GC, JIT आदि में व्यापक अपडेट के साथ Ruby ecosystem के performance और scalability को मजबूत किया गया है
Ruby 4.0 का अवलोकन
- Ruby 4.0.0, Ruby Box और ZJIT पर केंद्रित एक बड़ा अपडेट रिलीज़ है
- parallel execution, language syntax, standard library, GC, JIT सहित कई क्षेत्रों में सुधार शामिल हैं
- डाउनलोड
.tar.gz, .tar.xz, .zip फ़ॉर्मेट में उपलब्ध है
Ruby Box
- Ruby Box definitions isolation देने वाला एक प्रायोगिक फीचर है
- environment variable
RUBY_BOX=1 सेट करने पर यह सक्रिय होता है, और इसका क्लास Ruby::Box है
- बॉक्स के अंदर लोड की गई definitions बाहर से अलग रहती हैं, इसलिए monkey patch, global/class variables, class/module definitions, और library changes दूसरे बॉक्स को प्रभावित नहीं करते
- प्रमुख उपयोग उदाहरण
- test cases के बीच isolated execution
- blue-green deployment के लिए parallel web app execution
- dependency update validation के लिए parallel execution
- भविष्य में उच्च-स्तरीय “package API” लागू करने के लिए आधार API के रूप में उपयोग की योजना
ZJIT
- ZJIT, YJIT का अगली पीढ़ी वाला संस्करण है और एक नया JIT compiler है
- Rust 1.85.0 या उससे ऊपर आवश्यक,
--zjit विकल्प से सक्रिय
- SSA IR आधारित बड़े compilation units को support करता है और इसकी संरचना बाहरी योगदान को बढ़ावा देती है
- अभी यह interpreter से तेज़ है, लेकिन YJIT से धीमा है
- production उपयोग की सिफारिश नहीं की जाती, और Ruby 4.1 में प्रदर्शन बेहतर होने की उम्मीद है
Ractor सुधार
- Ractor::Port क्लास जोड़ी गई है, जिससे message send/receive से जुड़ी समस्याएँ हल होती हैं
Ractor.shareable_proc से Ractor के बीच Proc objects साझा करना आसान हुआ
- आंतरिक data structures में सुधार से global lock contention कम हुआ और parallelism बेहतर हुआ
- Ractor की experimental स्थिति अगले वर्ष हटाने की योजना है
भाषा परिवर्तन
*nil अब nil.to_a को कॉल नहीं करता (**nil जैसा ही व्यवहार)
- logical operators (
||, &&, and, or) अब line continuation (dot chaining) syntax को support करते हैं
- इससे code readability और consistency बेहतर होती है
core classes अपडेट
- Array:
Array#rfind, Array#find जोड़े गए, जिससे efficient search संभव हुआ
- Binding: numbered parameters को छोड़ने और
implicit_parameters से जुड़े methods जोड़े गए
- Enumerator:
produce में size: keyword argument जोड़ा गया
- ErrorHighlight:
ArgumentError होने पर caller और definition code snippet दिखाता है
- Fiber/Fiber::Scheduler:
raise(cause:), fiber_interrupt, yield आदि जोड़े गए
- File: Linux पर
File::Stat#birthtime support
- IO:
Float::INFINITY timeout की अनुमति, pipe-आधारित process creation हटाया गया
- Kernel:
#inspect को customize किया जा सकता है, Kernel#open में pipe creation हटाया गया
- Math:
log1p, expm1 जोड़े गए
- Pathname: default gem से core class में पदोन्नत
- Proc: anonymous parameters के output format को एकरूप किया गया
- Ractor: communication structure को
Ractor::Port आधारित बनाया गया, Ractor.yield आदि हटाए गए
- Set: core class में पदोन्नत,
inspect format सरल किया गया
- Socket:
open_timeout argument जोड़ा गया, timeout exceptions को एकरूप किया गया
- String: Unicode 17.0.0, Emoji 17.0 support,
strip परिवार के methods का विस्तार
- Thread:
raise(cause:) argument support
standard library (Stdlib) अपडेट
- default gems में पदोन्नति:
ostruct, pstore, benchmark, logger, rdoc, win32ole, irb, reline, fiddle आदि
- नया default gem:
win32-registry 0.1.2
- default gem updates:
RubyGems 4.0.3, bundler 4.0.3, openssl 4.0.0, json 2.18.0 आदि
- bundled gem updates:
minitest 6.0.0, rake 13.3.1, rbs 3.10.0, debug 1.11.1 आदि
- RubyGems/Bundler 4 शामिल
प्लेटफ़ॉर्म समर्थन
- Windows: MSVC 14.0 से पुराने versions का support समाप्त (Visual Studio 2015 या नया आवश्यक)
compatibility परिवर्तन
Ractor.yield, Ractor#take, Ractor#close_incoming, Ractor#close_outgoing हटाए गए
ObjectSpace._id2ref deprecated
Process::Status#&, #>> हटाए गए
- internal frame (backtrace) output सरल किया गया
ArgumentError backtrace में receiver class/module name दिखाया जाता है
standard library compatibility
- CGI library हटाई गई, केवल
cgi/escape रखा गया
Set के core में जाने से SortedSet के लिए अलग gem install करना होगा
Net::HTTP का automatic Content-Type header setting हटाया गया
C API अपडेट
rb_thread_fd_close निष्क्रिय किया गया और rb_io_close उपयोग की सिफारिश
rb_thread_call_with_gvl अब GVL हो या न हो, दोनों स्थितियों में काम करता है
- Set के लिए C API जोड़ा गया (
rb_set_new, rb_set_add, rb_set_delete आदि)
implementation और performance सुधार
Class#new कॉल की गति बेहतर हुई, खासकर keyword arguments के साथ
- GC heap pool की स्वतंत्र वृद्धि से memory usage कम हुआ
- बड़े objects की sweeping गति बेहतर हुई
object_id, hash calculation और instance variable access optimize किए गए
- Ractor performance सुधार
- lock-free hash structure, cache contention में कमी, object allocation optimization
- deadlock, encoding, GC से जुड़े bugs ठीक किए गए
JIT संबंधित
- ZJIT: method-आधारित JIT, Rust 1.85.0 या ऊपर आवश्यक,
--zjit या RubyVM::ZJIT.enable से सक्रिय
- YJIT: statistics options बदले गए,
mem_size: और call_threshold: जोड़े गए
- RJIT:
--rjit हटाया गया, अलग repository में स्थानांतरित
परिवर्तन का पैमाना
- Ruby 3.4.0 की तुलना में 3,889 files बदलीं, 230,769 lines जोड़ी गईं, 297,003 lines हटाई गईं
- Ruby 4.0 एक बड़ा major release है, जिसने performance, parallelism, language consistency को काफी मजबूत किया है
डाउनलोड
ruby-4.0.0.tar.gz, ruby-4.0.0.tar.xz, ruby-4.0.0.zip फ़ॉर्मेट उपलब्ध
- हर फ़ाइल के SHA1, SHA256, SHA512 hash values दिए गए हैं
Ruby परिचय
- Ruby, 1993 में Yukihiro Matsumoto (Matz) द्वारा विकसित एक open source भाषा है
- यह कई प्लेटफ़ॉर्म पर चलती है और विशेष रूप से web development में विश्वभर में उपयोग की जाती है
अभी कोई टिप्पणी नहीं है.