Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Ruby (programming language)
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== History == === Early concept === According to Matsumoto, Ruby was conceived in 1993. In a 1999 post to the Ruby-Talk mailing list, he shared some of his early ideas about the language:<ref>{{cite web|url=https://www.ruby-lang.org/en/documentation/faq/|title=Official Ruby FAQ|author=Shugo Maeda|date=17 December 2002}}</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 described Ruby's design as resembling 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 1993, before any code had been written.<ref name="rubyconf-history-of-ruby"/> Two names were initially proposed: "Coral" and "Ruby". Matsumoto chose the latter in a subsequent email to Ishitsuka.<ref name="ruby-name"/> He also noted that one factor influencing the choice of the name was that a colleague's [[birthstone]] was [[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 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"/> 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"/> In 1999, the first English language mailing list ''ruby-talk'' began, which signaled a growing interest in the language outside Japan.<ref name="linuxdevcenter"/> 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.<ref name="rubyconf-history-of-ruby"/> By 2000, Ruby was more popular than Python in Japan.<ref name="programming-ruby"/> 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 and 1.9 === Ruby 1.8 was initially released August 2003, was stable for a long time, and was retired June 2013.<ref name="1.8.7-retirement"/> Although deprecated, there is still code based on it. Ruby 1.8 is only partially compatible with Ruby 1.9.{{cn|date=April 2025}} 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 [[Government of Japan|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<ref name="JIS X 3017"/> and an international standard (ISO/IEC 30170) in 2012.<ref name="IPA"/><ref name="IEC 30170"/> [[File:Ruby On Rails Logo.svg|thumb|[[Ruby on Rails]] logo]] 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 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 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"/> Ruby 2.2.0 includes speed-ups, bugfixes, and library updates and removes some deprecated APIs. Most notably, Ruby 2.2.0 introduces changes to memory handling{{snd}}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. Since version 2.2.1,<ref name="2-2-1-release"/> [[Ruby (programming language)#Matz's Ruby interpreter|Ruby MRI]] performance on [[ppc64|PowerPC64]] was improved.<ref name="2-2-1-changelog"/><ref name="Pedrosa-1"/><ref name="Pedrosa-2"/> 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.<ref name="obsolete-or-gone-in-2.2"/> Ruby 2.3.0 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.<ref name="Ruby 2.3.0 NEWS"/> Other notable changes include: * The ability to mark all [[string literal]]s as frozen by default with a consequently large performance increase in string operations.<ref name="frozen-strings"/> * Hash comparison to allow direct checking of key/value pairs instead of just keys. * A new [[safe navigation operator]] <code>&.</code> that can ease nil handling (e.g. instead of {{code|lang=ruby|code=if obj && obj.foo && obj.foo.bar}}, we can use <code>if obj&.foo&.bar</code>). * 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 <syntaxhighlight inline lang=ruby>profile = { social: { wikipedia: { name: 'Foo Baz' } } }</syntaxhighlight>, the value ''Foo Baz'' can now be retrieved by <code>profile.dig(:social, :wikipedia, :name)</code>). * <code>.grep_v(regexp)</code> which will match all negative examples of a given regular expression in addition to other new features. Ruby 2.4.0 includes performance improvements to hash table, Array#max, Array#min, and instance variable access.<ref name=":0"/> Other 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 A few notable changes in Ruby 2.5.0 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 for branch coverage and method coverage measurement, and 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. A few notable changes in Ruby 2.6.0 include an experimental [[just-in-time compiler]] (JIT), and ''RubyVM::AbstractSyntaxTree'' (experimental). A few notable changes in Ruby 2.7.0 include pattern Matching (experimental), REPL improvements, a compaction GC, and separation of positional and keyword arguments. === 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 signifies 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 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 2019 |website=Ruby |language=en-US |archive-date=10 May 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. Ruby 3.0 introduces RBS language to describe the types of Ruby programs for [[Static program analysis|static analysis]].<ref name="Ruby 3.0.0 Released"/> It is separated from general Ruby programs. 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 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 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, [[Memoization|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 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>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)