रूबी (प्रोग्रामिंग लैंग्वेज)

रूबी एक व्याख्या की गई, उच्च-स्तरीय, सामान्य-उद्देश्य वाली क्रमादेशन (प्रोग्रामिंग) भाषा है जो कई क्रमादेशन प्रतिमानों का समर्थन करती है। इसे क्रमादेशन उत्पादकता और सरलता पर जोर देने के साथ  अभिकल्पना किया गया था। रूबी में, सब कुछ एक वस्तु है, जिसमें आदिम तथ्य प्रकार शामिल हैं। यह 1990 के दशक के मध्य में जापान में युकीहिरो "मात्ज़" मात्सुमोतो द्वारा विकसित किया गया था।

रूबी गतिशील रूप से टाइप की जाती है और कचरा संग्रह और समय-समय पर संकलन का उपयोग करती है। यह प्रक्रियात्मक क्रमदेशन,वस्तु-उन्मुख क्रमदेशन सहित कई क्रमदेशन प्रतिमानों का समर्थन करता है। निर्माता के अनुसार, रूबी Perl, Smalltalk, Eiffel, Ada , BASIC, Java और Lisp  से प्रभावित थी।

प्रारंभिक अवधारणा
मात्सुमोतो ने कहा है कि रूबी की कल्पना 1993 में की गई थी। रूबी-टॉक प्रेषण सूची के 1999 के एक पद में, उन्होंने भाषा के बारे में अपने कुछ शुरुआती विचारों का वर्णन किया है:

"मैं अपने सहयोगी के साथ वस्तु-उन्मुख पटकथा भाषा की संभावना के बारे में बात कर रहा था। मैं पर्ल (पर्ल 4, पर्ल 5 नहीं) जानता था, लेकिन मुझे यह वास्तव में पसंद नहीं आया, क्योंकि इसमें खिलौना भाषा की गंध थी (यह अभी भी है)। वस्तु-उन्मुख भाषा बहुत ही आशाजनक लग रही थी। मैं तब पायथन को जानता था। लेकिन मुझे यह पसंद नहीं आया, क्योंकि मुझे नहीं लगा कि यह एक वास्तविक वस्तु-उन्मुख भाषा थी - OO सुविधाएँ भाषा में ऐड-ऑन दिखाई देती हैं। 15 वर्षों के लिए एक भाषा उन्मादी और OO प्रशंसक के रूप में, मैं वास्तव में एक वास्तविक वस्तु-उन्मुख, उपयोग में आसान पटकथा भाषा चाहता था। मैंने खोजा लेकिन एक नहीं मिला। इसलिए मैंने इसे बनाने का फैसला किया।"

मात्सुमोतो ने रूबी के प्रारुप का वर्णन इसके मूल में एक साधारण लिस्प (प्रोग्रामिंग लैंग्वेज) भाषा की तरह किया है, जिसमें Smalltalk की तरह एक वस्तु प्रणाली, उच्च-क्रम के कार्यों से प्रेरित खंड और पर्ल की तरह व्यावहारिक उपयोगिता है।

भाषा के लिए कोई भी कोड लिखे जाने से पहले 24 फरवरी,1993 को मात्सुमोतो और कीजु इशित्सुका के बीच एक ऑनलाइन चैट सत्र के दौरान "रूबी" नाम की उत्पत्ति हुई थी। प्रारंभ में दो नाम प्रस्तावित थे: "कोरल" और "रूबी"। मात्सुमोतो ने इशित्सुका को बाद में एक ई-मेल में बाद वाले को चुना। मात्सुमोतो ने बाद में "रूबी" नाम चुनने में एक कारक का उल्लेख किया - यह उनके एक सहयोगी का जन्मस्थान था।

प्रारंभिक विज्ञप्ति
रूबी 0.95 की पहली सार्वजनिक विज्ञप्ति की घोषणा 21 दिसंबर, 1995 को जापानी घरेलू समाचार समूहों पर की गई थी। इसके बाद, दो दिनों में रूबी के तीन और संस्करण जारी किए गए। रिलीज जापानी भाषा के लॉन्च के साथ हुई। जापानी-भाषा रूबी-सूची प्रेषण सूची, जो नई भाषा के लिए पहली प्रेषण सूची थी।

विकास के इस चरण में पहले से मौजूद रूबी के बाद के विज्ञप्ति में परिचित सुविधाओं में से कई थे, जिनमें वस्तु-उन्मुख प्रारुप, विरासत (इनहेरिटेंस) वाली कक्षाएं, मिक्सिन्स, इटरेटर्स, क्लोजर, अपवाद प्रहस्तन (एक्सेप्शन हैंडलिंग) और अपशिष्ट संग्रह शामिल हैं।

1995 में रूबी 0.95 के जारी होने के बाद, रूबी के कई स्थिर संस्करण अगले वर्षों में जारी किए गए:
 * रूबी 1.0: 25 दिसंबर, 1996
 * रूबी 1.2: दिसंबर 1998
 * रूबी 1.4: अगस्त 1999
 * रूबी 1.6: सितंबर 2000

1997 में रूबी के बारे में पहला लेख वेब पर प्रकाशित हुआ था। उसी वर्ष, मात्सुमोतो को netlab.jp द्वारा एक पूर्णकालिक विकासक (डेवलपर) के रूप में रूबी पर काम करने के लिए नियुक्त किया गया था।

1998 में, मात्सुमोतो द्वारा रूबी अनुप्रयोग पुरालेख (एप्लिकेशन आर्काइव) को रूबी के लिए एक सरल अंग्रेजी भाषा के मुखपृष्ठ के साथ प्रमोचन किया गया था।

1999 में, पहली अंग्रेजी भाषा की प्रेषण सूची रूबी-टॉक शुरू हुई, जिसने जापान के बाहर भाषा में बढ़ती रुचि का संकेत दिया। इसी वर्ष, मात्सुमोतो और कीजू इशित्सुका ने रूबी पर पहली पुस्तक लिखी, द वस्तु-उन्मुख पटकथा भाषा रूबी (オブジェクト指向スクリプト言語 Ruby), जो अक्टूबर 1999 में जापान में प्रकाशित हुई थी। इसका पालन 2000 के दशक की शुरुआत में लगभग किया जाएगा। रूबी पर 20 किताबें जापानी भाषा में प्रकाशित होंगी।.

2000 तक, रूबी जापान में पायथन से अधिक लोकप्रिय थी। सितंबर 2000 में, पहली अंग्रेजी भाषा की किताब क्रमदेशन रूबी छपी थी, जिसे बाद में जनता के लिए स्वतंत्र रूप से जारी किया गया था, जिससे अंग्रेजी बोलने वालों के बीच रूबी को अपनाने का विस्तार हुआ। 2002 की शुरुआत में, अंग्रेजी भाषा की रूबी-टॉक प्रेषण सूची को जापानी भाषा की रूबी-सूची की तुलना में अधिक संदेश प्राप्त हो रहे थे, जो गैर-जापानी भाषी दुनिया में रूबी की बढ़ती लोकप्रियता को दर्शाता है।

रूबी 1.8 और 1.9
रूबी 1.8 को शुरू में अगस्त 2003 में जारी किया गया था, यह लंबे समय तक स्थिर था, और जून 2013 को सेवानिवृत्त हो गया था। हालांकि बहिष्कृत, इसके आधार पर अभी भी कोड है। रूबी 1.8 रूबी 1.9 के साथ केवल आंशिक रूप से संगत है।

रूबी 1.8 कई उद्योग मानकों का विषय रहा है। रूबी के लिए भाषा विनिर्देशों को जापानी औद्योगिक मानक समिति (JISC) और फिर अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) को प्रस्तुत करने के लिए सूचना-प्रौद्योगिकी संवर्धन एजेंसी (जापान सरकार की एक एजेंसी) के ओपन स्टैंडर्ड प्रमोशन सेंटर द्वारा विकसित किया गया था। इसे 2011 में एक जापानी औद्योगिक मानक (JIS X 3017) और 2012 में एक अंतरराष्ट्रीय मानक (ISO/IEC 30170)।

2005 के आसपास, रूबी भाषा में रुचि रूबी ऑन रेल्स, रूबी में लिखी गई एक वेब रूपरेखा के साथ मिलकर बढ़ी। रूबी के बारे में बढ़ती जागरूकता का श्रेय अक्सर रेल को दिया जाता है।

रूबी 1.9.3 के साथ प्रभावी, 31 अक्टूबर, 2011 को जारी किया गया, रूबी ने रूबी अनुज्ञप्ति और GPL के तहत दोहरे अनुज्ञप्ति वाले होने से रूबी अनुज्ञप्ति और दो-खंड बीएसडी अनुज्ञप्ति के तहत दोहरे अनुज्ञप्ति होने के लिए स्विच किया। 1.9 को अपनाने की गति 1.8 के परिवर्तनों से धीमी हो गई थी जिसके लिए कई लोकप्रिय तृतीय पक्ष के रत्नों को फिर से लिखने की आवश्यकता थी। रूबी 1.9 ने 1.8 श्रृंखला में कई महत्वपूर्ण बदलाव पेश किए। उदाहरणों में शामिल:


 * स्थानीय चर को ब्लॉक करें (वे चर जो उस ब्लॉक के लिए स्थानीय हैं जिसमें उन्हें घोषित किया गया है)
 * एक अतिरिक्त lambda syntax: f = ->(a,b) $($ puts a + b $)$
 * प्रतीक कुंजियों के लिए कोलन का उपयोग करके एक अतिरिक्त Hash तालिका शाब्दिक सिंटैक्स: {symbol_key: "value"} == {:symbol_key => "value"}
 * प्रति-स्ट्रिंग वर्ण कूटलेखन (एन्कोडिंग) समर्थित हैं
 * नया सॉकेट API (IPv6  समर्थन)
 * आयात सुरक्षा

रूबी 2
रूबी 2.0 का उद्देश्य रूबी 1.9.3 के साथ पूरी तरह से पिछड़ा संगत होना था। 24 फरवरी, 2013 को आधिकारिक 2.0.0 विमोचन के अनुसार, केवल पांच ज्ञात (मामूली)असंगतियां थीं। रूबी 2.0 ने कई नई सुविधाएँ जोड़ीं, जिनमें शामिल हैं:


 * विधि मूलशब्द (कीवर्ड) तर्क,
 * एक नया तरीका,, एक वर्ग का विस्तार करने के लिए,
 * प्रतीकों की एक सरणी बनाने के लिए एक नया शाब्दिक,
 * अंकगणित के आलसी मूल्यांकन के लिए नया API, और
 * वस्तुओं को हैश में बदलने के लिए #to_h का उपयोग करने का एक नया सम्मेलन।

2.1.0 से शुरू होकर, रूबी की संस्करण नीति शब्दार्थगत संस्करण के समान हो गई।

रूबी 2.2.0 में चालवर्धी, बग फिक्स और पुस्तकालय अद्यतन शामिल हैं और कुछ बहिष्कृत APIs को हटा देता है। सबसे विशेष रूप से, रूबी 2.2.0 स्मृति प्रबंधन में बदलाव पेश करता है – एक वृद्धिशील अपशिष्ट संग्राहक, प्रतीकों के अपशिष्ट संग्रह के लिए समर्थन और जेमलोक के खिलाफ सीधे संकलन करने का विकल्प। इसमें system  और spawn  के साथ vfork (2) का प्रयोग करने के लिए प्रयोगात्मक समर्थन भी शामिल है, और यूनिकोड 7.0 विनिर्देश के लिए अतिरिक्त समर्थन शामिल है। संस्करण 2.2.1 के बाद से, PowerPC64 पर रूबी MRI के प्रदर्शन में सुधार हुआ था।   जिन सुविधाओं को अप्रचलित या हटा दिया गया था उनमें callcc, DL library, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application और साथ ही विभिन्न C API कार्य शामिल हैं।

रूबी 2.3.0 में कई प्रदर्शन सुधार, अद्यतन और बग फिक्स शामिल हैं, जिसमें Proc#call, Socket और IO अपवाद मूलशब्द का उपयोग, Thread# नाम प्रबंधन,  व्यतिक्रम निष्क्रिय Net::FTP कनेक्शन, और रेक को stdlib से हटाया जा रहा है। अन्य उल्लेखनीय परिवर्तनों में शामिल हैं:


 * स्ट्रिंग ऑपरेशंस में परिणामस्वरूप बड़े प्रदर्शन में वृद्धि के साथ व्यतिक्रम रूप से सभी स्ट्रिंग शाब्दिक को जमे हुए के रूप में चिह्नित करने की क्षमता। * केवल चाबियों के बजाय कुंजी/मान जोड़े की प्रत्यक्ष जांच की अनुमति देने के लिए हैश तुलना।
 * एक नया सुरक्षित मार्गनिर्देशन संचालक  जो निल  प्रबंधन  को आसान बना सकता है (उदाहरण के लिए, हम प्रयोग कर सकते हैं  ).
 * did_you_mean रत्न अब व्यतिक्रम रूप से समूह किया गया है और शुरुआत पर स्वचालित रूप से NameError या NoMethodError पर समान नाम मिलानों का सुझाव देने के लिए आवश्यक है।
 * गहरे नेस्टेड मानों को आसानी से निकालने के लिए हैश # डिग और ऐरे # डिग (उदाहरण के लिए दिया गया, फू बाज का मूल्य अब  ) द्वारा प्राप्त किया जा सकता है ।
 * जो अन्य नई सुविधाओं के साथ-साथ दिए गए नियमित अभिव्यक्ति के सभी नकारात्मक उदाहरणों से मेल खाएगा।

रूबी 2.4.0 में हैश टेबल, Array#max, Array#min और उदाहरण चर अभिगम (इंस्टेंस वेरिएबल एक्सेस) में प्रदर्शन सुधार शामिल हैं। अन्य उल्लेखनीय परिवर्तनों में शामिल हैं:


 * Binding#irb: binding.pry के समान एक REPL सत्र प्रारंभ करें
 * Unify Fixnum और Bignum को पूर्णांक वर्ग में एकीकृत करें
 * स्ट्रिंग केवल ASCII ही नहीं, बल्कि यूनिकोड स्थिति प्रतिचित्रण का समर्थन करती है
 * एक नई विधि, Regexp#match?, जो Regexp#match का तेज़ बूलियन संस्करण है
 * सूत्र गतिरोध पहचान अब सूत्र को उनके पश्व-अनुरेखन (बैकट्रेस) और निर्भरता के साथ दिखाता है

रूबी 2.5.0 में कुछ उल्लेखनीय परिवर्तनों में बचाव और सुनिश्चित करना शामिल है कि बयान स्वचालित रूप से आसपास के डू-एंड ब्लॉक (अतिरिक्त स्टार्ट-एंड ब्लॉक की कम आवश्यकता) का उपयोग करते हैं, yield_self के साथ विधि-श्रृंखला, शाखा व्याप्ति के लिए समर्थन और विधि व्याप्ति माप, और आसान Hash#slice और Hash#transform_keys के साथ हैश रूपांतर इसके शीर्ष पर कई प्रदर्शन सुधार आते हैं जैसे तेज खंड  क्षणिक (3 गुना तेज), तेज म्यूटेक्स, तेज ERB  सांचा और कुछ संघनन विधियों में सुधार।

रूबी 2.6.0 में कुछ उल्लेखनीय परिवर्तनों में एक प्रायोगिक जस्ट-इन-टाइम कंपाइलर (JIT) और RubyVM::AbstractSyntaxTree (प्रयोगात्मक) शामिल हैं।

रूबी 2.7.0 में कुछ उल्लेखनीय परिवर्तनों में स्वरूप मिलान (प्रायोगिक), REPL सुधार, एक संघनन GC, और स्थितीय और मुख्य शब्द तर्कों को अलग करना शामिल है।

रूबी 3
रूबी 3.0.0 को 2020 में क्रिसमस के दिन विज्ञप्ति किया गया था। इसे रूबी 3x3 के रूप में जाना जाता है जिसका अर्थ है कि रूबी 2.0 की तुलना में रूबी 3.0 में कार्यक्रम तीन गुना तेजी से चलेंगे। और कुछ ने पहले से ही 2 से 3 तक सड़क पर मध्यवर्ती विज्ञप्ति में लागू किया था। 3x3 को प्राप्त करने के लिए, रूबी 3 MJIT के साथ आता है, और बाद में YJIT, जस्ट-इन-टाइम संकलनकर्ता (कंपाइलर्स), कार्यक्रम को तेज़ बनाने के लिए, हालांकि उन्हें प्रायोगिक के रूप में वर्णित किया गया है और बने रहते हैं व्यतिक्रम रूप से अक्षम (रनटाइम पर झंडे द्वारा सक्षम)।

रूबी 3.0 का एक अन्य लक्ष्य संगामिति (कंप्यूटर साइंस) और दो और उपयोगिताओं फाइबर अनुसूचक, और प्रयोगात्मक रेक्टर लक्ष्य को को सुगम बनाते हैं। रेक्टर हल्का वजन और सूत्र-सुरक्षित है क्योंकि इसे साझा वस्तुओं के बजाय संदेशों का आदान-प्रदान करके प्राप्त किया जाता है।

रूबी 3.0 स्थैतिक कार्यक्रम विश्लेषण के लिए रूबी कार्यक्रमों के प्रकारों का वर्णन करने के लिए RBS भाषा का परिचय देता है। इसे सामान्य रूबी प्रोग्राम से अलग किया जाता है।

रुबी 3.0 में कुछ रचनाक्रम संवर्द्धन और पुस्तकालय परिवर्तन भी हैं।

रूबी 3.1 को 2021 में क्रिसमस के दिन विज्ञप्ति किया गया था। इसमें YJIT शामिल है, जो वास्तविक दुनिया के व्यावसायिक अनुप्रयोगों के प्रदर्शन को बढ़ाने के लिए Shopify द्वारा विकसित एक नया जस्ट-इन-टाइम कंपाइलर है। एक नया दोषमार्जक (डिबगर) भी शामिल है। इस विज्ञप्ति में कुछ रचनाक्रम संवर्द्धन और अन्य सुधार हैं। FTP, SMTP, IMAP, and POP के लिए संजाल (नेटवर्क लाइब्रेरी) को व्यतिक्रम रत्नों से समूह किए गए रत्नों में ले जाया जाता है।

रूबी 3.2 को 2022 में क्रिसमस के दिन विज्ञप्ति किया गया था। यह एक WASI अंतरापृष्ठ के माध्यम से WebAssembly वातावरण के अंदर चलाने के लिए समर्थन लाता है। नियमित अभिव्यक्ति में कुछ सुधार भी प्राप्त होते हैं, जिसमें कुछ ReDoS हमलों से बचाने के लिए तेज़, मेमोइज़्ड मेल कलन विधि और नियमित अभिव्यक्ति मेल के लिए समनुरूप करने योग्य टाइमआउट शामिल हैं। इस विज्ञप्ति में अतिरिक्त डिबगिंग और  रचनाक्रम सुविधाएँ भी शामिल हैं, जिसमें  रचनाक्रम सुझाव, साथ ही त्रुटि हाइलाइटिंग शामिल हैं। MJIT संकलनकर्ता को एक मानक लाइब्रेरी मॉड्यूल के रूप में फिर से लागू किया गया है, जबकि YJIT, एक जंग-आधारित JIT संकलनकर्ता अब Linux पर अधिक संरचना का समर्थन करता है।

शब्दार्थ और दर्शन
मात्सुमोतो ने कहा है कि अच्छे उपयोगकर्ता अंतरफलक प्रारूप के सिद्धांतों का पालन करते हुए रूबी को क्रमादेशक उत्पादकता और मनोरंजन के लिए प्रारूप किया गया है। 2008 में एक Google टेक टॉक में मात्सुमोतो ने आगे कहा, मुझे उम्मीद है कि रूबी दुनिया के हर क्रमादेशक को उत्पादक बनने और कार्यरचना का आनंद लेने और खुश रहने में मदद करेगी। वह रूबी भाषा का प्राथमिक उद्देश्य है। उन्होंने जोर देकर कहा कि प्रणाली प्रारूप को संगणक के बजाय मानव पर जोर देने की जरूरत है:

"अक्सर लोग, खासकर संगणक अभियन्ता, यंत्र पर ध्यान केंद्रित करते हैं। वे सोचते हैं, "ऐसा करने से यंत्र तेजी से चलेगी। ऐसा करने से यंत्र अधिक प्रभावी ढंग से चलेगी। ऐसा करने से यंत्र कुछ कुछ करेगी।" वे यंत्र पर ध्यान केंद्रित कर रहे हैं। लेकिन वास्तव में हमें मनुष्यों पर ध्यान केंद्रित करने की आवश्यकता है कि कैसे मनुष्य कार्यरचना करने या यंत्र के अनुप्रयोग को संचालित करने की परवाह करते हैं। हम उस्ताद हैं। वे गुलाम हैं।"

मात्सुमोतो ने कहा है कि उनका प्राथमिक डिजाइन लक्ष्य प्रोग्रामर के काम को कम करके और संभावित भ्रम को कम करके एक ऐसी भाषा बनाना था जिसका उपयोग करने में उन्हें खुद मज़ा आता था। उन्होंने कहा है कि उन्होंने रूबी के डिजाइन के लिए कम से कम विस्मय का सिद्धांत (पोला) लागू नहीं किया था; मई 2005 में समाचार समूह comp.lang.ruby पर चर्चा में, मात्सुमोतो ने रूबी को पोला से दूर करने का प्रयास किया, यह समझाते हुए कि क्योंकि कोई भी डिज़ाइन विकल्प किसी के लिए आश्चर्यजनक होगा, वह आश्चर्य का मूल्यांकन करने में एक व्यक्तिगत मानक का उपयोग करता है। यदि वह व्यक्तिगत मानक सुसंगत रहता है, तो मानक से परिचित लोगों के लिए कुछ आश्चर्य होगा।

मात्सुमोतो ने एक साक्षात्कार में इसे इस प्रकार परिभाषित किया:

"प्रत्येक व्यक्ति की एक व्यक्तिगत पृष्ठभूमि होती है। कोई पायथन से आ सकता है, कोई पर्ल से आ सकता है, और वे भाषा के विभिन्न पहलुओं से आश्चर्यचकित हो सकते हैं। फिर वे मेरे पास आते हैं और कहते हैं, 'मैं भाषा की इस विशेषता से हैरान था, इसलिए रूबी कम से कम आश्चर्य के सिद्धांत का उल्लंघन करती है।' रुकना। रुकना। कम से कम आश्चर्य का सिद्धांत सिर्फ आपके लिए नहीं है। कम से कम आश्चर्य का सिद्धांत मतलब कम से कम 'मेरा' आश्चर्य का सिद्धांत। और इसका अर्थ है रूबी को बहुत अच्छी तरह से सीखने के बाद कम से कम आश्चर्य का सिद्धांत। उदाहरण के लिए, रूबी को डिजाइन करना शुरू करने से पहले मैं एक सी ++ प्रोग्रामर था। मैंने विशेष रूप से दो या तीन वर्षों के लिए C++ में प्रोग्राम किया। और सी ++ प्रोग्रामिंग के दो साल बाद, यह अभी भी मुझे आश्चर्यचकित करता है।"

रूबी वस्तु-उन्मुख है: प्रत्येक मान एक वस्तु है, जिसमें कक्षाएं और प्रकार के उदाहरण शामिल हैं, जिन्हें कई अन्य भाषाएँ आदिम (जैसे कि पूर्णांक (कंप्यूटर विज्ञान), बूलियन्स, और नल पॉइंटर) के रूप में निर्दिष्ट करती हैं। चर हमेशा वस्तुओं के संदर्भ रखते हैं। प्रत्येक फ़ंक्शन (प्रोग्रामिंग) एक विधि (प्रोग्रामिंग) है और विधियों को हमेशा किसी वस्तु पर बुलाया जाता है। शीर्ष स्तर के दायरे में परिभाषित तरीके ऑब्जेक्ट क्लास के तरीके बन जाते हैं। चूंकि यह वर्ग हर दूसरे वर्ग का पूर्वज है, इसलिए किसी भी वस्तु पर ऐसी विधियों को बुलाया जा सकता है। वे वैश्विक प्रक्रियाओं के रूप में प्रभावी रूप से सेवा करते हुए, सभी क्षेत्रों में भी दिखाई दे रहे हैं। रूबी गतिशील प्रेषण, मिक्सिन्स और सिंगलटन विधियों के साथ वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) का समर्थन करती है (कक्षा पर परिभाषित होने के बजाय एकल उदाहरण (कंप्यूटर विज्ञान) से संबंधित और परिभाषित)। हालांकि रूबी एकाधिक वंशानुक्रम का समर्थन नहीं करती है, कक्षाएं मिश्रण के रूप में मॉड्यूल (प्रोग्रामिंग) आयात कर सकती हैं।

रूबी को बहु-प्रतिमान प्रोग्रामिंग भाषा के रूप में वर्णित किया गया है: यह प्रक्रियात्मक प्रोग्रामिंग की अनुमति देता है (वर्गों के बाहर कार्यों/चर को परिभाषित करना उन्हें जड़ का हिस्सा बनाता है, 'स्वयं' ऑब्जेक्ट), ऑब्जेक्ट ओरिएंटेशन (सब कुछ एक ऑब्जेक्ट है) या वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)यह अनाम कार्य, क्लोजर (कंप्यूटर विज्ञान), और निरंतरताएं हैं; बयानों में सभी मूल्य हैं, और कार्य अंतिम मूल्यांकन लौटाते हैं)। इसमें आत्मनिरीक्षण (कंप्यूटर विज्ञान), प्रतिबिंब (कंप्यूटर विज्ञान) और मेटाप्रोग्रामिंग के साथ-साथ दुभाषिया-आधारित थ्रेड (कंप्यूटर विज्ञान) के लिए समर्थन है। रूबी फीचर टाइप सिस्टम, और पैरामीट्रिक बहुरूपता का समर्थन करता है।

रूबी एफएक्यू के अनुसार, सिंटैक्स पर्ल के समान है और शब्दार्थ स्मॉलटॉक | स्मॉलटाक के समान है, लेकिन डिजाइन दर्शन पायथन (प्रोग्रामिंग भाषा) | पायथन से बहुत अलग है।

सुविधाएँ

 * वंशानुक्रम (कंप्यूटर विज्ञान), मिश्रण और मेटाक्लासेस के साथ पूरी तरह से वस्तु-उन्मुख * डायनामिक टाइपिंग और बतख टाइपिंग
 * सब कुछ एक अभिव्यक्ति (प्रोग्रामिंग) है (यहां तक ​​​​कि कथन (प्रोग्रामिंग)) और सब कुछ अनिवार्य प्रोग्रामिंग (यहां तक ​​​​कि घोषणा (कंप्यूटर विज्ञान)) निष्पादित किया जाता है।
 * संक्षिप्त और लचीला वाक्य रचना जो सिंटैक्टिक शोर को कम करता है और डोमेन-विशिष्ट भाषाओं के लिए नींव के रूप में कार्य करता है * डायनेमिक रिफ्लेक्शन (कंप्यूटर साइंस) और डायनेमिक प्रोग्रामिंग लैंग्वेज # मेटाप्रोग्रामिंग की सुविधा के लिए ऑब्जेक्ट्स का ऑब्जेक्ट रनटाइम परिवर्तन * क्लोजर (कंप्यूटर साइंस), इटरेटर और जेनरेटर (कंप्यूटर साइंस), रूबी सिंटैक्स # ब्लॉक और इटरेटर के साथ * गतिशील सरणी, साहचर्य सरणी, नियमित अभिव्यक्ति और प्रतीक (लिस्प) के लिए शाब्दिक अंकन
 * स्ट्रिंग्स में एम्बेडिंग कोड (वैरिएबल इंटरपोलेशन)
 * व्यतिक्रम तर्क
 * वेरिएबल स्कोप के चार स्तर (वैश्विक चर, वर्ग चर, उदाहरण चर और लोकल वेरिएबल) जिसे सिगिल (कंप्यूटर प्रोग्रामिंग) या उसके अभाव में दर्शाया गया है
 * कचरा संग्रह (कंप्यूटर विज्ञान)
 * प्रथम श्रेणी निरंतरता
 * सख्त बूलियन निहित प्रकार के रूपांतरण नियम (सब कुछ सत्य है सिवाय  तथा  )
 * एक्सेप्शन हेंडलिंग
 * ऑपरेटर ओवरलोडिंग * परिमेय संख्याओं, जटिल संख्याओं और मनमाना-परिशुद्धता अंकगणित के लिए अंतर्निहित समर्थन
 * कस्टम प्रेषण व्यवहार (के माध्यम से  तथा  )
 * नेटिव थ्रेड (कंप्यूटर साइंस) और कोऑपरेटिव फाइबर (कंप्यूटर साइंस) (फाइबर एक 1.9/YARV फीचर हैं)
 * यूनिकोड और कई कैरेक्टर एनकोडिंग के लिए समर्थन।
 * नेटिव प्लग-इन (कंप्यूटिंग)| प्लग-इन एपीआई इन सी (प्रोग्रामिंग भाषा)
 * इंटरएक्टिव रूबी शेल, एक इंटरैक्टिव कमांड-लाइन दुभाषिया जिसका उपयोग कोड को जल्दी से परीक्षण करने के लिए किया जा सकता है (रीड-इवल-प्रिंट लूप)
 * RubyGems के माध्यम से केंद्रीकृत पैकेज प्रबंधन
 * सभी प्रमुख प्लेटफार्मों पर लागू किया गया
 * YAML, JSON, XML, कॉमन गेटवे इंटरफ़ेस, OpenSSL, HTTP, FTP, RSS, कर्स (प्रोग्रामिंग लाइब्रेरी), zlib और Tk के लिए मॉड्यूल सहित बड़े मानक पुस्तकालय * अभी-अभी संकलन

सिंटेक्स
रूबी का सिंटैक्स मोटे तौर पर पर्ल और पायथन (प्रोग्रामिंग लैंग्वेज) के समान है। क्लास और मेथड डेफिनिशन को कीवर्ड द्वारा सिग्नल किया जाता है, जबकि कोड ब्लॉक को कीवर्ड या ब्रेसेस द्वारा परिभाषित किया जा सकता है। पर्ल के विपरीत, चर अनिवार्य रूप से एक सिगिल (कंप्यूटर प्रोग्रामिंग) के साथ उपसर्ग नहीं होते हैं। जब उपयोग किया जाता है, तो सिगिल चर के दायरे के शब्दार्थ को बदल देता है। व्यावहारिक उद्देश्यों के लिए अभिव्यक्ति (प्रोग्रामिंग) और कथन (प्रोग्रामिंग) के बीच कोई अंतर नहीं है। पंक्ति विराम महत्वपूर्ण हैं और एक बयान के अंत के रूप में लिया जाता है; अल्पविराम का समान रूप से उपयोग किया जा सकता है। पायथन के विपरीत, इंडेंटेशन महत्वपूर्ण नहीं है।

पायथन और पर्ल से एक अंतर यह है कि रूबी अपने सभी उदाहरण चर को पूरी तरह से कक्षा में निजी रखती है और केवल उन्हें एक्सेसर विधियों के माध्यम से उजागर करती है (, , आदि।)। सी ++ या जावा (प्रोग्रामिंग भाषा) जैसी अन्य भाषाओं के गेट्टर और सेटर विधियों के विपरीत, रूबी में एक्सेसर विधियों को मेटाप्रोग्रामिंग के माध्यम से कोड की एक पंक्ति के साथ बनाया जा सकता है; हालाँकि, एक्सेसर विधियाँ C++ और Java के पारंपरिक फैशन में भी बनाई जा सकती हैं। चूंकि इन विधियों के आह्वान के लिए कोष्ठकों के उपयोग की आवश्यकता नहीं होती है, कॉलिंग कोड की एक पंक्ति को संशोधित किए बिना या C Sharp (प्रोग्रामिंग भाषा) के समान कार्यक्षमता प्राप्त करने के लिए किसी भी रीफैक्टरिंग को किए बिना, एक आवृत्ति चर को पूर्ण फ़ंक्शन में बदलना तुच्छ है। |C# और VB.NET गुण सदस्य।

पायथन के संपत्ति विवरणक समान हैं, लेकिन विकास प्रक्रिया में व्यापार-बंद के साथ आते हैं। यदि कोई सार्वजनिक रूप से उजागर उदाहरण चर का उपयोग करके पायथन में शुरू होता है, और बाद में एक संपत्ति वर्णनकर्ता के माध्यम से उजागर किए गए एक निजी उदाहरण चर का उपयोग करने के लिए कार्यान्वयन को बदलता है, तो कक्षा के आंतरिक कोड को सार्वजनिक संपत्ति के बजाय निजी चर का उपयोग करने के लिए समायोजित करने की आवश्यकता हो सकती है।. रूबी का डिज़ाइन सभी उदाहरण चर को निजी होने के लिए बाध्य करता है, लेकिन घोषित करने का एक सरल तरीका भी प्रदान करता है  तथा   तरीके। यह इस विचार को ध्यान में रखते हुए है कि रूबी में, कक्षा के बाहर से कक्षा के आंतरिक सदस्यों तक सीधे पहुंच नहीं होती है; बल्कि, कोई कक्षा को संदेश भेजता है और प्रतिक्रिया प्राप्त करता है।

मैट्स का रूबी दुभाषिया
मूल रूबी दुभाषिया (कंप्यूटर सॉफ्टवेयर) को अक्सर रूबी एमआरआई | मैट्स रूबी इंटरप्रेटर या एमआरआई के रूप में संदर्भित किया जाता है। यह कार्यान्वयन सी में लिखा गया है और अपनी रूबी-विशिष्ट वर्चुअल मशीन का उपयोग करता है।

मानकीकृत और सेवानिवृत्त रूबी 1.8 रूबी एमआरआई को सी (प्रोग्रामिंग लैंग्वेज) में सिंगल-पास इंटरप्रेटेड लैंग्वेज के रूप में लिखा गया था।

रूबी 1.9 के साथ शुरू, और रूबी 2.x और इसके बाद के संस्करण के साथ जारी, आधिकारिक रूबी दुभाषिया YARV (फिर भी एक और रूबी वीएम) रहा है, और इस कार्यान्वयन ने एमआरआई के पिछले रिलीज में उपयोग की जाने वाली धीमी आभासी मशीन को हटा दिया है।

वैकल्पिक कार्यान्वयन
, रूबी के कई वैकल्पिक कार्यान्वयन हैं, जिनमें JRuby, Rubinius और mruby शामिल हैं। प्रत्येक एक अलग दृष्टिकोण लेता है, JRuby और Rubinius समय-समय पर संकलन प्रदान करते हैं और mruby भी समय-समय पर संकलन प्रदान करते हैं।

रूबी के तीन प्रमुख वैकल्पिक कार्यान्वयन हैं:


 * JRuby, एक मिश्रित जावा (प्रोग्रामिंग भाषा) और रूबी कार्यान्वयन जो जावा वर्चुअल मशीन पर चलता है। JRuby वर्तमान में रूबी 2.5 को लक्षित करता है।
 * TruffleRuby, GraalVM के साथ Truffle भाषा कार्यान्वयन ढांचे का उपयोग करते हुए जावा कार्यान्वयन
 * रूबिनियस, एक C++ बायटेकोड वर्चुअल मशीन जो रनटाइम पर मशीन कोड को संकलित करने के लिए LLVM का उपयोग करती है। बायटेकोड कंपाइलर और अधिकांश कोर क्लास शुद्ध रूबी में लिखे गए हैं। रूबिनियस वर्तमान में रूबी 2.3.1 को लक्षित करता है।

अन्य रूबी कार्यान्वयन में शामिल हैं:


 * मैग्लेव (सॉफ्टवेयर), एक स्मॉलटाक कार्यान्वयन जो जेमटॉक सिस्टम्स के जेमस्टोन (डेटाबेस) पर चलता है। जेमस्टोन/एस वीएम
 * mruby, लुआ (प्रोग्रामिंग भाषा) के समान नस में सी कोड में एम्बेड करने के लिए डिज़ाइन किया गया एक कार्यान्वयन। यह वर्तमान में युकिहिरो मात्सुमोतो और अन्य द्वारा विकसित किया जा रहा है
 * आरजीएसएस, या रूबी गेम स्क्रिप्टिंग सिस्टम, एक प्रोप्रायटरी सॉफ्टवेयर कार्यान्वयन है जिसका प्रयोग आरपीजी मेकर श्रृंखला सॉफ्टवेयर द्वारा गेम डिजाइन और आरपीजी मेकर इंजन के संशोधन के लिए किया जाता है।
 * julializer, रूबी से जूलिया (प्रोग्रामिंग भाषा) का एक ट्रांसपिलर (आंशिक)। इसका उपयोग बड़े स्पीडअप के लिए किया जा सकता है उदा। रूबी या JRuby कार्यान्वयन (केवल संख्यात्मक कोड के लिए उपयोगी हो सकता है)। * पुखराज (रूबी), पायथन (प्रोग्रामिंग भाषा) में लिखा गया एक रूबी कार्यान्वयन
 * ओपल (रूबी), एक वेब-आधारित दुभाषिया जो रूबी को जावास्क्रिप्ट में संकलित करता है

अन्य अब मृत रूबी कार्यान्वयन थे:
 * MacRuby, ऑब्जेक्टिव-सी रनटाइम पर एक macOS कार्यान्वयन। इसके आईओएस समकक्ष को रूबीमोशन कहा जाता है
 * आयरन रूबी .NET फ्रेमवर्क पर एक कार्यान्वयन
 * कार्डिनल, तोता आभासी मशीन के लिए एक कार्यान्वयन
 * रूबी एंटरप्राइज़ संस्करण, जिसे अक्सर री के रूप में संक्षिप्त किया जाता है, रेल परियोजनाओं पर बड़े पैमाने पर रूबी को संभालने के लिए अनुकूलित एक कार्यान्वयन
 * HotRuby, रूबी प्रोग्रामिंग भाषा का एक जावास्क्रिप्ट और ActionScript कार्यान्वयन

रूबी कार्यान्वयन की परिपक्वता को रूबी ऑन रेल्स (रेल) ढांचे को चलाने की उनकी क्षमता से मापा जाता है, क्योंकि यह कई रूबी-विशिष्ट सुविधाओं को लागू करने और उपयोग करने के लिए जटिल है। वह बिंदु जब कोई विशेष कार्यान्वयन इस लक्ष्य को प्राप्त करता है, उसे रेल विलक्षणता कहा जाता है। संदर्भ कार्यान्वयन, JRuby, और Rubinius सभी एक उत्पादन वातावरण में अपरिवर्तित रेल चलाने में सक्षम हैं।

प्लेटफार्म समर्थन
मात्सुमोतो ने मूल रूप से रूबी को BSD|4.3BSD-आधारित Sony NEWS|Sony NEWS-OS 3.x पर विकसित किया था, लेकिन बाद में अपने काम को SunOS 4.x और अंत में Linux में स्थानांतरित कर दिया। 1999 तक, रूबी को कई अलग-अलग ऑपरेटिंग सिस्टम पर काम करने के लिए जाना जाता था। आधुनिक रूबी संस्करण और कार्यान्वयन सभी प्रमुख डेस्कटॉप, मोबाइल और सर्वर-आधारित ऑपरेटिंग सिस्टम पर उपलब्ध हैं। रूबी को Jelastic, Heroku, Google Cloud Platform और अन्य जैसे कई क्लाउड होस्टिंग प्लेटफ़ॉर्म पर भी सपोर्ट किया जाता है।

रूबी संस्करण प्रबंधक और आरबीईएनवी जैसे उपकरण, एक मशीन पर कई रूबी संस्करणों की स्थापना और विभाजन की सुविधा प्रदान करते हैं, और कई 'रत्नसेट'।

भंडार और पुस्तकालय
RubyGems, Ruby का पैकेज मैनेजर है। रूबी पैकेज को रत्न कहा जाता है और इसे कमांड लाइन के माध्यम से स्थापित किया जा सकता है। अधिकांश रत्न पुस्तकालय हैं, हालांकि कुछ मौजूद हैं जो अनुप्रयोग हैं, जैसे एकीकृत विकास पर्यावरण। RubyGems.org पर 100,000 से अधिक रूबी रत्न होस्ट किए गए हैं। गिटहब पर कई नए और मौजूदा रूबी पुस्तकालयों की मेजबानी की जाती है, जो एक सेवा है जो गिट (सॉफ्टवेयर) के लिए संशोधन नियंत्रण भंडार होस्टिंग प्रदान करती है।

रूबी एप्लीकेशन आर्काइव, जिसने रूबी प्रोग्रामिंग के लिए एप्लिकेशन, प्रलेखन और पुस्तकालयों की मेजबानी की, को 2013 तक बनाए रखा गया, जब इसका कार्य रूबीजम्स में स्थानांतरित कर दिया गया।

यह भी देखें

 * प्रोग्रामिंग भाषाओं की तुलना
 * मेटास्प्लोइट प्रोजेक्ट
 * क्यों (मार्मिक) रूबी के लिए गाइड
 * क्रिस्टल (प्रोग्रामिंग भाषा)
 * रूबी ऑन रेल्स

अग्रिम पठन




बाहरी संबंध

 * Ruby documentation
 * Ruby documentation