| # -*- rdoc -*- | |
| = NEWS for Ruby 2.2.0 | |
| 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. | |
| == Changes since the 2.1.0 release | |
| === Language changes | |
| * 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] | |
| === Core classes updates (outstanding ones only) | |
| * Binding | |
| * New methods: | |
| * Binding#local_variables | |
| * Binding#receiver | |
| * Dir | |
| * New methods: | |
| * Dir#fileno | |
| * Enumerable | |
| * New methods: | |
| * Enumerable#slice_after | |
| * Enumerable#slice_when | |
| * Extended methods: | |
| * min, min_by, max and max_by supports optional argument to return | |
| multiple elements. | |
| * Float | |
| * New methods: | |
| * Float#next_float | |
| * Float#prev_float | |
| * File | |
| * New methods: | |
| * File.birthtime | |
| * File#birthtime | |
| * File::Stat | |
| * New methods: | |
| * File::Stat#birthtime | |
| * GC | |
| * GC.latest_gc_info returns :state to represent current GC status. | |
| * Improvements | |
| * Introduce incremental marking for major GC. [Feature #10137] | |
| * IO | |
| * Improvements | |
| * IO#nonblock_read and IO#nonblock_write for pipes on Windows are supported. | |
| * Kernel | |
| * New methods: | |
| * Kernel#itself | |
| * Improvements | |
| * Kernel#throw raises UncaughtThrowError, subclass of ArgumentError when | |
| there is no corresponding catch block, instead of ArgumentError. | |
| * Process | |
| * Extended method: | |
| * Process execution methods such as Process.spawn opens the file in write | |
| mode for redirect from [:out, :err]. | |
| * String | |
| * New methods: | |
| * String#unicode_normalize | |
| * String#unicode_normalize! | |
| * String#unicode_normalized? | |
| * Symbol | |
| * Improvements | |
| * Most symbols which are returned by String#to_sym and | |
| String#intern are GC-able. | |
| * Method | |
| * 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. | |
| === Core classes compatibility issues (excluding feature bug fixes) | |
| * Enumerable | |
| * Enumerable#slice_before's state management deprecated. | |
| * Enumerable#chunk's state management deprecated. | |
| * GC | |
| * incompatible changes: | |
| * Rename GC.stat entries. [Feature #9924] | |
| See https://docs.google.com/spreadsheets/d/11Ua4uBr6o0k-nORrZLEIIUkHJ9JRzRR0NyZfrhEEnc8/edit?usp=sharing | |
| * IO | |
| * incompatible changes: | |
| * When flushing file IO with IO#flush, you cannot assume that the metadata | |
| of the file is updated immediately. On some platforms (especially | |
| Windows), it is delayed until the filesystem load is decreased. | |
| Use IO#fsync if you want to guarantee updating metadata. | |
| * Math | |
| * 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. | |
| * Proc | |
| * 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 | |
| * 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. | |
| === Stdlib updates (outstanding ones only) | |
| * Continuation | |
| * callcc is obsolete. use Fiber instead. | |
| * Digest | |
| * 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! | |
| * Etc | |
| * New methods: | |
| * Etc.uname | |
| * Etc.sysconf | |
| * Etc.confstr | |
| * IO#pathconf | |
| * Etc.nprocessors | |
| * Find, Pathname | |
| * 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 | |
| * Pathname#/ is aliased to Pathname#+. | |
| * New methods: | |
| * Pathname#birthtime | |
| * Rake | |
| * Updated to Rake 10.4.0. For full release notes see: | |
| http://docs.seattlerb.org/rake/History_rdoc.html#label-10.4.0 | |
| * RubyGems | |
| * Updated to RubyGems 2.4.2. For full release notes see: | |
| http://docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01 | |
| * TSort | |
| * 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. | |
| === Stdlib compatibility issues (excluding feature bug fixes) | |
| * lib/mathn.rb | |
| * Show deprecated warning [Feature #10169] | |
| * ext/date/lib/date/format.rb | |
| * Removed because it's empty file. | |
| * Digest | |
| * 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 | |
| * 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] | |
| * Psych | |
| * Removed Psych::EngineManager [Bug #8344] | |
| === Built-in global variables compatibility issues | |
| === C API updates | |
| * 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 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. | |
| === Build system updates | |
| * jemalloc is optionally supported via `./configure --with-jemalloc` | |
| jemalloc may be suitable when system malloc is slow or prone | |
| to fragmentation. [Feature #9113] | |
| === Implementation changes | |
| * GC | |
| * 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 | |
| * Process creation methods, such as spawn(), uses vfork() system call. | |
| vfork() is faster than fork() when the parent process uses huge memory. |