diff options
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 519 |
1 files changed, 3 insertions, 516 deletions
@@ -1,6 +1,5 @@ -# -*- rdoc -*- - -= NEWS for Ruby 2.0.0 +# -*- rd -*- += NEWS for Ruby 2.1.0 This document is a list of user visible feature changes made between releases except for bug fixes. @@ -9,523 +8,11 @@ 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 1.9.3 release +== Changes since the 2.0.0 release === Language changes - -* Added keyword arguments. - -* Added %i and %I for symbol list creation (similar to %w and %W). - -* Default source encoding is changed to UTF-8. (was US-ASCII) - -* No warning for unused variables starting with '_' - === Core classes updates (outstanding ones only) - -* ARGF - * added method: - * added ARGF#codepoints and ARGF#each_codepoint, like the corresponding - methods for IO. - -* Array - * added method: - * added Array#bsearch for binary search. - * incompatible changes: - * random parameter of Array#shuffle! and Array#sample now - will be called with one argument, maximum value. - * when given Range arguments, Array#values_at now returns nil for each - value that is out-of-range. - -* Enumerable - * added method: - * added Enumerable#lazy method for lazy enumeration. - -* Enumerator - * added method: - * added Enumerator#size for lazy size evaluation. - * extended method: - * Enumerator.new accept an argument for lazy size evaluation. - * new class Enumerator::Lazy for lazy enumeration - -* ENV - * aliased method: - * ENV.to_h is a new alias for ENV.to_hash - -* Fiber - * incompatible changes: - * Fiber#resume cannot resume a fiber which invokes "Fiber#transfer". - -* File - * extended method: - * File.fnmatch? now expands braces in the pattern if - File::FNM_EXTGLOB option is given. - -* GC - * improvements: - * introduced the bitmap marking which suppresses to copy a memory page - with Copy-on-Write. - * introduced the non-recursive marking which avoids unexpected stack overflow. - -* GC::Profiler - * added method: - * added GC::Profiler.raw_data which returns raw profile data for GC. - -* Hash - * added method: - * added Hash#to_h as explicit conversion method, like Array#to_a. - * extended method: - * Hash#default_proc= can be passed nil to clear the default proc. - -* IO - * deprecated methods: - * IO#lines, #bytes, #chars and #codepoints are deprecated. - -* Kernel - * added method: - * added Kernel#Hash conversion method like Array() or Float(). - * added Kernel#__dir__ which returns the absolute path of the - directory of the file from which this method is called. - * added Kernel#caller_locations which returns an array of - frame information objects. - * extended method: - * Kernel#warn accepts multiple args in like puts. - * Kernel#caller accepts second optional argument `n' which specify - required caller size. - * Kernel#to_enum and enum_for accept a block for lazy size evaluation. - * incompatible changes: - * system() and exec() closes non-standard file descriptors - (The default of :close_others option is changed to true by default.) - * respond_to? against a protected method now returns false unless - the second argument is true. - * __callee__ has returned to the original behavior, and now - returns the called name but not the original name in an - aliased method. - * Kernel#inspect does not call #to_s anymore - (it used to call redefined #to_s). - -* LoadError - * added method: - * added LoadError#path method to return the file name that could not be - loaded. - -* Module - * added method: - * added Module#prepend which is similar to Module#include, - however a method in the prepended module overrides the - corresponding method in the prepending module. - * added Module.prepended and Module.prepend_features, similar - to included and append_features. - * added Module#refine, which extends a class or module locally. - [experimental] - * extended method: - * Module#define_method accepts a UnboundMethod from a Module. - * Module#const_get accepts a qualified constant string, e.g. - Object.const_get("Foo::Bar::Baz") - -* Mutex - * added method: - * added Mutex#owned? which returns the mutex is held by current - thread or not. [experimental] - * incompatible changes: - * Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize - and Mutex#sleep are no longer allowed to be used from trap handler - and raise a ThreadError in such case. - * Mutex#sleep may spurious wakeup. Check after wakeup. - -* NilClass - * added method: - * added nil.to_h which returns {} - -* ObjectSpace::WeakMap - * new low level class to hold weak references to objects. - -* Proc - * incompatible change: - * removed Proc#== and #eql? so two procs are == only when they are - the same object. - -* Process - * added method: - * added getsid for getting session id (unix only). - -* Range - * added method: - * added Range#size for lazy size evaluation. - * added Range#bsearch for binary search. - -* RubyVM (MRI specific) - * added RubyVM::InstructionSequence.of to get the instruction sequence - from a method or a block. - * added RubyVM::InstructionSequence#path, #absolute_path, #label, - #base_label and #first_lineno to retrieve information from where - the instruction sequence was defined. - * added Environment variables to specify stack usage: - * RUBY_THREAD_VM_STACK_SIZE: vm stack size used at thread creation. - default: 128KB (32bit CPU) or 256KB (64bit CPU). - * RUBY_THREAD_MACHINE_STACK_SIZE: machine stack size used at thread - creation. default: 512KB or 1024KB. - * RUBY_FIBER_VM_STACK_SIZE: vm stack size used at fiber creation. - default: 64KB or 128KB. - * RUBY_FIBER_MACHINE_STACK_SIZE: machine stack size used at fiber - creation. default: 256KB or 256KB. - These variables are checked only at launched time. - * added constant DEFAULT_PARAMS to get above default parameters. - -* Signal - * added method: - * added Signal.signame which returns signal name - - * incompatible changes: - * Signal.trap raises ArgumentError when :SEGV, :BUS, :ILL, :FPE, :VTALRM - are specified. - -* String - * added method: - * added String#b returning a copied string whose encoding is ASCII-8BIT. - * change return value: - * String#lines now returns an array instead of an enumerator. - * String#chars now returns an array instead of an enumerator. - * String#codepoints now returns an array instead of an enumerator. - * String#bytes now returns an array instead of an enumerator. - -* Struct - * added method: - * added Struct#to_h returning values with keys corresponding to the - instance variable names. - -* Thread - * added method: - * added Thread#thread_variable_get for getting thread local variables - (these are different than Fiber local variables). - * added Thread#thread_variable_set for setting thread local variables. - * added Thread#thread_variables for getting a list of the thread local - variable keys. - * added Thread#thread_variable? for testing to see if a particular thread - variable has been set. - * added Thread.handle_interrupt as well as instance and singleton methods - pending_interrupt? for asynchronous handling of exceptions - * added Thread#backtrace_locations which returns similar information of - Kernel#caller_locations. - * new class Thread::Backtrace::Location to hold backtrace location - information. These are returned by Thread#backtrace_locations and - Kernel#caller_locations. - * incompatible changes: - * Thread#join and Thread#value now raises a ThreadError if target thread - is the current or main thread. - -* Time - * change return value: - * Time#to_s now returns US-ASCII encoding instead of BINARY. - -* TracePoint - * new class. This class is replacement of set_trace_func. - Easy to use and efficient implementation. - -* toplevel - * added method: - * added main.define_method which defines a global function. - * added main.using, which imports refinements into the current file or - eval string. [experimental] - === Core classes compatibility issues (excluding feature bug fixes) - -* Array#values_at - - See above. - -* String#lines -* String#chars -* String#codepoints -* String#bytes - - These methods no longer return an Enumerator, although passing a - block is still supported for backwards compatibility. - - Code like str.lines.with_index(1) { |line, lineno| ... } no longer - works because str.lines returns an array. Replace lines with - each_line in such cases. - -* IO#lines -* IO#chars -* IO#codepoints -* IO#bytes -* ARGF#lines -* ARGF#chars -* ARGF#bytes -* StringIO#lines -* StringIO#chars -* StringIO#codepoints -* StringIO#bytes -* Zlib::GzipReader#lines -* Zlib::GzipReader#bytes - - These methods are deprecated in favor of each_line, each_byte, - each_char and each_codepoint. - -* Proc#== -* Proc#eql? - - These methods were removed. Two procs are == only when they are - the same object. - -* Fixnum -* Bignum -* Float - - Fixnums, Bignums and Floats are frozen. - -* Signal.trap - - See above. - -* Merge Onigmo. - https://github.com/k-takata/Onigmo - -* The :close_others option is true by default for system() and exec(). - Also, the close-on-exec flag is set by default for all new file descriptors. - This means file descriptors doesn't inherit to spawned process unless - explicitly requested such as system(..., fd=>fd). - -* Kernel#respond_to? against a protected method now returns false - unless the second argument is true. - -* Kernel#respond_to_missing? -* Kernel#initialize_clone -* Kernel#initialize_dup - - These methods are now private. - -* Thread#join, Thread#value - - See above. - -* Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize and Mutex#sleep - - See above. - === Stdlib updates (outstanding ones only) - -* cgi - * Add HTML5 tag maker. - * CGI#header has been renamed to CGI#http_header and - aliased to CGI#header. - * When HTML5 tagmaker called, overwrite CGI#header, - CGI#header function is to create a <header> element. - -* CSV - * Removed CSV::dump and CSV::load to protect users from dangerous - serialization vulnerability - -* iconv - * Iconv has been removed. Use String#encode instead. - -* io/console - * new methods: - * added IO#cooked which sets the terminal to cooked mode within the given block. - * added IO#cooked! which sets the terminal to cooked. - * extended method: - * IO#raw, IO#raw!, and IO#getch accept keyword arguments, :min and :time. - -* io/wait - * new features: - * added IO#wait_writable method. - * added IO#wait_readable method as alias of IO#wait. - -* json - * updated to 1.7.7. - -* net/http - * new features: - * Proxies are now automatically detected from the http_proxy environment - variable. See Net::HTTP::new for details. - * gzip and deflate compression are now requested for all requests by - default. See Net::HTTP for details. - * SSL sessions are now reused across connections for a single instance. - This speeds up connection by using a previously negotiated session. - * Requests may be created from a URI which sets the request_uri and host - header of the request (but does not change the host connected to). - * Responses contain the URI requested which allows easier implementation of - redirect following. - * new methods: - * Net::HTTP#local_host - * Net::HTTP#local_host= - * Net::HTTP#local_port - * Net::HTTP#local_port= - * extended method: - * Net::HTTP#connect uses local_host and local_port if specified. - -* net/imap - * new methods: - * Net::IMAP.default_port - * Net::IMAP.default_imap_port - * Net::IMAP.default_tls_port - * Net::IMAP.default_ssl_port - * Net::IMAP.default_imaps_port - -* objspace - * new method: - * ObjectSpace.reachable_objects_from(obj) - -* openssl - * Consistently raise an error when trying to encode nil values. All instances - of OpenSSL::ASN1::Primitive now raise TypeError when calling to_der on an - instance whose value is nil. All instances of OpenSSL::ASN1::Constructive - raise NoMethodError in the same case. Constructing such values is still - permitted. - * TLS 1.1 & 1.2 support by setting OpenSSL::SSL::SSLContext#ssl_version to - :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client or :TLSv1_1, :TLSv1_1_server - :TLSv1_1_client. The version being effectively used can be queried - with OpenSSL::SSL#ssl_version. Furthermore, it is also possible to - blacklist the new TLS versions with OpenSSL::SSL:OP_NO_TLSv1_1 and - OpenSSL::SSL::OP_NO_TLSv1_2. - * Added OpenSSL::SSL::SSLContext#renegotiation_cb. A user-defined callback - may be set which gets called whenever a new handshake is negotiated. This - also allows to programmatically decline (client) renegotiation attempts. - * Support for "0/n" splitting of records as BEAST mitigation via - OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS. - * The default options for OpenSSL::SSL::SSLContext have changed to - OpenSSL::SSL::OP_ALL & ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS - instead of OpenSSL::SSL::OP_ALL only. This enables the countermeasure for - the BEAST attack by default. - * OpenSSL requires passwords for decrypting PEM-encoded files to be at least - four characters long. This led to awkward situations where an export with - a password with fewer than four characters was possible, but accessing the - file afterwards failed. OpenSSL::PKey::RSA, OpenSSL::PKey::DSA and - OpenSSL::PKey::EC therefore now enforce the same check when exporting a - private key to PEM with a password - it has to be at least four characters - long. - * SSL/TLS support for the Next Protocol Negotiation extension. Supported - with OpenSSL 1.0.1 and higher. - * OpenSSL::OPENSSL_FIPS allows client applications to detect whether OpenSSL - is FIPS-enabled. OpenSSL.fips_mode= allows turning on and off FIPS mode - manually in order to adapt to situations where FIPS mode would be an - explicit requirement. - * Authenticated Encryption with Associated Data (AEAD) is supported via - Cipher#auth_data= and Cipher#auth_tag/Cipher#auth_tag=. - Currently (OpenSSL 1.0.1c), only GCM mode is supported. - -* ostruct - * new methods: - * OpenStruct#[], []= - * OpenStruct#each_pair - * OpenStruct#eql? - * OpenStruct#hash - * OpenStruct#to_h converts the struct to a hash. - * extended method: - * OpenStruct.new also accepts an OpenStruct / Struct. - -* pathname - * extended method: - * Pathname#find returns an enumerator if no block is given. - -* rake - * rake has been updated to version 0.9.5. - - This version is backwards-compatible with previous rake versions and - contains many bug fixes. - - See - http://rake.rubyforge.org/doc/release_notes/rake-0_9_5_rdoc.html for a list - of changes in rake 0.9.3, 0.9.4 and 0.9.5. - -* RDoc - * RDoc has been updated to version 4.0 - - This version is largely backwards-compatible with previous rdoc versions. - The most notable change is an update to the ri data format (ri data must - be regenerated for gems shared across rdoc versions). Further API changes - are internal and won't affect most users. - - Notable changes include: - - * Page support for ri. Try `ri ruby:` for a list of pages in ruby or - `ri ruby:syntax/literals` for the syntax documentation for literals. - - This also works for gems such as `ri rspec:README` for the rspec gem's - README file. - * Markdown support. See ri RDoc::Markdown for details. - - See https://github.com/rdoc/rdoc/blob/master/History.rdoc for a full list - of changes in rdoc 4.0. - -* resolv - * new methods: - * Resolv::DNS#timeouts= - * Resolv::DNS::Config#timeouts= - -* rexml - * REXML::Document#write supports Hash arguments. - * REXML::Document#write supports new :encoding option. It changes - XML document encoding. Without :encoding option, encoding in - XML declaration is used for XML document encoding. - -* RubyGems - * Updated to 2.0.0 - - RubyGems 2.0.0 features the following improvements: - - * Improved support for default gems shipping with ruby 2.0.0+ - * A gem can have arbitrary metadata through Gem::Specification#metadata - * `gem search` now defaults to --remote and is anchored like gem list. - * Added --document to replace --rdoc and --ri. Use --no-document to - disable documentation, --document=rdoc to only generate rdoc. - * Only ri-format documentation is generated by default. - * `gem server` uses RDoc::Servlet from RDoc 4.0 to generate HTML - documentation. - - For an expanded list of updates and bug fixes see: - https://github.com/rubygems/rubygems/blob/master/History.txt - -* shellwords - * Shellwords#shellescape now stringifies the given object using to_s. - * Shellwords#shelljoin accepts non-string objects in the given - array, each of which is stringified using to_s. - -* stringio - * deprecated methods: - * StringIO#lines, #bytes, #chars and #codepoints are deprecated. - -* syslog - * Added Syslog::Logger which provides a Logger API atop Syslog. - * Syslog::Priority, Syslog::Level, Syslog::Option and Syslog::Macros - are introduced for easy detection of available constants on a - running system. - -* tmpdir - * incompatible changes: - * Dir.mktmpdir uses FileUtils.remove_entry instead of - FileUtils.remove_entry_secure. This means that applications should not - change the permission of the created temporary directory to make - accessible from other users. - -* yaml - * Syck has been removed. YAML now completely depends on libyaml being - installed. - * libyaml is now bundled with ruby, for cases where the library is not - installed locally. - -* zlib - * Added streaming support for Zlib::Inflate and Zlib::Deflate. This allows - processing of a stream without the use of large amounts of memory. - * Added support for the new deflate strategies Zlib::RLE and Zlib::FIXED. - * Zlib streams are now processed without the GVL. This allows gzip, zlib and - deflate streams to be processed in parallel. - * deprecated methods: - * Zlib::GzipReader#lines and #bytes are deprecated. - === Stdlib compatibility issues (excluding feature bug fixes) - -* OpenStruct new methods can conflict with custom attributes named - "each_pair", "eql?", "hash" or "to_h". - -* Dir.mktmpdir in lib/tmpdir.rb - - See above. - === C API updates - -* NUM2SHORT() and NUM2USHORT() added. They are similar to NUM2INT, but short. - -* rb_newobj_of() and NEWOBJ_OF() added. They create a new object of a given class. - |