mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			359 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			359 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
# -*- 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#read_nonblock and IO#write_nonblock 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
 | 
						|
 | 
						|
* Hash
 | 
						|
  * incompatible changes:
 | 
						|
    * Change overriding policy for duplicated key. [Bug #10315]
 | 
						|
      { **hash1, **hash2 } contains values of hash2 for duplicated keys.
 | 
						|
 | 
						|
* 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.
 |