This document is a list of user visible feature changes made between releases except for bug fixes.
Note that each entry is kept so brief that no reason behind or reference information is supplied with. For a full list of changes with all sufficient information, see the ChangeLog file.
nil/true/false
nil/true/false objects are frozen. [Feature #8923]
Hash
literal
Symbol
key followed by a colon can be quoted. [Feature #4276]
default argument fixed a very longstanding bug that an optional argument was not accessible in its default value expression. [Bug #9593]
New methods:
New methods:
New methods:
Extended methods:
min, min_by, max and max_by supports optional argument to return multiple elements.
New methods:
New methods:
New methods:
GC.latest_gc_info
returns :state to represent current GC
status.
Improvements
Introduce incremental marking for major GC
. [Feature #10137]
Improvements
IO#read_nonblock
and IO#write_nonblock
for pipes on Windows are supported.
New methods:
Kernel#itself
Improvements
Kernel#throw
raises UncaughtThrowError
, subclass of ArgumentError
when there is no corresponding catch block, instead of ArgumentError
.
Extended method:
Process
execution methods such as Process.spawn
opens the file in write mode for redirect from [:out, :err].
Improvements
Most symbols which are returned by String#to_sym
and String#intern
are GC-able.
New methods:
Method#curry
([ arity ]) returns a curried Proc
.
Method#super_method
returns a Method
of superclass, which would be called when super is used.
Enumerable#slice_before
's state management deprecated.
Enumerable#chunk
's state management deprecated.
incompatible changes:
Rename GC.stat
entries. [Feature #9924] See docs.google.com/spreadsheets/d/11Ua4uBr6o0k-nORrZLEIIUkHJ9JRzRR0NyZfrhEEnc8/edit?usp=sharing
incompatible changes:
Change overriding policy for duplicated key. [Bug #10315] { **hash1, **hash2 } contains values of hash2 for duplicated keys.
incompatible changes:
Math.log
now raises Math::DomainError
instead of returning NaN if the base is less than 0, and returns NaN instead of -infinity if both of two arguments are 0.
Math.atan2
now returns values like as expected by C99 if both two arguments are infinity.
incompatible changes:
ArgumentError
is no longer raised when lambda Proc
is passed as a block, and the number of yielded arguments does not match the formal arguments of the lambda, if just an array is yielded and its length matches.
Process
execution methods such as Process.spawn
opens the file in write mode for redirect from [:out, :err]. Before Ruby 2.2, it was opened in read mode.
callcc is obsolete. use Fiber
instead.
Digest() should now be thread-safe. If you have a problem with regard to on-demand loading under a multi-threaded environment, preload “digest/*” modules on boot or use this method instead of directly referencing Digest::*.
Digest::HMAC has been removed just as previously noticed.
DL
DL has been removed from stdlib. Please use Fiddle
instead!
New methods:
Extended methods:
find method accepts “ignore_error” keyword argument.
Matrix
New methods:
Matrix#first_minor(row, column) returns the submatrix obtained by deleting the specified row and column.
Matrix#cofactor(row, column) returns the (row, column) cofactor which is obtained by multiplying the first minor by (-1)**(row + column).
Matrix#adjugate returns the adjugate of the matrix.
hstack and vstack are new instance and class methods to stack matrices horizontally and vertically.
Matrix#laplace_expansion(row_or_column: num) returns the laplace_expansion along the num
-th row or column.
Vector.basis(size:, index:) returns the specified basis vector.
Unary - and + added for Vector and Matrix.
Vector#cross_product generalized to arbitrary dimensions.
Vector#dot and cross are aliases for inner_product and cross_product.
Vector#angle_with returns the angle with its argument
New instance and class method independent? to test linear independence.
Pathname#/ is aliased to Pathname#+
.
New methods:
Rake
Updated to Rake 10.4.0. For full release notes see:
RubyGems
Updated to RubyGems 2.4.2. For full release notes see:
docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01
TSort.tsort_each
, TSort.each_strongly_connected_component
and TSort.each_strongly_connected_component_from
returns an enumerator if no block given.
XMLRPC
Added new parser class named LibXMLStreamParser.
lib/mathn.rb
Show deprecated warning [Feature #10169]
ext/date/lib/date/format.rb
Removed because it's empty file.
Digest::HMAC has finally ceased to exist. Use OpenSSL::HMAC
or an external gem instead.
time.rb
Time.parse
, Time.strptime
, Time.rfc2822
, Time.xmlschema
may produce fixed-offset Time
objects. It is happen when usual localtime doesn't preserve the offset from UTC.
Time.httpdate
produces always UTC Time
object.
Time.strptime
raises ArgumentError
when no date information.
lib/rational.rb
Removed because it is deprecated from 2009.
lib/complex.rb
Removed because it is deprecated from 2009.
lib/prettyprint.rb
Removed PrettyPrint#first?
lib/minitest/*.rb
Removed because it conflicts to minitest 5. [Feature #9711]
lib/test/*/.rb
Removed because it conflicts to minitest 5, and it was just an wrapper of minitest 4. [Feature #9711]
lib/uri
support RFC 3986. [Feature #2542]
GServer
GServer is extracted to gserver gem. It's unmaintain code.
Logger::Application is extracted to logger-application gem. It's unmaintain code.
ObjectSpace
(after requiring “objspace”)
ObjectSpace.memsize_of(obj)
returns a size includes sizeof(RVALUE). [Bug #8984]
Prime
incompatible changes:
Prime.prime? now returns false for negative numbers. This method should not be used to know the number is composite or not. [Bug #7395]
Removed Psych::EngineManager [Bug #8344]
Deprecated APIs removed. [Feature #9502]
Check_SafeStr -> SafeStringValue rb_check_safe_str -> SafeStringValue rb_quad_pack -> rb_integer_pack rb_quad_unpack -> rb_integer_unpack rb_read_check : access struct FILE internal. no replacement. rb_struct_iv_get : internal function. no replacement. struct rb_blocking_region_buffer : internal type. no replacement. rb_thread_blocking_region_begin -> rb_thread_call_without_gvl family rb_thread_blocking_region_end -> rb_thread_call_without_gvl family TRAP_BEG -> rb_thread_call_without_gvl family TRAP_END -> rb_thread_call_without_gvl family rb_thread_select -> rb_thread_fd_select struct rb_exec_arg : internal type. no replacement. rb_exec : internal function. no replacement. rb_exec_arg_addopt : internal function. no replacement. rb_exec_arg_fixup : internal function. no replacement. rb_exec_arg_init : internal function. no replacement. rb_exec_err : internal function. no replacement. rb_fork : internal function. no replacement. rb_fork_err : internal function. no replacement. rb_proc_exec_n : internal function. no replacement. rb_run_exec_options : internal function. no replacement. rb_run_exec_options_err : internal function. no replacement. rb_thread_blocking_region -> rb_thread_call_without_gvl family rb_thread_polling -> rb_thread_wait_for rb_big2str0 : internal function. no replacement. rb_big2ulong_pack -> rb_integer_pack rb_gc_set_params : internal function. no replacement. rb_io_mode_flags -> rb_io_modestr_fmode rb_io_modenum_flags -> rb_io_oflags_fmode
struct RBignum is hidden. [Feature #6083] Use rb_integer_pack and rb_integer_unpack instead.
struct RRational is hidden. [Feature #9513] Use rb_rational_num and rb_rational_den instead.
rb_big_new and rb_big_resize takes a size_t instead of long.
rb_num2long returns a long instead of SIGNED_VALUE.
rb_num2ulong returns an unsigned long instead of VALUE.
st hash table uses power-of-two sizes for speed [Feature #9425]. Lookups are 10-25% faster if using appropriate hash functions. However, weaknesses in hash distribution can no longer be masked by prime number-sized tables, so extensions may need to tweak hash functions to ensure good distribution.
rb_sym2str() added. This is almost same as `rb_id2str(SYM2ID(sym))` but not pinning a dynamic symbol.
rb_str_cat_cstr() added. This is the same as `rb_str_cat2()`.
`rb_str_substr()` and `rb_str_subseq()` will share middle of a string, but not only the end of a string, in the future. Therefore, result strings may not be NUL-terminated, `StringValueCStr()` is needed calling to obtain a NUL-terminated C string.
rb_tracepoint_new() supports new internal events accessible only from C:
RUBY_INTERNAL_EVENT_GC_ENTER
RUBY_INTERNAL_EVENT_GC_EXIT r47528
rb_hash_delete() now does not call the block given to the current method.
rb_extract_keywords() and rb_get_kwargs() exported. See README.EXT for details.
jemalloc is optionally supported via `./configure –with-jemalloc` jemalloc may be suitable when system malloc is slow or prone to fragmentation. [Feature #9113]
* Most symbols which are returned by String#to_sym and String#intern are GC-able [Feature #9634] * Introduce incremental marking for major GC. [Feature #10137] * Enable lazy sweep on GC caused by malloc().
VM
* Use frozen string literals for Hash#[] and Hash#[]= * Fast keyword arguments passing [Feature #10440] * Allow to receive huge splatted array by a rest argument [Feature #10440]
* Process creation methods, such as spawn(), uses vfork() system call. vfork() is faster than fork() when the parent process uses huge memory.