6 पॉइंट द्वारा GN⁺ 2025-12-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 में विश्वभर में उपयोग की जाती है

1 टिप्पणियां

 
GN⁺ 2025-12-26
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 बहुत तेज़ी से नहीं बदलता

    • मैं काफ़ी hardcore Rubyist हूँ, और ruby-lsp वाकई शानदार है। लेकिन यह कहना मुश्किल है कि RBS standard बन रहा है। असल में इसका adoption बहुत कम है। rbs-inline अभी personal project level पर है और activity भी कम है। हाँ, उसके developer का इसे सीधे RBS में integrate करने की कोशिश स्वागतयोग्य है। निजी तौर पर मुझे नहीं लगता कि comment-based type system बहुत व्यापक होगा
    • Ruby बस Python से कमतर है। जब लगभग वही system मौजूद है जो ज़्यादा तेज़ है और जिसकी community भी बड़ी है, तो Ruby इस्तेमाल करने की कोई खास वजह नहीं बचती
  • Christmas पर हमेशा Ruby का नया version आना चाहिए।
    इस बार ruby::box दिलचस्प लग रहा है। यह feature rollout को दो versions पर एक साथ चलाने देता है।
    और अब कई lines में if condition1 && condition2 लिख पाना भी काफ़ी बढ़िया है

    • कभी ऐसा हो कि हर Ractor अपनी अलग ruby::box में चले, और हर box अपना अलग GC चला सके, तो अच्छा होगा। तब BEAM की तरह सचमुच parallel execution संभव हो सकेगा। p99 latency भी शायद कम होगी। हाँ, object share करने पर copy cost आएगी, लेकिन ज़्यादातर apps में वह मामूली ही होगी
    • मैं तो पहले से ही 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 सबसे सुंदर है

    • तुमने जो भी गिनाया, वह सब Python ecosystem की libraries हैं, भाषा की अपनी ताकत नहीं। बहुत से developers language की वजह से नहीं, libraries की वजह से Python पर जा रहे हैं। इसका नतीजा यह है कि Python कई दिशाओं में खिंचता जा रहा है और उसकी language philosophy धुंधली पड़ने की समस्या पैदा हो रही है। दूसरी ओर Ruby में ऐसे लोग जुटते हैं जिन्हें भाषा खुद पसंद है, इसलिए वह अपने मूल स्वभाव को बेहतर संभाल पाती है
    • मैं भी इस साल Ruby से Kotlin पर गया हूँ। static typing न होने की बेचैनी बहुत ज़्यादा थी। Kotlin की performance भी अच्छी है, और थोड़ा ज़्यादा memory use होना अब कोई बड़ी समस्या नहीं है। Ruby अब भी पसंद है, लेकिन अब मैं उसे सिर्फ simple scripts के लिए इस्तेमाल करता हूँ
    • Python में IDE support कहीं बेहतर है, और सिर्फ उसी वजह से switch करना मेरे लिए worth था। Ruby की ज़रूरत से ज़्यादा dynamic nature मेरी पसंद की नहीं है
    • मैंने Langchain इस्तेमाल करने की कोशिश की, लेकिन वह इतनी तेज़ी से बदलता है कि documentation बिल्कुल साथ नहीं दे पाती। Search करो तो “Langchain docs इतने खराब क्यों हैं” जैसी posts ही भरी मिलती हैं। इसलिए मैंने Haystack पर switch किया, और उससे मैं कहीं ज़्यादा संतुष्ट हूँ
    • मुझे भी pandas, numpy, pytorch पसंद हैं, लेकिन फिर भी Rails के साथ full-stack web apps बनाना मज़ेदार लगता है। इसलिए मुझे pyCall सच में बहुत पसंद है
  • Christmas पर नया Ruby version तो बनता ही है। Matz और टीम का धन्यवाद

  • 2025~26 में Ruby सीखना चाहने वाले लोगों के लिए क्या कोई अच्छे, up-to-date resources हैं? Official docs के अलावा कोई अच्छी किताब जानना चाहूँगा

    • मैंने Pragmatic Studio के Elixir और Erlang courses किए हैं, और उनकी quality बहुत ऊँची थी। वही लोग Ruby और Rails courses भी देते हैं
      Pragmatic Studio Ruby on Rails course
  • Ruby सच में एक कमाल की language है। हाल ही में मैंने Rails के ऊपर एक ऐसी layer बनाई जो सिर्फ एक Markdown file से API generate कर देती है, और Python में वही चीज़ करना कहीं ज़्यादा जटिल होता। JavaScript में तो शायद और भी बुरा होता। Ruby की metaprogramming क्षमता सच में बेजोड़ है

    • दिलचस्प है, क्या इसका कोई example देख सकते हैं?
  • यह देखकर अच्छा लगा कि internal stack trace साफ़ किए गए हैं। कभी relative paths का support भी आ जाए तो बढ़िया होगा। और Set को आख़िरकार सही सम्मान मिलना भी अच्छा है

    • Stack trace में relative paths दिखें तो वाकई बहुत अच्छा होगा
  • मैं अभी ऐसी company में काम करता हूँ जहाँ Ruby इस्तेमाल नहीं होती, लेकिन फिर भी मैं Ruby से गहरा लगाव रखता हूँ। इस release के लिए धन्यवाद, और उम्मीद है कि फिर कभी इसे इस्तेमाल करने का मौका मिलेगा

  • मैंने पहले सुना था कि Ruby::Box (namespace) feature से गंभीर performance degradation होता है। जानना चाहता हूँ कि इस बार इसमें सुधार हुआ है या नहीं

  • मैं जानना चाहता हूँ कि tooling बेहतर हुई है या नहीं। अभी तक Windows पर LSP को ठीक से चलते नहीं देखा

    • मेरी राय में Windows पर programming करना खुद मुसीबत मोल लेना है। अगर Microsoft language नहीं है, तो Linux या macOS कहीं बेहतर हैं
    • Ruby का developer experience (DX) उम्मीद से कमज़ोर है, और Windows पर तो और भी खराब। अच्छी बात यह है कि इस समस्या को पहचाना गया है और इसे सुधारने को लेकर presentations भी हुई हैं
    • क्या तुमने WSL2 आज़माया है?