Ruby (programming language): Difference between revisions

Content deleted Content added
Removed 6 redlinks via script.
 
(22 intermediate revisions by 14 users not shown)
Line 1:
{{Short description|General-purpose programming language}}
{{distinguish|Ruby on Rails}}
 
{{infobox programming language
| logo = Ruby logo.svg
Line 28 ⟶ 27:
 
== History ==
{{Under construction|placedby=Gracen|comment=Cleaning up content after merge from {{no redirect|History of Ruby}}.}}
=== Early concept ===
MatsumotoAccording hasto said thatMatsumoto, Ruby was conceived in 1993. In a 1999 post to the ''rubyRuby-talk''Talk mailing list, he describesshared some of his early ideas about the language:<ref>{{cite web|url=https://www.ruby-doclang.org/docsen/ruby-doc-bundledocumentation/FAQfaq/FAQ.html|title=TheOfficial Ruby Language FAQ|author=Shugo Maeda|date=17 December 2002|access-date=2 March 2014}}</ref>
 
{{Blockquote|I was talking with my colleague about the possibility of an object-oriented scripting language. I knew Perl (Perl4, not Perl5), but I didn't like it really, because it had the smell of a [[toy language]] (it still has). The object-oriented language seemed very promising. I knew [[Python (programming language)|Python]] then. But I didn't like it, because I didn't think it was a true object-oriented language{{snd}} OO features appeared to be add-on to the language. As a language maniac and OO fan for 15 years, I really wanted a genuine object-oriented, easy-to-use scripting language. I looked for but couldn't find one. So I decided to make it.}}
 
Matsumoto describesdescribed theRuby's design of Ruby as being likeresembling a simple [[Lisp (programming language)|Lisp]] language at its core, with an object system like that of Smalltalk, blocks inspired by [[higher-order function]]s, and practical utility like that of Perl.<ref name="lisp-features"/>
 
The name "Ruby" originated during an online chat session between Matsumoto and Keiju Ishitsuka on 24 February 24, 1993, before any code had been written for the language.<ref name="rubyconf-history-of-ruby"/> Initially twoTwo names were initially proposed: "[[Coral]]" and "[[Ruby]]". Matsumoto chose the latter in a latersubsequent e-mailemail to Ishitsuka.<ref name="ruby-name"/> MatsumotoHe lateralso noted athat one factor ininfluencing choosingthe choice of the name "Ruby"—it was thethat a colleague's [[birthstone]] ofwas one of his colleagues[[Ruby_(gemstone)|ruby]].<ref name="faq-name"/><ref name="ruby-talk-name"/>
 
=== Early releases ===
 
The first public release of Ruby 0.95 was announced on Japanese domestic [[newsgroup]]s on December 21, December 1995.<ref name="0.95"/><ref name="ruby-history"/> Subsequently, three more versions of Ruby were released in two days.<ref name="rubyconf-history-of-ruby"/> The release coincided with the launch of the [[Japanese language|Japanese-language]] ''ruby-list'' mailing list, which was the first mailing list for the new language.
 
Already present at this stage of development were many of the features familiar in later releases of Ruby, including [[object-oriented programming|object-oriented]] design, [[class (computer science)|classes]] with inheritance, [[mixin]]s, [[iterator]]s, [[Closure (computer science)|closures]], [[exception handling]] and [[Garbage collection (computer science)|garbage collection]].<ref name="tutorial-features"/>
Line 46 ⟶ 44:
After the release of Ruby 0.95 in 1995, several stable versions of Ruby were released in these years.<ref name="rubyconf-history-of-ruby"/>
 
In 1997, the first article about Ruby was published on the Web. In the same year, Matsumoto was hired by [[Network Applied Communication Laboratory|netlab.jp]] to work on Ruby as a full-time developer.<ref name="rubyconf-history-of-ruby"/>
 
In 1998, the Ruby Application Archive was launched by Matsumoto, along with a simple English-language homepage for Ruby.<ref name="rubyconf-history-of-ruby"/>
Line 62 ⟶ 60:
Around 2005, interest in the Ruby language surged in tandem with [[Ruby on Rails]], a [[web framework]] written in Ruby. Rails is frequently credited with increasing awareness of Ruby.<ref name="Devarticles"/>
 
Effective with Ruby 1.9.3, released October 31, October 2011,<ref name="Ruby 1.9.3"/> Ruby switched from being dual-licensed under the Ruby License and the GPL to being dual-licensed under the Ruby License and the two-clause BSD license.<ref name="license-change"/> Adoption of 1.9 was slowed by changes from 1.8 that required many popular third party [[#Repositories and libraries|gems]] to be rewritten.{{cn|date=April 2025}}
 
=== Ruby 2 ===
 
Ruby 2.0 was intended to be fully backward compatible with Ruby 1.9.3. As of the official 2.0.0 release on February 24, February 2013, there were only five known incompatibilities.<ref name="2-0-release-incompatibilities"/>
 
Starting with 2.1.0, Ruby's versioning policy changed to be more similar to [[semantic versioning]], although it differs slightly in that minor version increments may be API incompatible.<ref name="semantic-versioning"/>
Line 97 ⟶ 95:
=== Ruby 3 ===
 
Ruby 3.0.0 was released on [[Christmas]] Day in 2020.<ref name="Ruby 3.0.0 Released"/> It is known as Ruby 3x3, which meanssignifies that programs would run three times faster in Ruby 3.0 comparing to Ruby 2.0.<ref>{{cite web |last=Scheffler |first=Jonan |date=10 November 10, 2016 |title=Ruby 3x3: Matz, Koichi, and Tenderlove on the future of Ruby Performance |url=https://blog.heroku.com/ruby-3-by-3 |access-date=18 May 18, 2019 |website=Ruby |language=en-US |archive-date=10 May 10, 2019 |archive-url=https://web.archive.org/web/20190510225935/https://blog.heroku.com/ruby-3-by-3 |url-status=live }}</ref> and some had already implemented in intermediate releases on the road from 2 to 3. To achieve 3x3, Ruby 3 comes with MJIT, and later YJIT, Just-In-Time Compilers, to make programs faster, although they are described as experimental and remain disabled by default (enabled by flags at runtime).
 
Another goal of Ruby 3.0 is to improve [[Concurrency (computer science)|concurrency]] and two more utilities Fibre Scheduler, and experimental Ractor facilitate the goal.<ref name="Ruby 3.0.0 Released"/> Ractor is light-weight and thread-safe as it is achieved by exchanging messages rather than shared objects.
Line 105 ⟶ 103:
There are some syntax enhancements and library changes in Ruby 3.0 as well.<ref name="Ruby 3.0.0 Released"/>
 
Ruby 3.1 was released on December 25, December 2021.<ref name="Ruby 3.1.0 Released" /> It includes YJIT, a new, experimental, Just-In-Time Compiler developed by [[Shopify]], to enhance the performance of real world business applications. A new [[debugger]] is also included. There are some syntax enhancements and other improvements in this release. Network libraries for [[FTP]], [[SMTP]], [[IMAP]], and [[Post Office Protocol|POP]] are moved from default gems to bundled gems.<ref>{{cite web|url=https://www.ruby-lang.org/en/news/2021/12/25/ruby-3-1-0-released//|title=Ruby 3.1.0 Released|access-date=2021-12-26|archive-date=2021-12-26|archive-url=https://web.archive.org/web/20211226065055/https://www.ruby-lang.org/en/news/2021/12/25/ruby-3-1-0-released//|url-status=live}}</ref>
 
Ruby 3.2 was released on 25 December 25, 2022.<ref name="Ruby 3.2.0 Released">{{Cite web|url=https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/|title=Ruby 3.2.0 Released|access-date=2022-12-25|archive-date=2022-12-25|archive-url=https://web.archive.org/web/20221225084459/https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/|url-status=live}}</ref> It brings support for being run inside of a [[WebAssembly]] environment via a WASI interface. [[Regular expression]]s also receives some improvements, including a faster, [[Memoizationmemoization|memoized]] matching algorithm to protect against certain [[ReDoS]] attacks, and configurable timeouts for regular expression matching. Additional debugging and syntax features are also included in this release, which include syntax suggestion, as well as error highlighting. The MJIT compiler has been re-implemented as a standard library module, while the YJIT, a [[Rust (programming language)|Rust]]-based [[Just-in-time compilation|JIT]] compiler now supports more architectures on Linux.
 
Ruby 3.3 was released on December 25, December 2023.<ref name="Ruby 3.3.0 Released">{{Cite web|url=https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released/|title=Ruby 3.3.0 Released|access-date=2023-12-25|archive-date=2023-12-25|archive-url=https://web.archive.org/web/20231225071449/https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released/|url-status=live}}</ref> Ruby 3.3 introduces significant enhancements and performance improvements to the language. Key features include the introduction of the Prism parser for portable and maintainable parsing, the addition of the pure-Ruby JIT compiler RJIT, and major performance boosts in the YJIT compiler. Additionally, improvements in memory usage, the introduction of an M:N thread scheduler, and updates to the standard library contribute to a more efficient and developer-friendly Ruby ecosystem.
 
Ruby 3.4 was released on 25 December 2024.<ref name="Ruby 3.4.0 Released">{{cite web|url=https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/ |title=Ruby 3.4.0 Released |date=2024-12-25 |access-date=2025-04-12}}</ref> Ruby 3.4 adds <code>it</code> block parameter reference, changes Prism as default parser, adds [[Happy Eyeballs]] Version 2 support to socket library, improves YJIT, adds modular Garbage Collector and so on.<ref>{{cite web |url=https://docs.ruby-lang.org/en/3.4/NEWS_md.html |title=NEWS - Documentation for Ruby 3.4 |access-date=2025-04-12}}</ref>
=== Table of versions ===
{| class="wikitable"
|-
! Version<ref>[https://www.ruby-lang.org/en/downloads/releases/ Ruby Releases]</ref>
! Latest teeny version
! Initial release date
! End of support phase<ref>[https://www.ruby-lang.org/en/downloads/branches/ Ruby Maintenance Branches]</ref>
! End of security maintenance phase
|-
| {{Version |o |birthday}}
| {{N/A}}
| 1993-02-24
| {{N/A}}
| {{N/A}}
|-
| {{Version |o |0.95}} (public)
| {{N/A}}
| 1995-12-21
| {{N/A}}
| {{N/A}}
|-
| {{Version |o |1.0}}
| 1.0-971225
| 1996-12-25<ref name="1.0"/>
| 1997-12-25
| {{N/A}}
|-
| {{Version |o |1.1}} (devel)
| 1.1d1
| 1997-08-13
| 1998-12-22
| {{N/A}}
|-
| {{Version |o |1.2}}
| 1.2.6
| 1998-12-25
| 1999-06-21
| {{N/A}}
|-
| {{Version |o |1.3}} (devel)
| 1.3.7
| 1998-12-24
| 1999-08-06
| {{N/A}}
|-
| {{Version |o |1.4}}
| 1.4.6
| 1999-08-13
| 2000-08-16
| {{N/A}}
|-
| {{Version |o |1.6}}
| 1.6.8-patch1
| 2000-09-19
| 2002-12-24
| {{N/A}}
|-
| {{Version |o |1.8}}
| 1.8.7-p375<ref name="1.8"/>
| 2003-08-04<ref name="1.8-release"/>
| 2012-06<ref name="1.8-support"/>
| 2014-07-01<ref name="1.8-sunset"/>
|-
| {{Version |o |1.9}}
| 1.9.3-p551<ref name="1.9"/>
| 2007-12-25<ref name="1.9-release"/>
| 2014-02-23<ref name="1.9-support"/>
| 2015-02-23<ref name="1.9-sunset"/>
|-
| {{Version |o |2.0}}
| 2.0.0-p648<ref name="Ruby 2.0.0-p648 Released"/>
| 2013-02-24<ref name="2.0-release"/>
| 2015-02-24<ref name="Ruby 2.0.0-p648 Released"/>
| 2016-02-24<ref name="Ruby 2.0.0-p648 Released"/>
|-
| {{Version |o |2.1}}
| 2.1.10<ref name="2.1"/>
| 2013-12-25<ref name="2.1-release"/>
| 2016-03-30<ref name="2.1" /><ref name="2.1-support"/>
| 2017-03-31<ref name="2.1-sunset"/><ref name="auto"/>
|-
| {{Version |o |2.2}}
| 2.2.10<ref name="2.2"/>
| 2014-12-25<ref name="2.2-release"/>
| 2017-03-28<ref name="2.2-support"/>
| 2018-03-31<ref name="Support of Ruby 2.2 has ended" />
|-
| {{Version |o |2.3}}
| 2.3.8<ref name="2.3"/>
| 2015-12-25<ref name="2.3-release"/>
| 2018-06-20<ref name=":2">{{Cite web |date=2019-03-31 |title=Support of Ruby 2.3 has ended |url=https://www.ruby-lang.org/en/news/2019/03/31/support-of-ruby-2-3-has-ended/ |access-date= |website=www.ruby-lang.org}}</ref>
| 2019-03-31<ref name=":2" />
|-
| {{Version |o |2.4}}
| 2.4.10<ref name="2.4"/>
| 2016-12-25<ref name="2.4-release"/>
| 2019-04-01<ref name="Support of Ruby 2.4.6 has ended"/>
| 2020-04-01<ref name="Support of Ruby 2.4.6 has ended" />
|-
| {{Version |o |2.5}}
| 2.5.9<ref name="Ruby 2.5.9 Released"/>
| 2017-12-25<ref name="2.5-release"/>
| 2021-04-05<ref name="Ruby 2.5.9 Released" />
| 2021-04-05<ref name="Ruby 2.5.9 Released" />
|-
| {{Version |o |2.6}}
| 2.6.10<ref name=":1">{{Cite web |date=2022-04-12 |title=Ruby 2.6.10 Released |url=https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/ |access-date=2023-07-04 |website=www.ruby-lang.org}}</ref>
| 2018-12-25<ref name="2.6-release"/>
| 2022-04-12<ref name=":1" />
| 2022-04-12<ref name=":1" />
|-
| {{Version |o |2.7}}
| 2.7.8<ref name="2.7"/>
| 2019-12-25<ref name="2.7-release"/>
| 2023-03-30<ref name="2.7" />
| 2023-03-30<ref name="2.7" />
|-
| {{Version |o |3.0}}
| 3.0.7<ref name="3.0"/>
| 2020-12-25<ref name="3.0-release"/>
| 2023-04-01
| 2024-04-23<ref name="3.0"/>
|-
| {{Version |co |3.1}}
| 3.1.6<ref name="3.1"/>
| 2021-12-25<ref name="3.1-release"/>
| 2024-04-01
| {{planned|expected 2025-03-31}}
|-
| {{Version |co |3.2}}
| 3.2.7<ref name="3.2"/>
| 2022-12-25<ref name="3.2-release"/>
| {{TBA}}
| {{planned|expected 2026-03-31}}
|-
|-
| {{Version |co |3.3}}
| 3.3.7<ref name="3.3"/>
| 2023-12-25<ref name="3.3-release"/>
| {{TBA}}
| {{planned|expected 2027-03-31}}
|-
| {{Version |c |3.4}}
| 3.4.2<ref name="3.4"/>
| 2024-12-25<ref name="3.4-release"/>
| {{TBA}}
| {{planned|expected 2028-03-31}}
|-
 
| colspan=5 | {{Version|l|show=111101}}
|}
 
== Semantics and philosophy ==
Line 288 ⟶ 136:
== Features ==
 
* Thoroughly [[Object-oriented programming|object-oriented]] with [[Inheritance (object-oriented programming)|inheritance]], [[mixin]]s and [[metaclass]]es<ref name="stewart" />
* [[Dynamic typing]] and [[duck typing]]
* Everything is an [[Expression (programming)|expression]] (even [[Statement (programming)|statements]]) and everything is executed [[Imperative programming|imperatively]] (even [[Declaration (computer science)|declarations]])
Line 311 ⟶ 159:
* Centralized package management through [[RubyGems]]
* Implemented on all major platforms
* Large standard library, including modules for [[YAML]], [[JSON]], [[XML]], [[Common Gateway Interface|CGI]], [[OpenSSL]], [[HTTP]], [[FTP]], [[RSS]], [[curses (programming library)|curses]], [[zlib]] and [[Tk (software)|Tk]]<ref name="stdlib-2.0.0master" />
* [[Just-in-time compilation]]
 
Line 335 ⟶ 183:
 
=== Alternative implementations ===
 
{{Cleanup red links|section|date=April 2025}}
 
{{As of|2018}}, there are a number of alternative implementations of Ruby, including [[JRuby]], [[Rubinius]], and [[mruby]]. Each takes a different approach, with JRuby and Rubinius providing [[just-in-time compilation]] and mruby also providing [[ahead-of-time compilation]].
Line 342 ⟶ 190:
 
* [[JRuby]], a mixed [[Java (programming language)|Java]] and Ruby implementation that runs on the [[Java virtual machine]]. JRuby currently targets Ruby 3.1.x.
* [[TruffleRuby]], a Java implementation using the Truffle language implementation framework with [[GraalVM]]
* [[Rubinius]], a [[C++]] bytecode virtual machine that uses [[LLVM]] to compile to machine code at runtime. The bytecode compiler and most core classes are written in pure Ruby. Rubinius currently{{when|date=April 2025}} targets Ruby 2.3.1.
 
Other Ruby implementations include:
Line 349 ⟶ 197:
* [[MagLev (software)|MagLev]], a [[Smalltalk]] implementation that runs on [[GemTalk Systems]]' [[Gemstone (database)|GemStone/S]] VM
* [[mruby]], an implementation designed to be embedded into C code, in a similar vein to [[Lua (programming language)|Lua]]. It is currently being developed by [[Yukihiro Matsumoto]] and others
* [[RGSS]], or Ruby Game Scripting System, a [[Proprietary software|proprietary]] implementation that is used by the [[RPG Maker]] series of [[role-playing game creation software]] for game design and modification of the RPG Maker [[game engine]]
* [[julializer]], a [[transpiler]] (partial) from Ruby to [[Julia (programming language)|Julia]]. It can be used for a large speedup over e.g. Ruby or JRuby implementations (may only be useful for numerical code).<ref name="virtual-module"/>
* [[Topaz (Ruby)|Topaz]], a Ruby implementation written in [[Python (programming language)|Python]]
* [[Opal (Ruby)|Opal]], a web-based interpreter that compiles Ruby to [[JavaScript]]
 
Other now defunct Ruby implementations were:
Line 359 ⟶ 207:
* Cardinal, an implementation for the [[Parrot virtual machine]]
* [[Ruby Enterprise Edition]], often shortened to ''ree'', an implementation optimized to handle large-scale [[Ruby on Rails]] projects
* [[HotRuby]], a [[JavaScript]] and [[ActionScript]] implementation of the [[Ruby programming language]]
 
The maturity of Ruby implementations tends to be measured by their ability to run the [[Ruby on Rails]] (Rails) framework, because it is complex to implement and uses many Ruby-specific features. The point when a particular implementation achieves this goal is called "the Rails singularity". The reference implementation, JRuby, and Rubinius<ref name="Rubinius"/> are all able to run Rails unmodified in a production environment.
Line 367 ⟶ 215:
Matsumoto originally developed Ruby on the [[BSD|4.3BSD]]-based [[Sony NEWS|Sony NEWS-OS]] 3.x, but later migrated his work to [[SunOS]] 4.x, and finally to [[Linux]].<ref name="Stodte"/><ref name="initial-development"/> By 1999, Ruby was known to work across many different [[operating system]]s. Modern Ruby versions and implementations are available on all major desktop, mobile and server-based operating systems. Ruby is also supported across a number of cloud hosting platforms like [[Jelastic]], [[Heroku]], [[Google Cloud Platform]] and others.
 
Tools such as [[Ruby Version Manager|RVM]] and [[RBEnv]], facilitate installation and partitioning of multiple ruby versions, and multiple 'gemsets' on one machine.
 
== Repositories and libraries ==
Line 391 ⟶ 239:
<ref name="Julia">{{cite web | url = https://docs.julialang.org/en/stable/ | title = Julia 1.0 Documentation: Introduction | access-date = 6 October 2018 | archive-date = 16 August 2018 | archive-url = https://web.archive.org/web/20180816025550/https://docs.julialang.org/en/stable/ | url-status = dead }}</ref>
<ref name="Burks">{{cite web | url = http://programming.nu/about | title = About Nu™ | last = Burks | first = Tim | work = Programming Nu™ | publisher = Neon Design Technology, Inc. | access-date = 2011-07-21 | archive-date = 2018-12-25 | archive-url = https://web.archive.org/web/20181225131630/http://programming.nu/about%0A%20 | url-status = live }}</ref>
<ref name="Ring and other languages">{{cite web | url = httphttps://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages | title = Ring and other languages | author = Ring Team | date = 3 December 2017 | work = ring-lang.net | publisher = [[ring-lang]] | access-date = 3 December 2017 | archive-date = 25 December 2018 | archive-url = https://web.archive.org/web/20181225175312/http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages | url-status = live }}</ref>
<ref name="rust">{{Cite web |url=https://doc.rust-lang.org/reference/influences.html |title=Influences - The Rust Reference |website=The Rust Reference |access-date=2023-04-18 |archive-date=2019-01-26 |archive-url=https://web.archive.org/web/20190126051127/https://doc.rust-lang.org/reference/influences.html |url-status=live }}</ref>
<ref name="lattner2014">{{cite web | url = http://nondot.org/sabre/ | title = Chris Lattner's Homepage | last = Lattner | first = Chris | date = 2014-06-03 | access-date = 2014-06-03 | publisher = Chris Lattner | quote = 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. | archive-date = 2018-12-25 | archive-url = https://web.archive.org/web/20181225175312/http://nondot.org/sabre/ | url-status = live }}</ref>
Line 398 ⟶ 246:
<ref name="bini">{{ cite book | last = Bini | first = Ola | title = Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java | year = 2007 | publisher = APress | ___location = Berkeley | isbn = 978-1-59059-881-8 | page = [https://archive.org/details/practicaljrubyon0000bini/page/3 3] | quote = It draws primarily on features from Perl, Smalltalk, Python, Lisp, Dylan, and CLU. | url = https://archive.org/details/practicaljrubyon0000bini/page/3}}</ref>
<ref name="about">{{cite web|url=https://www.ruby-lang.org/en/about/|title=About Ruby|access-date=15 February 2020|archive-date=9 October 2014|archive-url=https://web.archive.org/web/20141009090312/https://www.ruby-lang.org/en/about/|url-status=live}}</ref>
<!-- <ref name="FAQ">{{cite web|url=https://www.ruby-doclang.org/docsen/ruby-doc-bundledocumentation/FAQfaq/FAQ.html|title=TheOfficial Ruby Language FAQ|author=Shugo Maeda|date=17 December 2002|access-date=2 March 2014|archive-date=27 February 2014|archive-url=https://web.archive.org/web/20140227064945/http://www.ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html|url-status=live}}</ref> -->
<ref name="lisp-features">{{ cite web | url = http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/179642 | title = Re: Ruby's lisp features. | last = Matsumoto | first = Yukihiro | author-link = Yukihiro Matsumoto | date = 13 February 2006 | access-date = 15 February 2020 | url-status = dead | archive-url = https://web.archive.org/web/20181027195101/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/179642 | archive-date = 2018-10-27}}</ref>
<ref name="rubyconf-history-of-ruby">{{cite web|url=http://blog.nicksieger.com/articles/2006/10/20/rubyconf-history-of-ruby|title=History of Ruby|access-date=2008-08-14|archive-date=2011-07-14|archive-url=https://web.archive.org/web/20110714181409/http://blog.nicksieger.com/articles/2006/10/20/rubyconf-history-of-ruby|url-status=live}}</ref>
<ref name="ruby-name">{{cite web|url=http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/88819|title=[FYI: historic] The decisive moment of the language name Ruby. (Re: [ANN] ruby 1.8.1)|type=E-mail from Hiroshi Sugihara to ruby-talk|access-date=2008-08-14|archive-date=2011-07-17|archive-url=https://web.archive.org/web/20110717205734/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/88819|url-status=dead}}</ref>
<ref name="faq-name">{{cite web | url = https://www.ruby-doclang.org/docsen/ruby-doc-bundledocumentation/FAQfaq/1/FAQ.html | title = 1.3 Why the name 'Ruby'? | work = TheOfficial Ruby Language FAQ | publisher = Ruby-Doc.org | access-date = April 10, 2012 | archive-date = May 28, 2012 | archive-url = https://web.archive.org/web/20120528140926/http://www.ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html | url-status = live }}</ref>
<ref name="ruby-talk-name">{{cite mailing list | url = http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/394 | title = Re: the name of Ruby? | mailing-list = Ruby-Talk | date = June 11, 1999 | author = [[Yukihiro Matsumoto]] | access-date = April 10, 2012 | archive-date = December 25, 2018 | archive-url = https://web.archive.org/web/20181225131629/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/394%0A%20 | url-status = dead }}</ref>
<ref name="0.95">{{ cite web|url=http://eigenclass.org/hiki/ruby+0.95|title=More archeolinguistics: unearthing proto-Ruby|access-date=2 May 2015|url-status=dead|archive-url=https://web.archive.org/web/20151106023204/http://eigenclass.org/hiki/ruby+0.95|archive-date=6 November 2015}}</ref>
Line 418 ⟶ 266:
<ref name="2-0-release-incompatibilities">Endoh, Yusuke. (2013-02-24) [http://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is-released/#label-8 Ruby 2.0.0-p0 is released] {{Webarchive|url=https://web.archive.org/web/20130227014031/http://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is-released/#label-8 |date=2013-02-27 }}. Ruby-lang.org. Retrieved on 2013-07-17.</ref>
<ref name="semantic-versioning">{{cite web|url=https://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/|title=Semantic Versioning starting with Ruby 2.1.0|date=December 21, 2013|access-date=December 27, 2013|archive-date=February 13, 2014|archive-url=https://web.archive.org/web/20140213000634/https://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/|url-status=dead}}</ref>
<ref name="obsolete-or-gone-in-2.2">{{cite web|url=https://github.com/ruby/ruby/blob/v2_2_0/NEWS|title=ruby/NEWS at v2_2_0 · ruby/ruby · GitHub|work=GitHub|access-date=2 May 2015|archive-date=1 January 2015|archive-url=https://web.archive.org/web/20150101005836/https://github.com/ruby/ruby/blob/v2_2_0/NEWS|url-status=live}}</ref>
<ref name="2-2-1-release">{{cite web|url=https://www.ruby-lang.org/en/news/2015/03/03/ruby-2-2-1-released|title=Ruby 2.2.1 Released|access-date=12 July 2016|author=Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi|year=2015|archive-date=16 May 2016|archive-url=https://web.archive.org/web/20160516080955/https://www.ruby-lang.org/en/news/2015/03/03/ruby-2-2-1-released/|url-status=live}}</ref>
<ref name="2-2-1-changelog">{{cite web|url=https://svn.ruby-lang.org/repos/ruby/tags/v2_2_1/ChangeLog|title=v2.2.1 ChangeLog|access-date=12 July 2016|author=Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi|year=2015|archive-date=26 February 2017|archive-url=https://web.archive.org/web/20170226231425/http://svn.ruby-lang.org/repos/ruby/tags/v2_2_1/ChangeLog|url-status=dead}}</ref>
Line 438 ⟶ 286:
<ref name="venners-closures">{{cite web|url=http://www.artima.com/intv/closures.html|title=Blocks and Closures in Ruby|author=Bill Venners|access-date=2 May 2015|archive-date=18 April 2015|archive-url=https://web.archive.org/web/20150418162505/http://www.artima.com/intv/closures.html|url-status=live}}</ref>
<ref name="Methods">{{cite web|title=Methods|url=https://www.ruby-lang.org/en/documentation/faq/7/|website=Official Ruby FAQ|access-date=2021-06-20|archive-date=2022-06-28|archive-url=https://web.archive.org/web/20220628194402/https://www.ruby-lang.org/en/documentation/faq/7/|url-status=live}}</ref>
<ref name="stdlib-2.0.0master">{{cite web | url = https://wwwdocs.ruby-doclang.org/stdlib-2en/master/standard_library_md.0.0/html | title = Ruby 2.0.0 Standard Library Documentation | access-date = 2013-12-09 | last = Britt | first = James | archive-date = 2013-11-13 | archive-url = https://web.archive.org/web/20131113002837/http://www.ruby-doc.org/stdlib-2.0.0/ | url-status = live }}</ref>
<ref name="faq-comparison">{{cite web|url=http://www.rootr.net/rubyfaq-2.html|title=The Ruby Language FAQ: How Does Ruby Stack Up Against...?|access-date=2 May 2015|archive-date=8 May 2015|archive-url=https://web.archive.org/web/20150508051623/http://www.rootr.net/rubyfaq-2.html|url-status=live}}</ref>
<ref name="while">{{cite web|title=[ruby-talk:01120] Re: The value of while...|quote=In Ruby's syntax, statement is just a special case of an expression that cannot appear as an argument (e.g. multiple assignment).|url=http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/1120|access-date=2008-12-06|archive-date=2011-07-17|archive-url=https://web.archive.org/web/20110717205553/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/1120|url-status=dead}}</ref>
Line 462 ⟶ 310:
 
{{refbegin}}
* {{ citation | first1 = David | last1 = Black | first2 = Joseph | last2 = Leo | date = March 15, March 2019 | title = The Well-Grounded Rubyist | edition = Third | publisher = [[Manning Publications]] | page = 584 | isbn = 978-1617295218 }}
* {{citation | first1 = Sandi | last1 = Metz | date = August 22, August 2018 | title = Practical Object-Oriented Design: An Agile Primer Using Ruby | edition = Second | publisher = [[Addison-Wesley Professional]] | page = 288 | isbn = 978-0-13-445647-8 | url = https://www.informit.com/store/practical-object-oriented-design-an-agile-primer-using-9780134456478 | access-date = February 13, February 2020 | archive-date = February 13, 2020 | archive-url = https://web.archive.org/web/20200213161150/https://www.informit.com/store/practical-object-oriented-design-an-agile-primer-using-9780134456478 | url-status = live }}
* {{ citation | first1 = Peter | last1 = Cooper | date = July 12, July 2016 | title = Beginning Ruby: From Novice to Professional | edition = Third | publisher = [[Apress]] | page = 492 | isbn = 978-1484212790 }}
* {{citation | first1 = Lucas | last1 = Carlson | first2 = Leonard | last2 = Richardson | date = April 3, April 2015 | title = Ruby Cookbook: Recipes for Object-Oriented Scripting | edition = Second | publisher = [[O'Reilly Media]] | page = 963 | isbn = 978-1449373719 | url = http://oreilly.com/catalog/9781449373719 }}
* {{citation | first1 = Hal | last1 = Fulton | first2 = André | last2 = Arko | date = March 2, March 2015 | title = The Ruby Way: Solutions and Techniques in Ruby Programming | edition = Third | publisher = [[Addison-Wesley Professional]] | page = 816 | isbn = 978-0-321-71463-3 | url = https://www.informit.com/store/ruby-way-solutions-and-techniques-in-ruby-programming-9780321714633 | access-date = February 13, February 2020 | archive-date = February 13, 2020 | archive-url = https://web.archive.org/web/20200213161150/https://www.informit.com/store/ruby-way-solutions-and-techniques-in-ruby-programming-9780321714633 | url-status = live }}
* {{ citation | first1 = Dave | last1 = Thomas | first2 = Chad | last2 = Fowler | first3 = Andy | last3 = Hunt | date = July 7, July 2013 | title = Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide | edition = Fourth | publisher = [[Pragmatic Bookshelf]] | page = 888 | isbn = 978-1937785499 }}
* {{ citation | first1 = Jeremy | last1 = McAnally | first2 = Assaf | last2 = Arkin | date = March 28, March 2009 | title = Ruby in Practice | edition = First | publisher = [[Manning Publications]] | page = 360 | isbn = 978-1933988474 }}
* {{citation | first1 = David | last1 = Flanagan | first2 = Yukihiro | last2 = Matsumoto | date = January 25, January 2008 | title = The Ruby Programming Language | edition = First | publisher = [[O'Reilly Media]] | page = [https://archive.org/details/rubyprogrammingl00davi/page/446 446] | isbn = 978-0-596-51617-8 | url = https://archive.org/details/rubyprogrammingl00davi/page/446 }}
* {{citation | first1 = Kevin | last1 = Baird | date = June 8, 2007 | title = Ruby by Example: Concepts and Code | edition = First | publisher = [[No Starch Press]] | page = 326 | isbn = 978-1593271480 | url = https://nostarch.com/rubyex | access-date = February 13, February 2020 | archive-date = January 13, 2020 | archive-url = https://web.archive.org/web/20200113062530/https://nostarch.com/rubyex | url-status = live }}
* {{citation | first1 = Michael | last1 = Fitzgerald | date = May 14, May 2007 | title = Learning Ruby | edition = First | publisher = [[O'Reilly Media]] | page = [https://archive.org/details/learningruby0000fitz/page/255 255] | isbn = 978-0-596-52986-4 | url = https://archive.org/details/learningruby0000fitz/page/255 }}
{{refend}}
 
Line 480 ⟶ 328:
 
* {{official website|https://www.ruby-lang.org/en/}}
* [https://wwwdocs.ruby-doclang.org/ Ruby documentation]
 
{{Ruby programming language}}