What Is Ruby (Coding)
What Is Ruby (Coding)
History[edit]
Main article: History of Ruby
Early concept[edit]
Matsumoto has said that Ruby was conceived in 1993. In a 1999 post to the ruby-talk mailing list, he
[12]
describes some of his early ideas about the language:
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
[13]
that of Perl.
The name "Ruby" originated during an online chat session between Matsumoto and Keiju Ishitsuka
[14]
on February 24, 1993, before any code had been written for the language. Initially two names
[15]
were proposed: "Coral" and "Ruby". Matsumoto chose the latter in a later e-mail to Ishitsuka.
Matsumoto later noted a factor in choosing the name "Ruby" – it was the birthstone of one of his
[16][17]
colleagues.
Early releases[edit]
The first public release of Ruby 0.95 was announced on Japanese domestic newsgroups on
[18][19] [14]
December 21, 1995. Subsequently, three more versions of Ruby were released in two days.
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,
[20]
exception handling and garbage collection.
Following the release of Ruby 0.95 in 1995, several stable versions of Ruby were released in the
following years:
[14]
● Ruby 1.0: December 25, 1996
● 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
[14]
hired by netlab.jp to work on Ruby as a full-time developer.
In 1998, the Ruby Application Archive was launched by Matsumoto, along with a simple
[14]
English-language homepage for Ruby.
In 1999, the first English language mailing list ruby-talk began, which signaled a growing interest in
[21]
the language outside Japan. 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
[14]
books on Ruby published in Japanese.
[22]
By 2000, Ruby was more popular than Python in Japan. 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.
● 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 2[edit]
Ruby 2.0 was intended to be fully backward compatible with Ruby 1.9.3. As of the official 2.0.0
[31]
release on February 24, 2013, there were only five known (minor) incompatibilities. 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
[32]
● a new convention of using #to_h to convert objects to Hashes.
[33]
Starting with 2.1.0, Ruby's versioning policy changed to be more similar to 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 – 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
[34]
added support for the Unicode 7.0 specification. Since version 2.2.1, Ruby MRI performance on
[35][36][37]
PowerPC64 was improved. 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
[38]
various C API functions.
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
[39]
Net::FTP connections, and Rake being removed from stdlib. Other notable changes include:
● The ability to mark all string literals as frozen by default with a consequently large
[40]
performance increase in string operations.
● 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 of if obj
&& obj.foo && obj.foo.bar, we can use if 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 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.
Ruby 2.4.0 includes performance improvements to hash table, Array#max, Array#min, and instance
[41]
variable access. Other notable changes include:
Ruby 3[edit]
[42]
Ruby 3.0.0 was released on Christmas Day in 2020. It is known as Ruby 3x3 which means that
[43]
programs would run three times faster in Ruby 3.0 comparing to Ruby 2.0. 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 and two more utilities Fibre Scheduler, and
[42]
experimental Ractor facilitate the goal. Ractor is light-weight and thread-safe as it is achieved by
exchanging messages rather than shared objects.
[42]
Ruby 3.0 introduces RBS language to describe the types of Ruby programs for static analysis. It
is separated from general Ruby programs.
[42]
There are some syntax enhancements and library changes in Ruby 3.0 as well.
[44]
Ruby 3.1 was released on Christmas Day in 2021. 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 POP are moved from
[45]
default gems to bundled gems.
[1]
Ruby 3.2 was released on Christmas Day in 2022. It brings support for being run inside of a
WebAssembly environment via a WASI interface. Regular expressions also receives some
improvements, including a faster, 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-based JIT compiler now supports more architectures on Linux.