History of Ruby
The history of the Ruby programming language began when Yukihiro Matsumoto first conceived of the language in 1993, then released it in 1995. Annual releases of the language often take place on Christmas Day. Interest in the language surged around 2005 because of the Ruby on Rails framework.
Conception
Ruby creator Yukihiro Matsumoto has said that Ruby was conceived in 1993. In a 1999 post to the ruby-talk mailing list, he describes some of his early ideas about the language:[1]
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 then. But I didn't like it, because I didn't think it was a true object-oriented language – 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 describes the design of Ruby as being like a simple Lisp language at its core, with an object system like that of Smalltalk, blocks inspired by higher-order functions, and practical utility like that of Perl.[2]
The name "Ruby" originated during an online chat session between Matsumoto and Keiju Ishitsuka on February 24, 1993, before any code had been written for the language.[3] Initially two names were proposed: "Coral" and "Ruby". Matsumoto chose the latter in a later e-mail to Ishitsuka.[4] Matsumoto later noted a factor in choosing the name "Ruby" – it was the birthstone of one of his colleagues.[5][6]
First publication
The first public release of Ruby 0.95 was announced on Japanese domestic newsgroups on December 21, 1995.[7][8] Subsequently, three more versions of Ruby were released in two days.[3] The release coincided with the launch of the 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 design, classes with inheritance, mixins, iterators, closures, exception handling and garbage collection.[9]
Early releases
Following the release of Ruby 0.95 in 1995, several stable versions of Ruby were released in the following years:
- Ruby 1.0: December 25, 1996[3]
- Ruby 1.2: December 1998
- Ruby 1.4: August 1999
- Ruby 1.6: September 2000
In 1997, the first article about Ruby was published on the Web. In the same year, Matsumoto was hired by netlab.jp to work on Ruby as a full-time developer.[3]
In 1998, the Ruby Application Archive was launched by Matsumoto, along with a simple English-language homepage for Ruby.[3]
In 1999, the first English language mailing list ruby-talk began, which signaled a growing interest in the language outside Japan.[10] In this same year, Matsumoto and Keiju Ishitsuka wrote the first book on Ruby, The Object-oriented Scripting Language Ruby (オブジェクト指向スクリプト言語 Ruby), which was published in Japan in October 1999. It would be followed in the early 2000s by around 20 books on Ruby published in Japanese.[3]
By 2000, Ruby was more popular than Python in Japan.[11] In September 2000, the first English language book Programming Ruby was printed, which was later freely released to the public, further widening the adoption of Ruby amongst English speakers. In early 2002, the English-language ruby-talk mailing list was receiving more messages than the Japanese-language ruby-list, demonstrating Ruby's increasing popularity in the non-Japanese speaking world.
Ruby 1.8
Ruby 1.8 was initially released August 2003, was stable for a long time, and was retired June 2013.[12] Although deprecated, there is still code based on it. Ruby 1.8 is only partially compatible with Ruby 1.9.
Ruby 1.8 has been the subject of several industry standards. The language specifications for Ruby were developed by the Open Standards Promotion Center of the Information-Technology Promotion Agency (a Japanese government agency) for submission to the Japanese Industrial Standards Committee (JISC) and then to the International Organization for Standardization (ISO). It was accepted as a Japanese Industrial Standard (JIS X 3017) in 2011[13] and an international standard (ISO/IEC 30170) in 2012.[14][15]
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.[16]
Ruby 1.9
Ruby 1.9 was released on Christmas Day in 2007. Effective with Ruby 1.9.3, released October 31, 2011,[17] 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.[18] Adoption of 1.9 was slowed by changes from 1.8 that required many popular third party gems to be rewritten.
Ruby 1.9 introduces many significant changes over the 1.8 series. Examples include:[19]
- block local variables (variables that are local to the block in which they are declared)
- an additional lambda syntax:
f = ->(a,b) { puts a + b }
- an additional Hash literal syntax using colons for symbol keys:
{symbol_key: "value"} == {:symbol_key => "value"}
- per-string character encodings are supported
- new socket API (IPv6 support)
require_relative
import security
Ruby 1.9 has been obsolete since February 23, 2015,[20] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.0
Ruby 2.0 added several new features, including:
- method keyword arguments,
- a new method,
Module#prepend
, for extending a class, - a new literal for creating an array of symbols,
- new API for the lazy evaluation of Enumerables, and
- a new convention of using #to_h to convert objects to Hashes.[21]
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, 2013, there were only five known (minor) incompatibilities.[22]
Ruby 2.0 has been obsolete since February 24, 2016,[23] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.1
Ruby 2.1.0 was released on Christmas Day in 2013.[24] The release includes speed-ups, bugfixes, and library updates.
Starting with 2.1.0, Ruby's versioning policy is more like semantic versioning.[25] Although similar, Ruby's versioning policy is not compatible with semantic versioning:
Ruby | Semantic versioning |
---|---|
MAJOR: Increased when incompatible change which can't be released in MINOR. Reserved for special events. | MAJOR: Increased when you make incompatible API changes. |
MINOR: increased every Christmas, may be API incompatible. | MINOR: increased when you add functionality in a backwards-compatible manner. |
TEENY: security or bug fix which maintains API compatibility. May be increased more than 10 (such as 2.1.11), and will be released every 2–3 months. | PATCH: increased when you make backwards-compatible bug fixes. |
PATCH: number of commits since last MINOR release (will be reset at 0 when releasing MINOR). | - |
Semantic versioning also provides additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format, not available at Ruby.
Ruby 2.1 has been obsolete since April 1, 2017,[26] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.2
Ruby 2.2.0 was released on Christmas Day in 2014.[27] The release includes speed-ups, bugfixes, and library updates and removes some deprecated APIs. Most notably, Ruby 2.2.0 introduces changes to memory handling – an incremental garbage collector, support for garbage collection of symbols and the option to compile directly against jemalloc. It also contains experimental support for using vfork(2) with system() and spawn(), and added support for the Unicode 7.0 specification.
Features that were made obsolete or removed include callcc, the DL library, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application as well as various C API functions.[28]
Ruby 2.2 has been obsolete since April 1, 2018,[29] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
- PowerPC64 performance
- Since version 2.2.1,[30] Ruby MRI performance on PowerPC64 was improved.[31][32][33]
Ruby 2.3
Ruby 2.3.0 was released on Christmas Day in 2015. A few notable changes include:
- The ability to mark all string literals as frozen by default with a consequently large performance increase in string operations.[34]
- Hash comparison to allow direct checking of key/value pairs instead of just keys.
- A new safe navigation operator
&.
that can ease nil handling (e.g. instead ofif obj && obj.foo && obj.foo.bar
, we can useif obj&.foo&.bar
). - The did_you_mean gem is now bundled by default and required on startup to automatically suggest similar name matches on a NameError or NoMethodError.
- Hash#dig and Array#dig to easily extract deeply nested values (e.g. given
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
, the value Foo Baz can now be retrieved byprofile.dig(:social, :wikipedia, :name)
). .grep_v(regexp)
which will match all negative examples of a given regular expression in addition to other new features.
The 2.3 branch also includes many performance improvements, updates, and bugfixes including changes to Proc#call, Socket and IO use of exception keywords, Thread#name handling, default passive Net::FTP connections, and Rake being removed from stdlib.[35]
Ruby 2.4
Ruby 2.4.0 was released on Christmas Day in 2016. A few notable changes include:
- Binding#irb: Start a REPL session similar to binding.pry
- Unify Fixnum and Bignum into Integer class
- String supports Unicode case mappings, not just ASCII
- A new method, Regexp#match?, which is a faster boolean version of Regexp#match
- Thread deadlock detection now shows threads with their backtrace and dependency
The 2.4 branch also includes performance improvements to hash table, Array#max, Array#min, and instance variable access.[36]
Ruby 2.5
Ruby 2.5.0 was released on Christmas Day in 2017.[37] A few notable changes include:
- rescue and ensure statements automatically use a surrounding do-end block (less need for extra begin-end blocks)
- Method-chaining with yield_self
- Support branch coverage and method coverage measurement
- Easier Hash transformations with Hash#slice and Hash#transform_keys
On top of that come a lot of performance improvements like faster block passing (3 times faster), faster Mutexes, faster ERB templates and improvements on some concatenation methods.
Ruby 2.6
Ruby 2.6.0 was released on Christmas Day in 2018.[38] A few notable changes include:
- JIT (experimental)
- RubyVM::AbstractSyntaxTree (experimental)
Ruby 2.7
Ruby 2.7.0 was released on Christmas Day in 2019.[39] A few notable changes include:
- Pattern Matching (experimental)
- REPL improvement
- Compaction GC
- Separation of positional and keyword arguments
Ruby 3.0
Ruby 3.0.0 was released on Christmas Day in 2020.[40] It is known as Ruby 3x3. One of its main aims was to switch the interpreter to a Just-In-Time Compiler, to make programs faster.
Ruby 3.1
Version 3.1.0 was released on Christmas of 2021. It included an autocomplete feature.[41]
Ruby 3.2
Ruby 3.2.0 was released on Christmas Day of 2022. It includes support for WebAssembly.[42]
Table of versions
Version | Latest teeny version | Initial release date | End of support phase | End of security maintenance phase |
---|---|---|---|---|
1.0 | NA | 1996-12-25[43] | NA | NA |
1.8 | 1.8.7-p375[44] | 2003-08-04[45] | 2012-06[46] | 2014-07-01[47] |
1.9 | 1.9.3-p551[48] | 2007-12-25[49] | 2014-02-23[50] | 2015-02-23[51] |
2.0 | 2.0.0-p648[52] | 2013-02-24[53] | 2015-02-24[52] | 2016-02-24[52] |
2.1 | 2.1.10[54] | 2013-12-25[55] | 2016-03-30[54][56] | 2017-03-31[57][58] |
2.2 | 2.2.10[59] | 2014-12-25[60] | 2017-03-28[61] | 2018-03-31[62] |
2.3 | 2.3.8[63] | 2015-12-25[64] | 2018-06-20[65] | 2019-03-31[65] |
2.4 | 2.4.10[66] | 2016-12-25[67] | 2019-04-01[68] | 2020-04-01[68] |
2.5 | 2.5.9[69] | 2017-12-25[70] | 2021-04-05[69] | 2021-04-05[69] |
2.6 | 2.6.10[71] | 2018-12-25[72] | 2022-04-12[71] | 2022-04-12[71] |
2.7 | 2.7.8[73] | 2019-12-25[74] | 2023-03-30[73] | 2023-03-30[73] |
3.0 | 3.0.5[75] | 2020-12-25[76] | TBA | TBA |
3.1 | 3.1.2[77] | 2021-12-25[78] | TBA | TBA |
3.2 | 3.2.0[79] | 2022-12-25[79] | TBA | TBA |
Legend: Old version, not maintained Old version, still maintained Latest version Future release |
References
- ^ Shugo Maeda (17 December 2002). "The Ruby Language FAQ". Retrieved 2 March 2014.
- ^ Matsumoto, Yukihiro (13 February 2006). "Re: Ruby's lisp features". Retrieved 15 February 2020.
- ^ a b c d e f "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 RFFuby 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.
- ^ "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.
- ^ "Support for Ruby 1.9.3 has ended". Retrieved 2 May 2015.
- ^ 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.
- ^ usa (2016-02-24). "Support plans for Ruby 2.0.0 and Ruby 2.1". Ruby-lang.org. Retrieved 2017-04-18.
- ^ "Ruby 2.1.0 is released". December 25, 2013. Retrieved December 26, 2013.
- ^ "Semantic Versioning starting with Ruby 2.1.0". December 21, 2013. Retrieved December 27, 2013.
- ^ "Support for Ruby 2.1 has ended". Retrieved 4 April 2017.
- ^ "Ruby 2.2.0 Released". December 25, 2014. Retrieved January 4, 2015.
- ^ "ruby/NEWS at v2_2_0 · ruby/ruby · GitHub". GitHub. Retrieved 2 May 2015.
- ^ "Support of Ruby 2.2 has ended". Retrieved 29 Dec 2019.
- ^ 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 2.3.0 changes and features". Running with Ruby. dev.mensfeld.pl. 14 November 2015.
- ^ "Ruby/NEWS at v.2_3_0 - ruby/ruby". GitHub. Retrieved 25 December 2015.
- ^ "Ruby 2.4.0 Released". www.ruby-lang.org. Retrieved 2016-12-30.
- ^ "Ruby 2.5.0 Released". Retrieved 2018-05-02.
- ^ "Ruby 2.6.0 Released". Ruby Programming Language. 2018-12-25. Retrieved 2018-12-25.
- ^ "Ruby 2.7.0 Released". Ruby Programming Language. 2019-12-25. Retrieved 2019-12-25.
- ^ "Ruby 3.0.0 Released". Ruby Programming Language. 2020-12-25. Retrieved 2020-12-25.
- ^ "Ruby 3.1.0 Released". Ruby Programming Language. 2021-12-25. Retrieved 2022-12-26.
- ^ "Ruby 3.2.0 Released". Ruby Programming Language. 2022-12-25. Retrieved 2022-12-26.
- ^ "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.
- ^ a b c "Ruby 2.0.0-p648 Released". www.ruby-lang.org.
- ^ "Ruby 2.0.0-p0 is released". www.ruby-lang.org.
- ^ a b "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 Issue Tracking System". bugs.ruby-lang.org.
- ^ "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.
- ^ "Support of Ruby 2.2 has ended". www.ruby-lang.org.
- ^ "Ruby 2.3.8 Released". www.ruby-lang.org.
- ^ "Ruby 2.3.0 Released". www.ruby-lang.org.
- ^ a b "Support of Ruby 2.3 has ended". www.ruby-lang.org. 2019-03-31.
- ^ "Ruby 2.4.10 Released". Ruby Programming Language. 2020-03-31. Retrieved 2020-04-01.
- ^ "Ruby 2.4.0 Released". www.ruby-lang.org.
- ^ a b "Support of Ruby 2.4 has ended". www.ruby-lang.org.
- ^ a b c "Ruby 2.5.9 Released". Ruby Programming Language. 2021-04-05. Retrieved 2021-04-05.
- ^ "Ruby 2.5.0 Released". www.ruby-lang.org.
- ^ a b c "Ruby 2.6.10 Released". www.ruby-lang.org. 2022-04-12. Retrieved 2023-07-04.
- ^ "Ruby 2.6.0 Released". www.ruby-lang.org.
- ^ a b c "Ruby 2.7.8 Released". www.ruby-lang.org. 2023-03-30. Retrieved 2023-05-23.
- ^ "Ruby 2.7.0 Released". www.ruby-lang.org. 2019-12-25.
- ^ "Ruby 3.0.5 Released". www.ruby-lang.org. 2022-11-24. Retrieved 2022-11-24.
- ^ "Ruby 3.0.0 Released". www.ruby-lang.org. 2020-12-25.
- ^ "Ruby 3.1.2 Released". www.ruby-lang.org. 2022-04-12. Retrieved 2022-04-12.
- ^ "Ruby 3.1.0 Released". www.ruby-lang.org. 2021-12-25.
- ^ a b "Ruby 3.2.0 Released". www.ruby-lang.org. 2022-12-25.