रूबी (प्रोग्रामिंग लैंग्वेज)
This article's lead section may be too technical for most readers to understand.June 2022) (Learn how and when to remove this template message) ( |
Paradigm | Multi-paradigm: functional, imperative, object-oriented, reflective |
---|---|
द्वारा डिज़ाइन किया गया | Yukihiro Matsumoto |
Developer | Yukihiro Matsumoto, et al. |
पहली प्रस्तुति | 1995 |
Stable release | 3.1.3[1]
/ 24 November 2022 |
टाइपिंग अनुशासन | Duck, dynamic, strong |
स्कोप | Lexical, sometimes dynamic |
कार्यान्वयन भाषा | C |
ओएस | Cross-platform |
लाइसेंस | Ruby License |
फ़ाइल नाम एक्सटेंशनएस | .rb |
वेबसाइट | ruby-lang.org |
Major implementations | |
Ruby MRI, TruffleRuby, YARV, Rubinius, MagLev, JRuby, MacRuby, RubyMotion, Mruby, IronRuby | |
Influenced by | |
Ada,[2] Basic,[3] C++,[2] CLU,[4] Dylan,[4] Eiffel,[2] Lisp,[4] Lua, Perl,[4] Python,[4] Smalltalk[4] | |
Influenced | |
Clojure, CoffeeScript, Crystal, D, Elixir, Groovy, Ioke,[5] Julia,[6] Mirah, Nu,[7] Ring,[8] Rust,[9] Swift[10] | |
|
रूबी एक व्याख्या की गई , उच्च-स्तरीय, सामान्य-उद्देश्य वाली क्रमादेशन (प्रोग्रामिंग) भाषा है जो कई क्रमादेशन प्रतिमानों का समर्थन करती है। इसे क्रमादेशन उत्पादकता और सरलता पर जोर देने के साथ अभिकल्पना किया गया था। रूबी में, सब कुछ एक वस्तु है, जिसमें आदिम तथ्य प्रकार शामिल हैं। यह 1990 के दशक के मध्य में जापान में युकीहिरो "मात्ज़" मात्सुमोतो द्वारा विकसित किया गया था।
रूबी गतिशील रूप से टाइप की जाती है और कचरा संग्रह और समय-समय पर संकलन का उपयोग करती है। यह प्रक्रियात्मक क्रमदेशन,वस्तु-उन्मुख क्रमदेशन सहित कई क्रमदेशन प्रतिमानों का समर्थन करता है। निर्माता के अनुसार, रूबी Perl, Smalltalk, Eiffel , Ada , BASIC, Java और Lisp से प्रभावित थी।[11][3]
इतिहास
प्रारंभिक अवधारणा
मात्सुमोतो ने कहा है कि रूबी की कल्पना 1993 में की गई थी। रूबी-टॉक प्रेषण सूची के 1999 के एक पद में, उन्होंने भाषा के बारे में अपने कुछ शुरुआती विचारों का वर्णन किया है:[12]
मैं अपने सहयोगी के साथ वस्तु-उन्मुख पटकथा भाषा की संभावना के बारे में बात कर रहा था। मैं पर्ल (पर्ल 4, पर्ल 5 नहीं) जानता था, लेकिन मुझे यह वास्तव में पसंद नहीं आया, क्योंकि इसमें खिलौना भाषा की गंध थी (यह अभी भी है)। वस्तु-उन्मुख भाषा बहुत ही आशाजनक लग रही थी। मैं तब पायथन को जानता था। लेकिन मुझे यह पसंद नहीं आया, क्योंकि मुझे नहीं लगा कि यह एक वास्तविक वस्तु-उन्मुख भाषा थी - OO सुविधाएँ भाषा में ऐड-ऑन दिखाई देती हैं। 15 वर्षों के लिए एक भाषा उन्मादी और OO प्रशंसक के रूप में, मैं वास्तव में एक वास्तविक वस्तु-उन्मुख, उपयोग में आसान पटकथा भाषा चाहता था। मैंने खोजा लेकिन एक नहीं मिला। इसलिए मैंने इसे बनाने का फैसला किया।
मात्सुमोतो ने रूबी के प्रारुप का वर्णन इसके मूल में एक साधारण लिस्प (प्रोग्रामिंग लैंग्वेज) भाषा की तरह किया है, जिसमें Smalltalk की तरह एक वस्तु प्रणाली, उच्च-क्रम के कार्यों से प्रेरित खंड और पर्ल की तरह व्यावहारिक उपयोगिता है।[13]
भाषा के लिए कोई भी कोड लिखे जाने से पहले 24 फरवरी,1993 को मात्सुमोतो और कीजु इशित्सुका के बीच एक ऑनलाइन चैट सत्र के दौरान "रूबी" नाम की उत्पत्ति हुई थी।[14]प्रारंभ में दो नाम प्रस्तावित थे: "कोरल" और "रूबी"। मात्सुमोतो ने इशित्सुका को बाद में एक ई-मेल में बाद वाले को चुना।[15]मात्सुमोतो ने बाद में "रूबी" नाम चुनने में एक कारक का उल्लेख किया - यह उनके एक सहयोगी का जन्मस्थान था।[16][17]
प्रारंभिक विज्ञप्ति
रूबी 0.95 की पहली सार्वजनिक विज्ञप्ति की घोषणा 21 दिसंबर, 1995 को जापानी घरेलू समाचार समूहों पर की गई थी।[18][19]इसके बाद, दो दिनों में रूबी के तीन और संस्करण जारी किए गए।[14]रिलीज जापानी भाषा के लॉन्च के साथ हुई। जापानी-भाषा रूबी-सूची प्रेषण सूची, जो नई भाषा के लिए पहली प्रेषण सूची थी।
विकास के इस चरण में पहले से मौजूद रूबी के बाद के विज्ञप्ति में परिचित सुविधाओं में से कई थे, जिनमें वस्तु-उन्मुख प्रारुप, विरासत (इनहेरिटेंस) वाली कक्षाएं, मिक्सिन्स, इटरेटर्स, क्लोजर, अपवाद प्रहस्तन (एक्सेप्शन हैंडलिंग) और अपशिष्ट संग्रह शामिल हैं।[20]
1995 में रूबी 0.95 के जारी होने के बाद, रूबी के कई स्थिर संस्करण अगले वर्षों में जारी किए गए:
- रूबी 1.0: 25 दिसंबर, 1996[14]
- रूबी 1.2: दिसंबर 1998
- रूबी 1.4: अगस्त 1999
- रूबी 1.6: सितंबर 2000
1997 में रूबी के बारे में पहला लेख वेब पर प्रकाशित हुआ था। उसी वर्ष, मात्सुमोतो को netlab.jp द्वारा एक पूर्णकालिक विकासक (डेवलपर) के रूप में रूबी पर काम करने के लिए नियुक्त किया गया था।[14]
1998 में, मात्सुमोतो द्वारा रूबी अनुप्रयोग पुरालेख (एप्लिकेशन आर्काइव) को रूबी के लिए एक सरल अंग्रेजी भाषा के मुखपृष्ठ के साथ प्रमोचन किया गया था।[14]
1999 में, पहली अंग्रेजी भाषा की प्रेषण सूची रूबी-टॉक शुरू हुई, जिसने जापान के बाहर भाषा में बढ़ती रुचि का संकेत दिया।[21]इसी वर्ष, मात्सुमोतो और कीजू इशित्सुका ने रूबी पर पहली पुस्तक लिखी, द वस्तु-उन्मुख पटकथा भाषा रूबी (オブジェクト指向スクリプト言語 Ruby), जो अक्टूबर 1999 में जापान में प्रकाशित हुई थी। इसका पालन 2000 के दशक की शुरुआत में लगभग किया जाएगा। रूबी पर 20 किताबें जापानी भाषा में प्रकाशित होंगी। .[14]
2000 तक, रूबी जापान में पायथन से अधिक लोकप्रिय थी।[22]सितंबर 2000 में, पहली अंग्रेजी भाषा की किताब क्रमदेशन रूबी छपी थी, जिसे बाद में जनता के लिए स्वतंत्र रूप से जारी किया गया था, जिससे अंग्रेजी बोलने वालों के बीच रूबी को अपनाने का विस्तार हुआ। 2002 की शुरुआत में, अंग्रेजी भाषा की रूबी-टॉक प्रेषण सूची को जापानी भाषा की रूबी-सूची की तुलना में अधिक संदेश प्राप्त हो रहे थे, जो गैर-जापानी भाषी दुनिया में रूबी की बढ़ती लोकप्रियता को दर्शाता है।
रूबी 1.8 और 1.9
रूबी 1.8 को शुरू में अगस्त 2003 में जारी किया गया था, यह लंबे समय तक स्थिर था, और जून 2013 को सेवानिवृत्त हो गया था।[23]हालांकि बहिष्कृत, इसके आधार पर अभी भी कोड है। रूबी 1.8 रूबी 1.9 के साथ केवल आंशिक रूप से संगत है।
रूबी 1.8 कई उद्योग मानकों का विषय रहा है। रूबी के लिए भाषा विनिर्देशों को जापानी औद्योगिक मानक समिति (JISC) और फिर अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) को प्रस्तुत करने के लिए सूचना-प्रौद्योगिकी संवर्धन एजेंसी (जापान सरकार की एक एजेंसी) के ओपन स्टैंडर्ड प्रमोशन सेंटर द्वारा विकसित किया गया था। इसे 2011 में एक जापानी औद्योगिक मानक (JIS X 3017) [24]और 2012 में एक अंतरराष्ट्रीय मानक (ISO/IEC 30170)।[25][26]
2005 के आसपास, रूबी भाषा में रुचि रूबी ऑन रेल्स, रूबी में लिखी गई एक वेब रूपरेखा के साथ मिलकर बढ़ी। रूबी के बारे में बढ़ती जागरूकता का श्रेय अक्सर रेल को दिया जाता है।[27]
रूबी 1.9.3 के साथ प्रभावी, 31 अक्टूबर, 2011 को जारी किया गया,[28]रूबी ने रूबी अनुज्ञप्ति और GPL के तहत दोहरे अनुज्ञप्ति वाले होने से रूबी अनुज्ञप्ति और दो-खंड बीएसडी अनुज्ञप्ति के तहत दोहरे अनुज्ञप्ति होने के लिए स्विच किया।[29]1.9 को अपनाने की गति 1.8 के परिवर्तनों से धीमी हो गई थी जिसके लिए कई लोकप्रिय तृतीय पक्ष के रत्नों को फिर से लिखने की आवश्यकता थी। रूबी 1.9 ने 1.8 श्रृंखला में कई महत्वपूर्ण बदलाव पेश किए। उदाहरणों में शामिल:[30]
- स्थानीय चर को ब्लॉक करें (वे चर जो उस ब्लॉक के लिए स्थानीय हैं जिसमें उन्हें घोषित किया गया है)
- एक अतिरिक्त lambda syntax:
f = ->(a,b) { puts a + b }
- प्रतीक कुंजियों के लिए कोलन का उपयोग करके एक अतिरिक्त Hash तालिका शाब्दिक सिंटैक्स:
{symbol_key: "value"} == {:symbol_key => "value"}
- प्रति-स्ट्रिंग वर्ण कूटलेखन (एन्कोडिंग) समर्थित हैं
- नया सॉकेट API (IPv6 समर्थन)
require_relative
आयात सुरक्षा
रूबी 2
रूबी 2.0 का उद्देश्य रूबी 1.9.3 के साथ पूरी तरह से पिछड़ा संगत होना था। 24 फरवरी, 2013 को आधिकारिक 2.0.0 विमोचन के अनुसार, केवल पांच ज्ञात (मामूली)असंगतियां थीं।[31]रूबी 2.0 ने कई नई सुविधाएँ जोड़ीं, जिनमें शामिल हैं:
- विधि मूलशब्द (कीवर्ड) तर्क,
- एक नया तरीका,
Module#prepend
, एक वर्ग का विस्तार करने के लिए, - प्रतीकों की एक सरणी बनाने के लिए एक नया शाब्दिक,
- अंकगणित के आलसी मूल्यांकन के लिए नया API, और
- वस्तुओं को हैश में बदलने के लिए #to_h का उपयोग करने का एक नया सम्मेलन।[32]
2.1.0 से शुरू होकर, रूबी की संस्करण नीति शब्दार्थगत संस्करण के समान हो गई।[33]
रूबी 2.2.0 में चालवर्धी , बग फिक्स और पुस्तकालय अद्यतन शामिल हैं और कुछ बहिष्कृत APIs को हटा देता है। सबसे विशेष रूप से, रूबी 2.2.0 स्मृति प्रबंधन में बदलाव पेश करता है – एक वृद्धिशील अपशिष्ट संग्राहक, प्रतीकों के अपशिष्ट संग्रह के लिए समर्थन और जेमलोक के खिलाफ सीधे संकलन करने का विकल्प। इसमें system () और spawn () के साथ vfork (2) का प्रयोग करने के लिए प्रयोगात्मक समर्थन भी शामिल है, और यूनिकोड 7.0 विनिर्देश के लिए अतिरिक्त समर्थन शामिल है। संस्करण 2.2.1 के बाद से,[34] PowerPC64 पर रूबी MRI के प्रदर्शन में सुधार हुआ था।[35][36][37]जिन सुविधाओं को अप्रचलित या हटा दिया गया था उनमें callcc, DL library, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application और साथ ही विभिन्न C API कार्य शामिल हैं।[38]
रूबी 2.3.0 में कई प्रदर्शन सुधार, अद्यतन और बग फिक्स शामिल हैं, जिसमें Proc#call, Socket और IO अपवाद मूलशब्द का उपयोग, Thread# नाम प्रबंधन, व्यतिक्रम निष्क्रिय Net::FTP कनेक्शन, और रेक को stdlib से हटाया जा रहा है।[39]अन्य उल्लेखनीय परिवर्तनों में शामिल हैं:
- स्ट्रिंग ऑपरेशंस में परिणामस्वरूप बड़े प्रदर्शन में वृद्धि के साथ व्यतिक्रम रूप से सभी स्ट्रिंग शाब्दिक को जमे हुए के रूप में चिह्नित करने की क्षमता।[40]* केवल चाबियों के बजाय कुंजी/मान जोड़े की प्रत्यक्ष जांच की अनुमति देने के लिए हैश तुलना।
- एक नया सुरक्षित मार्गनिर्देशन संचालक
&.
जो निल प्रबंधन को आसान बना सकता है (उदाहरण के लिएif obj && obj.foo && obj.foo.bar
, हम प्रयोग कर सकते हैंif obj&.foo&.bar
). - did_you_mean रत्न अब व्यतिक्रम रूप से समूह किया गया है और शुरुआत पर स्वचालित रूप से NameError या NoMethodError पर समान नाम मिलानों का सुझाव देने के लिए आवश्यक है।
- गहरे नेस्टेड मानों को आसानी से निकालने के लिए हैश # डिग और ऐरे # डिग (उदाहरण के लिए दिया गया
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
, फू बाज का मूल्य अबprofile.dig(:social, :wikipedia, :name)
) द्वारा प्राप्त किया जा सकता है । .grep_v(regexp)
जो अन्य नई सुविधाओं के साथ-साथ दिए गए नियमित अभिव्यक्ति के सभी नकारात्मक उदाहरणों से मेल खाएगा।
रूबी 2.4.0 में हैश टेबल, Array#max, Array#min और उदाहरण चर अभिगम (इंस्टेंस वेरिएबल एक्सेस) में प्रदर्शन सुधार शामिल हैं।[41]अन्य उल्लेखनीय परिवर्तनों में शामिल हैं:
- 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 में क्रिसमस के दिन विज्ञप्ति किया गया था।[42]इसे रूबी 3x3 के रूप में जाना जाता है जिसका अर्थ है कि रूबी 2.0 की तुलना में रूबी 3.0 में कार्यक्रम तीन गुना तेजी से चलेंगे।[43] और कुछ ने पहले से ही 2 से 3 तक सड़क पर मध्यवर्ती विज्ञप्ति में लागू किया था। 3x3 को प्राप्त करने के लिए, रूबी 3 MJIT के साथ आता है, और बाद में YJIT, जस्ट-इन-टाइम संकलनकर्ता (कंपाइलर्स), कार्यक्रम को तेज़ बनाने के लिए, हालांकि उन्हें प्रायोगिक के रूप में वर्णित किया गया है और बने रहते हैं व्यतिक्रम रूप से अक्षम (रनटाइम पर झंडे द्वारा सक्षम)।
रूबी 3.0 का एक अन्य लक्ष्य संगामिति (कंप्यूटर साइंस) और दो और उपयोगिताओं फाइबर अनुसूचक , और प्रयोगात्मक रेक्टर लक्ष्य को को सुगम बनाते हैं।[42]रेक्टर हल्का वजन और सूत्र-सुरक्षित है क्योंकि इसे साझा वस्तुओं के बजाय संदेशों का आदान-प्रदान करके प्राप्त किया जाता है।
रूबी 3.0 स्थैतिक कार्यक्रम विश्लेषण के लिए रूबी कार्यक्रमों के प्रकारों का वर्णन करने के लिए RBS भाषा का परिचय देता है।[42]इसे सामान्य रूबी प्रोग्राम से अलग किया जाता है।
रुबी 3.0 में कुछ रचनाक्रम संवर्द्धन और पुस्तकालय परिवर्तन भी हैं।[42]
रूबी 3.1 को 2021 में क्रिसमस के दिन विज्ञप्ति किया गया था।[44]इसमें YJIT शामिल है, जो वास्तविक दुनिया के व्यावसायिक अनुप्रयोगों के प्रदर्शन को बढ़ाने के लिए Shopify द्वारा विकसित एक नया जस्ट-इन-टाइम कंपाइलर है। एक नया दोषमार्जक (डिबगर) भी शामिल है। इस विज्ञप्ति में कुछ रचनाक्रम संवर्द्धन और अन्य सुधार हैं। FTP, SMTP, IMAP, and POP के लिए संजाल (नेटवर्क लाइब्रेरी) को व्यतिक्रम रत्नों से समूह किए गए रत्नों में ले जाया जाता है। [45]
रूबी 3.2 को 2022 में क्रिसमस के दिन विज्ञप्ति किया गया था। यह एक WASI अंतरापृष्ठ के माध्यम से WebAssembly वातावरण के अंदर चलाने के लिए समर्थन लाता है। नियमित अभिव्यक्ति में कुछ सुधार भी प्राप्त होते हैं, जिसमें कुछ ReDoS हमलों से बचाने के लिए तेज़, मेमोइज़्ड मेल कलन विधि और नियमित अभिव्यक्ति मेल के लिए समनुरूप करने योग्य टाइमआउट शामिल हैं। इस विज्ञप्ति में अतिरिक्त डिबगिंग और रचनाक्रम सुविधाएँ भी शामिल हैं, जिसमें रचनाक्रम सुझाव, साथ ही त्रुटि हाइलाइटिंग शामिल हैं। MJIT संकलनकर्ता को एक मानक लाइब्रेरी मॉड्यूल के रूप में फिर से लागू किया गया है, जबकि YJIT, एक जंग-आधारित JIT संकलनकर्ता अब Linux पर अधिक संरचना का समर्थन करता है।
संस्करणों की तालिका
संस्करण | नवीनतम नन्हा संस्करण | प्रारंभिक विज्ञप्ति की तारीख | समर्थन चरण का अंत | सुरक्षा रखरखाव चरण का अंत |
---|---|---|---|---|
1.0 | NA | 1996-12-25[46] | NA | NA |
1.8 | 1.8.7-p375[47] | 2003-08-04[48] | 2012-06[49] | 2014-07-01[50] |
1.9 | 1.9.3-p551[51] | 2007-12-25[52] | 2014-02-23[53] | 2015-02-23[54] |
2.0 | 2.0.0-p648[55] | 2013-02-24[56] | 2015-02-24[55] | 2016-02-24[55] |
2.1 | 2.1.10[57] | 2013-12-25[58] | 2016-03-30[59][60] | 2017-03-31[61][62] |
2.2 | 2.2.10[63] | 2014-12-25[64] | 2017-03-28[65] | 2018-03-31[62] |
2.3 | 2.3.8[66] | 2015-12-25[67] | 2018-06-20[68] | 2019-03-31[68] |
2.4 | 2.4.10[69] | 2016-12-25[70] | 2019-04-01[71] | 2020-04-01[71] |
2.5 | 2.5.9[72] | 2017-12-25[73] | 2021-04-05[72] | 2021-04-05[72] |
2.6 | 2.6.10[74] | 2018-12-25[75] | 2021-04-05[74] | 2022-04-05[74] |
2.7 | 2.7.6[76] | 2019-12-25[77] | 2022-04-12[78] | TBA |
3.0 | 3.0.4[79] | 2020-12-25[80] | TBA | TBA |
3.1 | 3.1.2[81] | 2021-12-25[44] | TBA | TBA |
Legend: Old version Older version, still maintained Latest version Future release |
शब्दार्थ और दर्शन
मात्सुमोतो ने कहा है कि अच्छे यूजर इंटरफेस डिजाइन के सिद्धांतों का पालन करते हुए रूबी को प्रोग्रामर उत्पादकता और मनोरंजन के लिए डिजाइन किया गया है।[82]2008 में एक Google टेक टॉक में मात्सुमोतो ने आगे कहा, मुझे उम्मीद है कि रूबी दुनिया के हर प्रोग्रामर को उत्पादक बनने और प्रोग्रामिंग का आनंद लेने और खुश रहने में मदद करेगी। वह रूबी भाषा का प्राथमिक उद्देश्य है।[83]उन्होंने जोर देकर कहा कि सिस्टम डिजाइन को कंप्यूटर के बजाय मानव पर जोर देने की जरूरत है:[84]
अक्सर लोग, खासकर कंप्यूटर इंजीनियर, मशीनों पर ध्यान केंद्रित करते हैं। वे सोचते हैं, "ऐसा करने से मशीन तेजी से चलेगी। ऐसा करने से मशीन अधिक प्रभावी ढंग से चलेगी। ऐसा करने से मशीन कुछ कुछ करेगी।" वे मशीनों पर ध्यान केंद्रित कर रहे हैं। लेकिन वास्तव में हमें मनुष्यों पर ध्यान केंद्रित करने की आवश्यकता है कि कैसे मनुष्य प्रोग्रामिंग करने या मशीनों के अनुप्रयोग को संचालित करने की परवाह करते हैं। हम उस्ताद हैं। वे गुलाम हैं।
मात्सुमोतो ने कहा है कि उनका प्राथमिक डिजाइन लक्ष्य प्रोग्रामर के काम को कम करके और संभावित भ्रम को कम करके एक ऐसी भाषा बनाना था जिसका उपयोग करने में उन्हें खुद मज़ा आता था। उन्होंने कहा है कि उन्होंने रूबी के डिजाइन के लिए कम से कम विस्मय का सिद्धांत (पोला) लागू नहीं किया था;[84]मई 2005 में समाचार समूह comp.lang.ruby पर चर्चा में, मात्सुमोतो ने रूबी को पोला से दूर करने का प्रयास किया, यह समझाते हुए कि क्योंकि कोई भी डिज़ाइन विकल्प किसी के लिए आश्चर्यजनक होगा, वह आश्चर्य का मूल्यांकन करने में एक व्यक्तिगत मानक का उपयोग करता है। यदि वह व्यक्तिगत मानक सुसंगत रहता है, तो मानक से परिचित लोगों के लिए कुछ आश्चर्य होगा।[85]
मात्सुमोतो ने एक साक्षात्कार में इसे इस प्रकार परिभाषित किया:[84]
प्रत्येक व्यक्ति की एक व्यक्तिगत पृष्ठभूमि होती है। कोई पायथन से आ सकता है, कोई पर्ल से आ सकता है, और वे भाषा के विभिन्न पहलुओं से आश्चर्यचकित हो सकते हैं। फिर वे मेरे पास आते हैं और कहते हैं, 'मैं भाषा की इस विशेषता से हैरान था, इसलिए रूबी कम से कम आश्चर्य के सिद्धांत का उल्लंघन करती है।' रुकना। रुकना। कम से कम आश्चर्य का सिद्धांत सिर्फ आपके लिए नहीं है। कम से कम आश्चर्य का सिद्धांत मतलब कम से कम 'मेरा' आश्चर्य का सिद्धांत। और इसका अर्थ है रूबी को बहुत अच्छी तरह से सीखने के बाद कम से कम आश्चर्य का सिद्धांत। उदाहरण के लिए, रूबी को डिजाइन करना शुरू करने से पहले मैं एक सी ++ प्रोग्रामर था। मैंने विशेष रूप से दो या तीन वर्षों के लिए C++ में प्रोग्राम किया। और सी ++ प्रोग्रामिंग के दो साल बाद, यह अभी भी मुझे आश्चर्यचकित करता है।
रूबी वस्तु-उन्मुख है: प्रत्येक मान एक वस्तु है, जिसमें कक्षाएं और प्रकार के उदाहरण शामिल हैं, जिन्हें कई अन्य भाषाएँ आदिम (जैसे कि पूर्णांक (कंप्यूटर विज्ञान), बूलियन्स, और नल पॉइंटर) के रूप में निर्दिष्ट करती हैं। चर हमेशा वस्तुओं के संदर्भ रखते हैं। प्रत्येक फ़ंक्शन (प्रोग्रामिंग) एक विधि (प्रोग्रामिंग) है और विधियों को हमेशा किसी वस्तु पर बुलाया जाता है। शीर्ष स्तर के दायरे में परिभाषित तरीके ऑब्जेक्ट क्लास के तरीके बन जाते हैं। चूंकि यह वर्ग हर दूसरे वर्ग का पूर्वज है, इसलिए किसी भी वस्तु पर ऐसी विधियों को बुलाया जा सकता है। वे वैश्विक प्रक्रियाओं के रूप में प्रभावी रूप से सेवा करते हुए, सभी क्षेत्रों में भी दिखाई दे रहे हैं। रूबी गतिशील प्रेषण, मिक्सिन्स और सिंगलटन विधियों के साथ वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) का समर्थन करती है (कक्षा पर परिभाषित होने के बजाय एकल उदाहरण (कंप्यूटर विज्ञान) से संबंधित और परिभाषित)। हालांकि रूबी एकाधिक वंशानुक्रम का समर्थन नहीं करती है, कक्षाएं मिश्रण के रूप में मॉड्यूल (प्रोग्रामिंग) आयात कर सकती हैं।
रूबी को बहु-प्रतिमान प्रोग्रामिंग भाषा के रूप में वर्णित किया गया है: यह प्रक्रियात्मक प्रोग्रामिंग की अनुमति देता है (वर्गों के बाहर कार्यों/चर को परिभाषित करना उन्हें जड़ का हिस्सा बनाता है, 'स्वयं' ऑब्जेक्ट), ऑब्जेक्ट ओरिएंटेशन (सब कुछ एक ऑब्जेक्ट है) या वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)यह अनाम कार्य, क्लोजर (कंप्यूटर विज्ञान), और निरंतरताएं हैं; बयानों में सभी मूल्य हैं, और कार्य अंतिम मूल्यांकन लौटाते हैं)। इसमें आत्मनिरीक्षण (कंप्यूटर विज्ञान), प्रतिबिंब (कंप्यूटर विज्ञान) और मेटाप्रोग्रामिंग के साथ-साथ दुभाषिया-आधारित थ्रेड (कंप्यूटर विज्ञान) के लिए समर्थन है। रूबी फीचर टाइप सिस्टम, और पैरामीट्रिक बहुरूपता का समर्थन करता है।
रूबी एफएक्यू के अनुसार, सिंटैक्स पर्ल के समान है और शब्दार्थ स्मॉलटॉक | स्मॉलटाक के समान है, लेकिन डिजाइन दर्शन पायथन (प्रोग्रामिंग भाषा) | पायथन से बहुत अलग है।[86]
सुविधाएँ
- वंशानुक्रम (कंप्यूटर विज्ञान), मिश्रण और मेटाक्लासेस के साथ पूरी तरह से वस्तु-उन्मुख[87]* डायनामिक टाइपिंग और बतख टाइपिंग
- सब कुछ एक अभिव्यक्ति (प्रोग्रामिंग) है (यहां तक कि कथन (प्रोग्रामिंग)) और सब कुछ अनिवार्य प्रोग्रामिंग (यहां तक कि घोषणा (कंप्यूटर विज्ञान)) निष्पादित किया जाता है।
- संक्षिप्त और लचीला वाक्य रचना[88]जो सिंटैक्टिक शोर को कम करता है और डोमेन-विशिष्ट भाषाओं के लिए नींव के रूप में कार्य करता है[89]* डायनेमिक रिफ्लेक्शन (कंप्यूटर साइंस) और डायनेमिक प्रोग्रामिंग लैंग्वेज # मेटाप्रोग्रामिंग की सुविधा के लिए ऑब्जेक्ट्स का ऑब्जेक्ट रनटाइम परिवर्तन[90]* क्लोजर (कंप्यूटर साइंस), इटरेटर और जेनरेटर (कंप्यूटर साइंस), रूबी सिंटैक्स # ब्लॉक और इटरेटर के साथ[91]* गतिशील सरणी, साहचर्य सरणी, नियमित अभिव्यक्ति और प्रतीक (लिस्प) के लिए शाब्दिक अंकन
- स्ट्रिंग्स में एम्बेडिंग कोड (वैरिएबल इंटरपोलेशन)
- व्यतिक्रम तर्क
- वेरिएबल स्कोप के चार स्तर (वैश्विक चर, वर्ग चर, उदाहरण चर और लोकल वेरिएबल) जिसे सिगिल (कंप्यूटर प्रोग्रामिंग) या उसके अभाव में दर्शाया गया है
- कचरा संग्रह (कंप्यूटर विज्ञान)
- प्रथम श्रेणी निरंतरता
- सख्त बूलियन निहित प्रकार के रूपांतरण नियम (सब कुछ सत्य है सिवाय
false
तथाnil
) - एक्सेप्शन हेंडलिंग
- ऑपरेटर ओवरलोडिंग[92]* परिमेय संख्याओं, जटिल संख्याओं और मनमाना-परिशुद्धता अंकगणित के लिए अंतर्निहित समर्थन
- कस्टम प्रेषण व्यवहार (के माध्यम से
method_missing
तथाconst_missing
) - नेटिव थ्रेड (कंप्यूटर साइंस) और कोऑपरेटिव फाइबर (कंप्यूटर साइंस) (फाइबर एक 1.9/YARV फीचर हैं)
- यूनिकोड और कई कैरेक्टर एनकोडिंग के लिए समर्थन।
- नेटिव प्लग-इन (कंप्यूटिंग)| प्लग-इन एपीआई इन सी (प्रोग्रामिंग भाषा)
- इंटरएक्टिव रूबी शेल, एक इंटरैक्टिव कमांड-लाइन दुभाषिया जिसका उपयोग कोड को जल्दी से परीक्षण करने के लिए किया जा सकता है (रीड-इवल-प्रिंट लूप)
- RubyGems के माध्यम से केंद्रीकृत पैकेज प्रबंधन
- सभी प्रमुख प्लेटफार्मों पर लागू किया गया
- YAML, JSON, XML, कॉमन गेटवे इंटरफ़ेस, OpenSSL, HTTP, FTP, RSS, कर्स (प्रोग्रामिंग लाइब्रेरी), zlib और Tk के लिए मॉड्यूल सहित बड़े मानक पुस्तकालय[93]* अभी-अभी संकलन
सिंटेक्स
रूबी का सिंटैक्स मोटे तौर पर पर्ल और पायथन (प्रोग्रामिंग लैंग्वेज) के समान है। क्लास और मेथड डेफिनिशन को कीवर्ड द्वारा सिग्नल किया जाता है, जबकि कोड ब्लॉक को कीवर्ड या ब्रेसेस द्वारा परिभाषित किया जा सकता है। पर्ल के विपरीत, चर अनिवार्य रूप से एक सिगिल (कंप्यूटर प्रोग्रामिंग) के साथ उपसर्ग नहीं होते हैं। जब उपयोग किया जाता है, तो सिगिल चर के दायरे के शब्दार्थ को बदल देता है। व्यावहारिक उद्देश्यों के लिए अभिव्यक्ति (प्रोग्रामिंग) और कथन (प्रोग्रामिंग) के बीच कोई अंतर नहीं है।[94][95]पंक्ति विराम महत्वपूर्ण हैं और एक बयान के अंत के रूप में लिया जाता है; अल्पविराम का समान रूप से उपयोग किया जा सकता है। पायथन के विपरीत, इंडेंटेशन महत्वपूर्ण नहीं है।
पायथन और पर्ल से एक अंतर यह है कि रूबी अपने सभी उदाहरण चर को पूरी तरह से कक्षा में निजी रखती है और केवल उन्हें एक्सेसर विधियों के माध्यम से उजागर करती है (attr_writer
, attr_reader
, आदि।)। सी ++ या जावा (प्रोग्रामिंग भाषा) जैसी अन्य भाषाओं के गेट्टर और सेटर विधियों के विपरीत, रूबी में एक्सेसर विधियों को मेटाप्रोग्रामिंग के माध्यम से कोड की एक पंक्ति के साथ बनाया जा सकता है; हालाँकि, एक्सेसर विधियाँ C++ और Java के पारंपरिक फैशन में भी बनाई जा सकती हैं। चूंकि इन विधियों के आह्वान के लिए कोष्ठकों के उपयोग की आवश्यकता नहीं होती है, कॉलिंग कोड की एक पंक्ति को संशोधित किए बिना या C Sharp (प्रोग्रामिंग भाषा) के समान कार्यक्षमता प्राप्त करने के लिए किसी भी रीफैक्टरिंग को किए बिना, एक आवृत्ति चर को पूर्ण फ़ंक्शन में बदलना तुच्छ है। |C# और VB.NET गुण सदस्य।
पायथन के संपत्ति विवरणक समान हैं, लेकिन विकास प्रक्रिया में व्यापार-बंद के साथ आते हैं। यदि कोई सार्वजनिक रूप से उजागर उदाहरण चर का उपयोग करके पायथन में शुरू होता है, और बाद में एक संपत्ति वर्णनकर्ता के माध्यम से उजागर किए गए एक निजी उदाहरण चर का उपयोग करने के लिए कार्यान्वयन को बदलता है, तो कक्षा के आंतरिक कोड को सार्वजनिक संपत्ति के बजाय निजी चर का उपयोग करने के लिए समायोजित करने की आवश्यकता हो सकती है। . रूबी का डिज़ाइन सभी उदाहरण चर को निजी होने के लिए बाध्य करता है, लेकिन घोषित करने का एक सरल तरीका भी प्रदान करता है set
तथा get
तरीके। यह इस विचार को ध्यान में रखते हुए है कि रूबी में, कक्षा के बाहर से कक्षा के आंतरिक सदस्यों तक सीधे पहुंच नहीं होती है; बल्कि, कोई कक्षा को संदेश भेजता है और प्रतिक्रिया प्राप्त करता है।
कार्यान्वयन
मैट्स का रूबी दुभाषिया
मूल रूबी दुभाषिया (कंप्यूटर सॉफ्टवेयर) को अक्सर रूबी एमआरआई | मैट्स रूबी इंटरप्रेटर या एमआरआई के रूप में संदर्भित किया जाता है। यह कार्यान्वयन सी में लिखा गया है और अपनी रूबी-विशिष्ट वर्चुअल मशीन का उपयोग करता है।
मानकीकृत और सेवानिवृत्त रूबी 1.8 रूबी एमआरआई को सी (प्रोग्रामिंग लैंग्वेज) में सिंगल-पास इंटरप्रेटेड लैंग्वेज के रूप में लिखा गया था।[23]
रूबी 1.9 के साथ शुरू, और रूबी 2.x और इसके बाद के संस्करण के साथ जारी, आधिकारिक रूबी दुभाषिया YARV (फिर भी एक और रूबी वीएम) रहा है, और इस कार्यान्वयन ने एमआरआई के पिछले रिलीज में उपयोग की जाने वाली धीमी आभासी मशीन को हटा दिया है।
वैकल्पिक कार्यान्वयन
As of 2018[update], रूबी के कई वैकल्पिक कार्यान्वयन हैं, जिनमें JRuby, Rubinius और mruby शामिल हैं। प्रत्येक एक अलग दृष्टिकोण लेता है, JRuby और Rubinius समय-समय पर संकलन प्रदान करते हैं और mruby भी समय-समय पर संकलन प्रदान करते हैं।
रूबी के तीन प्रमुख वैकल्पिक कार्यान्वयन हैं:
- JRuby, एक मिश्रित जावा (प्रोग्रामिंग भाषा) और रूबी कार्यान्वयन जो जावा वर्चुअल मशीन पर चलता है। JRuby वर्तमान में रूबी 2.5 को लक्षित करता है।
- TruffleRuby, GraalVM के साथ Truffle भाषा कार्यान्वयन ढांचे का उपयोग करते हुए जावा कार्यान्वयन
- रूबिनियस, एक C++ बायटेकोड वर्चुअल मशीन जो रनटाइम पर मशीन कोड को संकलित करने के लिए LLVM का उपयोग करती है। बायटेकोड कंपाइलर और अधिकांश कोर क्लास शुद्ध रूबी में लिखे गए हैं। रूबिनियस वर्तमान में रूबी 2.3.1 को लक्षित करता है।
अन्य रूबी कार्यान्वयन में शामिल हैं:
- मैग्लेव (सॉफ्टवेयर), एक स्मॉलटाक कार्यान्वयन जो जेमटॉक सिस्टम्स के जेमस्टोन (डेटाबेस) पर चलता है। जेमस्टोन/एस वीएम
- mruby, लुआ (प्रोग्रामिंग भाषा) के समान नस में सी कोड में एम्बेड करने के लिए डिज़ाइन किया गया एक कार्यान्वयन। यह वर्तमान में युकिहिरो मात्सुमोतो और अन्य द्वारा विकसित किया जा रहा है
- आरजीएसएस, या रूबी गेम स्क्रिप्टिंग सिस्टम, एक प्रोप्रायटरी सॉफ्टवेयर कार्यान्वयन है जिसका प्रयोग आरपीजी मेकर श्रृंखला सॉफ्टवेयर द्वारा गेम डिजाइन और आरपीजी मेकर इंजन के संशोधन के लिए किया जाता है।
- julializer, रूबी से जूलिया (प्रोग्रामिंग भाषा) का एक ट्रांसपिलर (आंशिक)। इसका उपयोग बड़े स्पीडअप के लिए किया जा सकता है उदा। रूबी या JRuby कार्यान्वयन (केवल संख्यात्मक कोड के लिए उपयोगी हो सकता है)।[96]* पुखराज (रूबी), पायथन (प्रोग्रामिंग भाषा) में लिखा गया एक रूबी कार्यान्वयन
- ओपल (रूबी), एक वेब-आधारित दुभाषिया जो रूबी को जावास्क्रिप्ट में संकलित करता है
अन्य अब मृत रूबी कार्यान्वयन थे:
- MacRuby, ऑब्जेक्टिव-सी रनटाइम पर एक macOS कार्यान्वयन। इसके आईओएस समकक्ष को रूबीमोशन कहा जाता है
- आयरन रूबी .NET फ्रेमवर्क पर एक कार्यान्वयन
- कार्डिनल, तोता आभासी मशीन के लिए एक कार्यान्वयन
- रूबी एंटरप्राइज़ संस्करण, जिसे अक्सर री के रूप में संक्षिप्त किया जाता है, रेल परियोजनाओं पर बड़े पैमाने पर रूबी को संभालने के लिए अनुकूलित एक कार्यान्वयन
- HotRuby, रूबी प्रोग्रामिंग भाषा का एक जावास्क्रिप्ट और ActionScript कार्यान्वयन
रूबी कार्यान्वयन की परिपक्वता को रूबी ऑन रेल्स (रेल) ढांचे को चलाने की उनकी क्षमता से मापा जाता है, क्योंकि यह कई रूबी-विशिष्ट सुविधाओं को लागू करने और उपयोग करने के लिए जटिल है। वह बिंदु जब कोई विशेष कार्यान्वयन इस लक्ष्य को प्राप्त करता है, उसे रेल विलक्षणता कहा जाता है। संदर्भ कार्यान्वयन, JRuby, और Rubinius[97]सभी एक उत्पादन वातावरण में अपरिवर्तित रेल चलाने में सक्षम हैं।
प्लेटफार्म समर्थन
मात्सुमोतो ने मूल रूप से रूबी को BSD|4.3BSD-आधारित Sony NEWS|Sony NEWS-OS 3.x पर विकसित किया था, लेकिन बाद में अपने काम को SunOS 4.x और अंत में Linux में स्थानांतरित कर दिया।[98][99]1999 तक, रूबी को कई अलग-अलग ऑपरेटिंग सिस्टम पर काम करने के लिए जाना जाता था। आधुनिक रूबी संस्करण और कार्यान्वयन सभी प्रमुख डेस्कटॉप, मोबाइल और सर्वर-आधारित ऑपरेटिंग सिस्टम पर उपलब्ध हैं। रूबी को Jelastic, Heroku, Google Cloud Platform और अन्य जैसे कई क्लाउड होस्टिंग प्लेटफ़ॉर्म पर भी सपोर्ट किया जाता है।
रूबी संस्करण प्रबंधक और आरबीईएनवी जैसे उपकरण, एक मशीन पर कई रूबी संस्करणों की स्थापना और विभाजन की सुविधा प्रदान करते हैं, और कई 'रत्नसेट'।
भंडार और पुस्तकालय
RubyGems, Ruby का पैकेज मैनेजर है। रूबी पैकेज को रत्न कहा जाता है और इसे कमांड लाइन के माध्यम से स्थापित किया जा सकता है। अधिकांश रत्न पुस्तकालय हैं, हालांकि कुछ मौजूद हैं जो अनुप्रयोग हैं, जैसे एकीकृत विकास पर्यावरण।[100]RubyGems.org पर 100,000 से अधिक रूबी रत्न होस्ट किए गए हैं।[101] गिटहब पर कई नए और मौजूदा रूबी पुस्तकालयों की मेजबानी की जाती है, जो एक सेवा है जो गिट (सॉफ्टवेयर) के लिए संशोधन नियंत्रण भंडार होस्टिंग प्रदान करती है।
रूबी एप्लीकेशन आर्काइव, जिसने रूबी प्रोग्रामिंग के लिए एप्लिकेशन, प्रलेखन और पुस्तकालयों की मेजबानी की, को 2013 तक बनाए रखा गया, जब इसका कार्य रूबीजम्स में स्थानांतरित कर दिया गया।[102]
यह भी देखें
- प्रोग्रामिंग भाषाओं की तुलना
- मेटास्प्लोइट प्रोजेक्ट
- क्यों (मार्मिक) रूबी के लिए गाइड
- क्रिस्टल (प्रोग्रामिंग भाषा)
- रूबी ऑन रेल्स
संदर्भ
- ↑ ""Ruby 3.1.3 Released"".
- ↑ 2.0 2.1 2.2 Cooper, Peter (2009). Beginning Ruby: From Novice to Professional. Beginning from Novice to Professional (2nd ed.). Berkeley: APress. p. 101. ISBN 978-1-4302-2363-4.
To a lesser extent, Python, LISP, Eiffel, Ada, and C++ have also influenced Ruby.
- ↑ 3.0 3.1 "Reasons behind Ruby". Ruby Conference 2008. Confreaks TV. Retrieved 2019-06-25.
- ↑ 4.0 4.1 4.2 4.3 4.4 4.5 Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8.
It draws primarily on features from Perl, Smalltalk, Python, Lisp, Dylan, and CLU.
- ↑ Bini, Ola. "Ioke". Ioke.org. Archived from the original on 2011-07-21. Retrieved 2011-07-21.
inspired by Io, Smalltalk, Lisp and Ruby
- ↑ "Julia 1.0 Documentation: Introduction". Retrieved 6 October 2018.
- ↑ Burks, Tim. "About Nu™". Programming Nu™. Neon Design Technology, Inc. Retrieved 2011-07-21.
- ↑ Ring Team (3 December 2017). "Ring and other languages". ring-lang.net. ring-lang.
- ↑ "The Rust Reference". Retrieved 16 November 2019.
- ↑ Lattner, Chris (2014-06-03). "Chris Lattner's Homepage". Chris Lattner. Retrieved 2014-06-03.
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- ↑ "About Ruby". Retrieved 15 February 2020.
- ↑ Shugo Maeda (17 December 2002). "The Ruby Language FAQ". Retrieved 2 March 2014.
- ↑ Matsumoto, Yukihiro (13 February 2006). "Re: Ruby's lisp features". Archived from the original on 2007-01-16. Retrieved 15 February 2020.
{{cite web}}
:|archive-date=
/|archive-url=
timestamp mismatch (help) - ↑ 14.0 14.1 14.2 14.3 14.4 14.5 "History of Ruby".
- ↑ "[FYI: historic] The decisive moment of the language name Ruby. (Re: [ANN] ruby 1.8.1)" (E-mail from Hiroshi Sugihara to ruby-talk).
- ↑ "1.3 Why the name 'Ruby'?". The Ruby Language FAQ. Ruby-Doc.org. Retrieved April 10, 2012.
- ↑ Yukihiro Matsumoto (June 11, 1999). "Re: the name of Ruby?". Ruby-Talk (Mailing list). Retrieved April 10, 2012.
- ↑ "More archeolinguistics: unearthing proto-Ruby". Archived from the original on 6 November 2015. Retrieved 2 May 2015.
- ↑ "[ruby-talk:00382] Re: history of ruby". Retrieved 2 May 2015.
- ↑ "[ruby-list:124] TUTORIAL — ruby's features". Retrieved 2 May 2015.
- ↑ "An Interview with the Creator of Ruby".
- ↑ Yukihiro Matsumoto (October 2000). "Programming Ruby: Forward". Retrieved 5 March 2014.
- ↑ 23.0 23.1 "We retire Ruby 1.8.7". Retrieved 2 May 2015.
- ↑ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語RubyのJIS規格(JIS X 3017)制定について". Retrieved 2 May 2015.
- ↑ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語Ruby、国際規格として承認". Retrieved 2 May 2015.
- ↑ "ISO/IEC 30170:2012". Retrieved 2017-03-10.
- ↑ Web Development: Ruby on Rails. Devarticles.com (2007-03-22). Retrieved on 2013-07-17.
- ↑ "Ruby 1.9.3 p0 is released". ruby-lang.org. October 31, 2011. Retrieved February 20, 2013.
- ↑ "v1_9_3_0/NEWS". Ruby Subversion source repository. ruby-lang.org. September 17, 2011. Retrieved February 20, 2013.
- ↑ Ruby 1.9: What to Expect. slideshow.rubyforge.org. Retrieved on 2013-07-17.
- ↑ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 is released. Ruby-lang.org. Retrieved on 2013-07-17.
- ↑ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 is released. Ruby-lang.org. Retrieved on 2013-07-17.
- ↑ "Semantic Versioning starting with Ruby 2.1.0". December 21, 2013. Retrieved December 27, 2013.
- ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "Ruby 2.2.1 Released". Retrieved 12 July 2016.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "v2.2.1 ChangeLog". Retrieved 12 July 2016.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying non volatile registers for increase performance in ppc64". Retrieved 12 July 2016.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying MACRO for increase performance in ppc64". Retrieved 12 July 2016.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ↑ "ruby/NEWS at v2_2_0 · ruby/ruby · GitHub". GitHub. Retrieved 2 May 2015.
- ↑ "Ruby/NEWS at v.2_3_0 - ruby/ruby". GitHub. Retrieved 25 December 2015.
- ↑ "Ruby 2.3.0 changes and features". Running with Ruby. dev.mensfeld.pl. 14 November 2015.
- ↑ "Ruby 2.4.0 Released". www.ruby-lang.org. Retrieved 2016-12-30.
- ↑ 42.0 42.1 42.2 42.3 "Ruby 3.0.0 Released". Ruby Programming Language. 2020-12-25. Retrieved 2020-12-25.
- ↑ "रूबी 3x3: मैट्ज़, कोइची, और रूबी प्रदर्शन के भविष्य पर टेंडरलव".
- ↑ 44.0 44.1 "Ruby 3.1.0 Released". ruby-lang.org. Retrieved 25 Dec 2021.
- ↑ "रूबी 3.1.0 जारी".
- ↑ "The Ruby Community's Christmas Releases". www.rubyinside.com.
- ↑ "A Patch in Time: Securing Ruby".
- ↑ "ruby-1.8.0 released!". www.ruby-lang.org.
- ↑ "Plans for 1.8.7". www.ruby-lang.org.
- ↑ "EOL for Ruby 1.8.7 and 1.9.2". www.ruby-lang.org.
- ↑ "Ruby 1.9.3-p551 Released". www.ruby-lang.org.
- ↑ "Ruby 1.9.0 Released". www.ruby-lang.org.
- ↑ "Support for Ruby version 1.9.3 will end on February 23, 2015". www.ruby-lang.org.
- ↑ "Support for Ruby 1.9.3 has ended". www.ruby-lang.org.
- ↑ 55.0 55.1 55.2 "Ruby 2.0.0-p648 Released". www.ruby-lang.org.
- ↑ "Ruby 2.0.0-p0 is released". www.ruby-lang.org.
- ↑ "Ruby 2.1.10 Released". www.ruby-lang.org.
- ↑ "Ruby 2.1.0 is released". www.ruby-lang.org.
- ↑ "Support plans for Ruby 2.0.0 and Ruby 2.1". www.ruby-lang.org.
- ↑ "Ruby 2.1.9 Released". www.ruby-lang.org.
- ↑ "Ruby Issue Tracking System". bugs.ruby-lang.org.
- ↑ 62.0 62.1 "Support of Ruby 2.1 has ended". www.ruby-lang.org.
- ↑ "Ruby 2.2.10 Released". www.ruby-lang.org.
- ↑ "Ruby 2.2.0 Released". www.ruby-lang.org.
- ↑ "Ruby 2.2.7 Released". www.ruby-lang.org.
- ↑ "Ruby 2.3.8 Released". www.ruby-lang.org.
- ↑ "Ruby 2.3.0 Released". www.ruby-lang.org.
- ↑ 68.0 68.1 "Support of Ruby 2.2 has ended". www.ruby-lang.org.
- ↑ "Ruby 2.4.10 Released". Ruby Programming Language. 2020-03-31. Retrieved 2020-04-01.
- ↑ "Ruby 2.4.0 Released". www.ruby-lang.org.
- ↑ 71.0 71.1 "Support of Ruby 2.4 has ended". www.ruby-lang.org.
- ↑ 72.0 72.1 72.2 "Ruby 2.5.9 Released". Ruby Programming Language. 2021-04-05. Retrieved 2021-04-05.
- ↑ "Ruby 2.5.0 Released". www.ruby-lang.org.
- ↑ 74.0 74.1 74.2 "Ruby 2.6.10 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
- ↑ "Ruby 2.6.0 Released". www.ruby-lang.org.
- ↑ "Ruby 2.7.6 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
- ↑ "Ruby 2.7.0 Released". www.ruby-lang.org.
- ↑ "Ruby 2.7.6 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-11-27.
- ↑ "Ruby 3.0.4 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
- ↑ "Ruby 3.0.0 Released". www.ruby-lang.org.
- ↑ "Ruby 3.1.2 Released". ruby-lang.org. Retrieved 28 April 2022.
- ↑ "The Ruby Programming Language". Retrieved 2 May 2015.
- ↑ Google Tech Talks – Ruby 1.9 on YouTube
- ↑ 84.0 84.1 84.2 Bill Venners. "The Philosophy of Ruby". Retrieved 2 May 2015.
- ↑ "Welcome to RUBYWEEKLYNEWS.ORG". 4 July 2017. Archived from the original on 4 July 2017.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link) - ↑ "The Ruby Language FAQ: How Does Ruby Stack Up Against...?". Retrieved 2 May 2015.
- ↑ Bruce Stewart (29 November 2001). "An Interview with the Creator of Ruby". O'Reilly Media. Retrieved 2 May 2015.
- ↑ Bill Venners. "Dynamic Productivity with Ruby". Retrieved 2 May 2015.
- ↑ "Language Workbenches: The Killer-App for Domain Specific Languages?". martinfowler.com. Retrieved 2 May 2015.
- ↑ "Ruby – Add class methods at runtime".
- ↑ Bill Venners. "Blocks and Closures in Ruby". Retrieved 2 May 2015.
- ↑ "Methods". Official Ruby FAQ.
- ↑ Britt, James. "Ruby 2.0.0 Standard Library Documentation". Retrieved 2013-12-09.
- ↑ "[ruby-talk:01120] Re: The value of while..."
In Ruby's syntax, statement is just a special case of an expression that cannot appear as an argument (e.g. multiple assignment).
- ↑ "[ruby-talk:02460] Re: Precedence question".
statement [...] can not be part of expression unless grouped within parentheses.
- ↑ "remove/virtual_module: Born to make your Ruby Code more than 3x faster. Hopefully". GitHub. 21 February 2020.
- ↑ Peter Cooper (2010-05-18). "The Why, What, and How of Rubinius 1.0's Release".
- ↑ Maya Stodte (February 2000). "IBM developerWorks – Ruby: a new language". Archived from the original on August 18, 2000. Retrieved 3 March 2014.
- ↑ Yukihiro Matsumoto (August 2002). "lang-ruby-general: Re: question about Ruby initial development". Retrieved 3 March 2014.
- ↑ "The Ruby Toolbox". Retrieved 2015-04-04.
- ↑ "Stats RubyGems.org आपका समुदाय रत्न होस्ट". rubygems.org. Retrieved 10 December 2021.
- ↑ "We retire raa.ruby-lang.org". 2013-08-08. Retrieved 2016-01-03.
अग्रिम पठन
- Black, David; Leo, Joseph (March 15, 2019), The Well-Grounded Rubyist (Third ed.), Manning Publications, p. 584, ISBN 978-1617295218
- Metz, Sandi (August 22, 2018), Practical Object-Oriented Design: An Agile Primer Using Ruby (Second ed.), Addison-Wesley Professional, p. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (July 12, 2016), Beginning Ruby: From Novice to Professional (Third ed.), Apress, p. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (April 3, 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (Second ed.), O'Reilly Media, p. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (March 2, 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Third ed.), Addison-Wesley Professional, p. 816, ISBN 978-0-321-71463-3
- Thomas, Dave; Fowler, Chad; Hunt, Andy (July 7, 2013), Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (Fourth ed.), Pragmatic Bookshelf, p. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (March 28, 2009), Ruby in Practice (First ed.), Manning Publications, p. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (January 25, 2008), The Ruby Programming Language (First ed.), O'Reilly Media, p. 446, ISBN 978-0-596-51617-8
- Baird, Kevin (June 8, 2007), Ruby by Example: Concepts and Code (First ed.), No Starch Press, p. 326, ISBN 978-1593271480
- Fitzgerald, Michael (May 14, 2007), Learning Ruby (First ed.), O'Reilly Media, p. 255, ISBN 978-0-596-52986-4