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.
Version [1] | Latest teeny version | Initial release date | End of support phase [2] | End of security maintenance phase |
---|---|---|---|---|
1.0 | NA | 1996-12-25 [3] | NA | NA |
1.8 | 1.8.7-p375 [4] | 2003-08-04 [5] | 2012-06 [6] | 2014-07-01 [7] |
1.9 | 1.9.3-p551 [8] | 2007-12-25 [9] | 2014-02-23 [10] | 2015-02-23 [11] |
2.0 | 2.0.0-p648 [12] | 2013-02-24 [13] | 2015-02-24 [12] | 2016-02-24 [12] |
2.1 | 2.1.10 [14] | 2013-12-25 [15] | 2016-03-30 [14] [16] | 2017-03-31 [17] [18] |
2.2 | 2.2.10 [19] | 2014-12-25 [20] | 2017-03-28 [21] | 2018-03-31 [22] |
2.3 | 2.3.8 [23] | 2015-12-25 [24] | 2018-06-20 [25] | 2019-03-31 [25] |
2.4 | 2.4.10 [26] | 2016-12-25 [27] | 2019-04-01 [28] | 2020-04-01 [28] |
2.5 | 2.5.9 [29] | 2017-12-25 [30] | 2021-04-05 [29] | 2021-04-05 [29] |
2.6 | 2.6.10 [31] | 2018-12-25 [32] | 2022-04-12 [31] | 2022-04-12 [31] |
2.7 | 2.7.8 [33] | 2019-12-25 [34] | 2023-03-30 [33] | 2023-03-30 [33] |
3.0 | 3.0.7 [35] | 2020-12-25 [36] | 2023-04-01 | 2024-04-23 [35] |
3.1 | 3.1.5 [37] | 2021-12-25 [38] | 2024-04-01 | expected 2025-03-31 |
3.2 | 3.2.4 [39] | 2022-12-25 [40] | TBA | expected 2026-03-31 |
3.3 | 3.3.1 [41] | 2023-12-25 [42] | TBA | expected 2027-03-31 |
Legend: Old version Older version, still maintained Latest version Future release |
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: [43]
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. [44]
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. [45] Initially two names were proposed: "Coral" and "Ruby". Matsumoto chose the latter in a later e-mail to Ishitsuka. [46] Matsumoto later noted a factor in choosing the name "Ruby" – it was the birthstone of one of his colleagues. [47] [48]
The first public release of Ruby 0.95 was announced on Japanese domestic newsgroups on December 21, 1995. [49] [50] Subsequently, three more versions of Ruby were released in two days. [45] 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. [51]
Following the release of Ruby 0.95 in 1995, several stable versions of Ruby were released in the following years:
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. [45]
In 1998, the Ruby Application Archive was launched by Matsumoto, along with a simple English-language homepage for Ruby. [45]
In 1999, the first English language mailing list ruby-talk began, which signaled a growing interest in the language outside Japan. [52] 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. [45]
By 2000, Ruby was more popular than Python in Japan. [53] 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 was initially released August 2003, was stable for a long time, and was retired June 2013. [54] 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 [55] and an international standard (ISO/IEC 30170) in 2012. [56] [57]
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. [58]
Ruby 1.9 was released on Christmas Day in 2007. Effective with Ruby 1.9.3, released October 31, 2011, [59] 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. [60] 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: [61]
f=->(a,b){putsa+b}
{symbol_key:"value"}=={:symbol_key=>"value"}
require_relative
import securityRuby 1.9 has been obsolete since February 23, 2015, [62] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.0 added several new features, including:
Module#prepend
, for extending a class,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. [64]
Ruby 2.0 has been obsolete since February 24, 2016, [65] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.1.0 was released on Christmas Day in 2013. [66] The release includes speed-ups, bugfixes, and library updates.
Starting with 2.1.0, Ruby's versioning policy is more like semantic versioning. [67] 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, [68] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.2.0 was released on Christmas Day in 2014. [69] 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. [70]
Ruby 2.2 has been obsolete since April 1, 2018, [71] and it will no longer receive bug and security fixes. Users are advised to upgrade to a more recent version.
Ruby 2.3.0 was released on Christmas Day in 2015. A few notable changes include:
&.
that can ease nil handling (e.g. instead of ifobj&&obj.foo&&obj.foo.bar
, we can use if obj&.foo&.bar
).profile={social:{wikipedia:{name:'Foo Baz'}}}<nowiki/>
, the value Foo Baz can now be retrieved by profile.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. [77]
Ruby 2.4.0 was released on Christmas Day in 2016. A few notable changes include:
The 2.4 branch also includes performance improvements to hash table, Array#max, Array#min, and instance variable access. [78]
Ruby 2.5.0 was released on Christmas Day in 2017. [79] A few notable changes include:
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.0 was released on Christmas Day in 2018. [80] A few notable changes include:
Ruby 2.7.0 was released on Christmas Day in 2019. [81] A few notable changes include:
Ruby 3.0.0 was released on Christmas Day in 2020. [82] 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.
Version 3.1.0 was released on Christmas of 2021. It included an autocomplete feature. [83]
Ruby 3.2.0 was released on Christmas Day of 2022. It includes support for WebAssembly. [84]
Ruby 3.2.0 was released on 25 December 2023. It adds a new parser named Prism, uses Lrama as a parser generator, adds a new pure-Ruby JIT compiler named RJIT, and many performance improvements especially YJIT. [85]
Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
PHP is a general-purpose scripting language geared towards web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementation is now produced by the PHP Group. PHP was originally an abbreviation of Personal Home Page, but it now stands for the recursive initialism PHP: Hypertext Preprocessor.
Ruby is an interpreted, high-level, general-purpose programming language. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including primitive data types. It was developed in the mid-1990s by Yukihiro "Matz" Matsumoto in Japan.
Yukihiro Matsumoto, also known as Matz, is a Japanese computer scientist and software programmer best known as the chief designer of the Ruby programming language and its original reference implementation, Matz's Ruby Interpreter (MRI). His demeanor has brought about a motto in the Ruby community: "Matz is nice and so we are nice," commonly abbreviated as MINASWAN.
Apache Groovy is a Java-syntax-compatible object-oriented programming language for the Java platform. It is both a static and dynamic language with features similar to those of Python, Ruby, and Smalltalk. It can be used as both a programming language and a scripting language for the Java Platform, is compiled to Java virtual machine (JVM) bytecode, and interoperates seamlessly with other Java code and libraries. Groovy uses a curly-bracket syntax similar to Java's. Groovy supports closures, multiline strings, and expressions embedded in strings. Much of Groovy's power lies in its AST transformations, triggered through annotations.
JRuby is an implementation of the Ruby programming language atop the Java Virtual Machine, written largely in Java. It is free software released under a three-way EPL/GPL/LGPL license. JRuby is tightly integrated with Java to allow the embedding of the interpreter into any Java application with full two-way access between the Java and the Ruby code.
Jonathan Gillette, known by the pseudonym why the lucky stiff, is a writer, cartoonist, artist, and programmer notable for his work with the Ruby programming language. Annie Lowrey described him as "one of the most unusual, and beloved, computer programmers" in the world. Along with Yukihiro Matsumoto and David Heinemeier Hansson, he was seen as one of the key figures in the Ruby community. His pseudonym might allude to the exclamation "Why, the lucky stiff!" from The Fountainhead by Ayn Rand.
Scala is a strong statically typed high-level general-purpose programming language that supports both object-oriented programming and functional programming. Designed to be concise, many of Scala's design decisions are intended to address criticisms of Java.
YARV is a bytecode interpreter that was developed for the Ruby programming language by Koichi Sasada. The goal of the project was to greatly reduce the execution time of Ruby programs.
The Sony NEWS is a series of Unix workstations sold during the late 1980s and 1990s. The first NEWS machine was the NWS-800, which originally appeared in Japan in January 1987 and was conceived as a desktop replacement for the VAX series of minicomputers.
Ikarus Scheme is a free software optimizing incremental compiler for R6RS Scheme that compiles directly to the x86 IA-32 architecture. Ikarus is the first public implementation of a large part of the R6RS Scheme standard. Version 0.0.3 has 94% of the total R6RS forms and procedures. Development stopped in 2008.
Matz's Ruby Interpreter or Ruby MRI is an implementation of the Ruby programming language named after Ruby creator Yukihiro Matsumoto ("Matz"). Until the specification of the Ruby language in 2012, the MRI implementation was considered the de facto reference, especially since an independent attempt to create the specification (RubySpec) had failed. Starting with Ruby 1.9, and continuing with Ruby 2.x and above, the official Ruby interpreter has been YARV.
Heroku is a cloud platform as a service (PaaS) supporting several programming languages. As one of the first cloud platforms, Heroku has been in development since June 2007, when it supported only the Ruby programming language, but now also supports Java, Node.js, Scala, Clojure, Python, PHP, and Go. For this reason, Heroku is said to be a polyglot platform as it has features for a developer to build, run and scale applications in a similar manner across most of these languages. Heroku was acquired by Salesforce in 2010 for $212 million.
MacRuby is a discontinued implementation of the Ruby language that ran on the Objective-C runtime and CoreFoundation framework under development by Apple Inc. which "was supposed to replace RubyCocoa". It targeted Ruby 1.9 and used the high performance LLVM compiler infrastructure starting with version 0.5. It supports both ahead-of-time and just-in-time compilation.
Rust is a multi-paradigm, general-purpose programming language that emphasizes performance, type safety, and concurrency. It enforces memory safety—meaning that all references point to valid memory—without a garbage collector. To simultaneously enforce memory safety and prevent data races, its "borrow checker" tracks the object lifetime of all references in a program during compilation.
Elixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also used to implement the Erlang programming language. Elixir builds on top of Erlang and shares the same abstractions for building distributed, fault-tolerant applications. Elixir also provides tooling and an extensible design. The latter is supported by compile-time metaprogramming with macros and polymorphism via protocols.
mruby is an interpreter for the Ruby programming language with the intention of being lightweight and easily embeddable. The project is headed by Yukihiro Matsumoto, with over 100 contributors currently working on the project.
Nim is a general-purpose, multi-paradigm, statically typed, compiled high-level systems programming language, designed and developed by a team around Andreas Rumpf. Nim is designed to be "efficient, expressive, and elegant", supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C, C++, Objective-C, and JavaScript, and supporting compiling to those same languages as intermediate representations.
Crystal is a high-level general-purpose, object-oriented programming language, designed and developed by Ary Borenszweig, Juan Wajnerman, Brian Cardiff and more than 400 contributors. With syntax inspired by the language Ruby, it is a compiled language with static type-checking, but specifying the types of variables or method arguments is generally unneeded. Types are resolved by an advanced global type inference algorithm. Crystal is currently in active development. It is released as free and open-source software under the Apache License version 2.0.
{{cite web}}
: CS1 maint: multiple names: authors list (link){{cite web}}
: CS1 maint: multiple names: authors list (link){{cite web}}
: CS1 maint: multiple names: authors list (link){{cite web}}
: CS1 maint: multiple names: authors list (link)