• 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 में विश्वभर में उपयोग की जाती है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.