Ruby 4.0.0
(ruby-lang.org)- 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 दूसरे बॉक्स को प्रभावित नहीं करते
- environment variable
- प्रमुख उपयोग उदाहरण
- 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 करता है और इसकी संरचना बाहरी योगदान को बढ़ावा देती है
- Rust 1.85.0 या उससे ऊपर आवश्यक,
- अभी यह 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#birthtimesupport - IO:
Float::INFINITYtimeout की अनुमति, 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 में पदोन्नत,
inspectformat सरल किया गया - Socket:
open_timeoutargument जोड़ा गया, 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._id2refdeprecatedProcess::Status#&,#>>हटाए गए- internal frame (backtrace) output सरल किया गया
ArgumentErrorbacktrace में receiver class/module name दिखाया जाता है
standard library compatibility
- CGI library हटाई गई, केवल
cgi/escapeरखा गया Setके core में जाने सेSortedSetके लिए अलग gem install करना होगाNet::HTTPका automaticContent-Typeheader 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,hashcalculation और 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 में विश्वभर में उपयोग की जाती है
1 टिप्पणियां
Hacker News की राय
Ruby को जन्मदिन की शुभकामनाएँ!
लोग अक्सर कहते हैं कि “Ruby में typing नहीं है, इसलिए वे इसे छोड़कर चले गए”, लेकिन अब RBS धीरे-धीरे standard बनता जा रहा है। Sorbet भी इसे support करता है, और code के साथ ही type लिखने के लिए inline notation भी आ गई है।
और “Ruby का LSP कमजोर है” वाली बात भी अब पुरानी हो चुकी है। ruby-lsp standard बन गया है, और “go to definition” भी support करता है। Plugin architecture की वजह से कई tools एक ही AST को फिर से इस्तेमाल कर सकते हैं।
Ractor की वजह से parallelism भी काफी बेहतर हुआ है, और अब बस GC को थोड़ा और निखार दिया जाए तो यह पूरी तरह experimental stage से बाहर निकलता दिखता है।
ZJIT और Box जैसी नई features भी हैं, लेकिन अभी production में recommend नहीं की जातीं। फिर भी चीज़ें लगातार बेहतर हो रही हैं।
मुझे यह भी अच्छा लगता है कि syntax बहुत तेज़ी से नहीं बदलता
Christmas पर हमेशा Ruby का नया version आना चाहिए।
इस बार ruby::box दिलचस्प लग रहा है। यह feature rollout को दो versions पर एक साथ चलाने देता है।
और अब कई lines में
if condition1 && condition2लिख पाना भी काफ़ी बढ़िया हैif condition1 && condition2को कई lines में लिखता आया हूँ, और वह ठीक से काम करता था। नया syntax अलग क्या करता है, यह समझ नहीं आ रहाRuby 4.0 की release देखकर अच्छा लगा, लेकिन 2025 में मैं पूरी तरह Python पर switch कर चुका हूँ।
Claude Code ने मेरे Ruby projects को 100% Python में auto-convert कर दिया, और उसके बाद Ruby इस्तेमाल करने की वजह लगभग खत्म हो गई।
मैंने 10 साल से ज़्यादा Ruby से प्यार किया, इस पर किताब भी लिखी, लेकिन अब fastapi, pytorch, langchain, streamlit जैसे ecosystem की वजह से Python जीत गया है। फिर भी मुझे अब भी लगता है कि Ruby का syntax सबसे सुंदर है
Christmas पर नया Ruby version तो बनता ही है। Matz और टीम का धन्यवाद
2025~26 में Ruby सीखना चाहने वाले लोगों के लिए क्या कोई अच्छे, up-to-date resources हैं? Official docs के अलावा कोई अच्छी किताब जानना चाहूँगा
Pragmatic Studio Ruby on Rails course
Ruby सच में एक कमाल की language है। हाल ही में मैंने Rails के ऊपर एक ऐसी layer बनाई जो सिर्फ एक Markdown file से API generate कर देती है, और Python में वही चीज़ करना कहीं ज़्यादा जटिल होता। JavaScript में तो शायद और भी बुरा होता। Ruby की metaprogramming क्षमता सच में बेजोड़ है
यह देखकर अच्छा लगा कि internal stack trace साफ़ किए गए हैं। कभी relative paths का support भी आ जाए तो बढ़िया होगा। और Set को आख़िरकार सही सम्मान मिलना भी अच्छा है
मैं अभी ऐसी company में काम करता हूँ जहाँ Ruby इस्तेमाल नहीं होती, लेकिन फिर भी मैं Ruby से गहरा लगाव रखता हूँ। इस release के लिए धन्यवाद, और उम्मीद है कि फिर कभी इसे इस्तेमाल करने का मौका मिलेगा
मैंने पहले सुना था कि Ruby::Box (namespace) feature से गंभीर performance degradation होता है। जानना चाहता हूँ कि इस बार इसमें सुधार हुआ है या नहीं
मैं जानना चाहता हूँ कि tooling बेहतर हुई है या नहीं। अभी तक Windows पर LSP को ठीक से चलते नहीं देखा