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. 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 added support for the Unicode 7.0 specification. Since version 2.2.1, Ruby MRI performance on 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 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 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 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 , 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 , 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 variable access. 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