From 1ffc06198e778d20fa8d9aefee43827c5c91865d Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 25 Dec 2007 14:19:55 +0000 Subject: * doc/NEWS: changes for 1.9 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14707 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- doc/NEWS | 1044 +++++++++++++------------------------------------------------- 1 file changed, 207 insertions(+), 837 deletions(-) (limited to 'doc') diff --git a/doc/NEWS b/doc/NEWS index b4445fa59f..d2a5a23210 100644 --- a/doc/NEWS +++ b/doc/NEWS @@ -1,837 +1,207 @@ -= command line options - -: -W option - - new option to specify warning level. -W0 to shut up warnings, -W1 for normal level, - -W2 for verbose level. -w equals to -W2. - -= language syntax - -: arbitrary delimited string array - - %W(...) notation, word list literal like %w(...) with the - exception that #{} interpolation is allowed. - -: arbitrary delimited symbol literl - - :"foo", :"foo#{bar}", etc. - -: expression interpolation in strings - - Now arbitrary statements are allowed inside #{} interpolation - without escapes. In other hand, they can no longer access to - variables defined in eval. - -: negative number literals - - Digits preceded minus sign is a literal integer. - -: array expansion - - Fixed with the following behavior: - - a = *[1] - p a #=> [1] - - Now 1-element array in rhs is expanded properly. - - a = *[1] - p a #=> 1 - -: break and next - - Extended to take an optional expression, which is used as a value - for termination. - -: direct assignment to Foo::Bar is allowed - - also, you can define "class Foo::Bar; end". - -= language core - -: $stdin, $stdout, $stderr - - can be assignable again. the original stdio are preserved as STDIN, - STDOUT, STDERR. - -: $VERBOSE now has 3 levels - - nil - silence, false - medium (default), true - verbose - -: allocation framework - - any instance of class can be allocated by class.allocate, - (except for a few classes). - -: comparison of exception classes in a rescue clause - - changed to use Module#=== for comparing $! with the exception - class specified in each rescue clause. - - as the previous behavior was to use kind_of?, the effect is limited - to the SystemCallError case. SystemCallError.=== has been newly - defined to return true when the two have the same errno. With this - change, SystemCallError's with the same errno, such as Errno::EAGAIN - and Errno::EWOULDBLOCK, can both be rescued by listing just one of - them. - -: constants lookup - - improved at the performance of searching by using an internal hash - table. - - calls const_missing method of the class/module, if constant is not - found in the look up path. - -: expression parenthesis in the first argument - - altered to get the following code (note the space after p): - - p ("xx"*2).to_i - - Interpreted as: - - p (("xx"*2).to_i) - - Instead of: - - (p("xx"*2)).to_i - -: implicit comparison in conditional expressions - - Obsoleted except when it is used in -e. - - : between Range and $. - Use explicit comparison instead. - - : between Regexp and $_ - Use the unary method ~/re/ instead. - -: to_str - - added to get objects which define to_str() treated as String's. - - now almost all the built-in methods try each argument with to_str() - when they expect it to be a String. - - foo = Object.new - class < -:7:in `open': wrong argument type Object (expected String) (TypeError) - ruby 1.6.4 (2001-04-19) [i586-linux] - => -:7:in `open': No such file or directory - "foo" (Errno::ENOENT) - ruby 1.7.0 (2001-05-02) [i586-linux] - -: multiple assignment behavior - - Fixed so that "*a = nil" results in "a == []". - -= changes in core class library - -: open - - Extended so that when the third argument is permission flags it - calls open(2) instead of fopen(3). - -: sprintf - - new format specifier "%p" is available. - -: lambda and proc - - Proc object returns from these methods has the following attributes: - - * strict argument number check - * break and return terminates the proc execution. - -: warn(message) - - a method to give warnings. - -: abort() - - takes optional terminate message argument. - -: Object#initialize_copy - - copy constructor for clone and dup. - -: Object#instance_variable_set, Object#instance_variable_get - - added. - -: Object#singleton_method_removed -: Object#singleton_method_undefined - - Added. - -: Array#transpose - - added. - -: Array#fetch(index [, default]) - - Added. If a default value isn't given, raises index error if index - is out of range. - -: Array#insert(n, other, ...) - - Added. [ruby-talk:14289] - - This is much the same as (({ary[n,0] = [other,...]})) except - returing self. - - ary = [0,1,2,3] - ary[2, 0] = [4, 5, 6] - p ary - - ary = [0,1,2,3] - ary.insert(2, 4, 5, 6) - p ary - -: Array#sort! - - Changed to always return self without checking whether the sequence - of the elements was modified or not. - - Beware that this behavior is not guaranteed to continue in the - future. Do not rely on its return value. [ruby-dev:12506] - -: Array#filter - - Previously deprecated, now removed. Use Array#collect!. - -: Array#pack, String#unpack - - Allows comment in template strings. - -: Array#pack, String#unpack - - New templates 'q' and 'Q' for 64bit integer (signed and unsigned respectively). - -: Array#new - - Now takes block to fill initial values. E.g. - - Array.new(10) { |i| i + 1 } - => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - -: Array#fill - - Takes block to get the values to fill. - -: Array#fetch - - Takes block to get the default value. - -: Array#zip - - added. - -: Hash#update - - Takes block to resolve key conflict. - -: Hash#merge and Hash#merge! - - update hash. Hash#merge! is a synonym of Hash#update. - -: String#split - - if "sep" argument is a string, regular expression meta characters - are escaped internally. - -: String#rstrip - - chop off NULs at the end of strings. - -: String#to_i - - Now accepts optional base argument. - - "101".to_i(10) => 101 - "101".to_i(2) => 5 - "101".to_i(8) => 65 - "101".to_i(16) => 257 - - A base argument of 0 guesses at the base. - - "101".to_i(0) => 101 - "0b101".to_i(0) => 5 - "0101".to_i(0) => 65 - "0x101".to_i(0) => 257 - -: String#[regexp, nth] - - Extended to accepts optional second argument. - - It tries match between self and REGEXP, then returns the - content of the NTH regexp register. - -: String#casecmp - - Added. This is a case insensitive version of String#<=>. - -: String#chomp - - If $/ == "\n", chops off last newlines (any of \n, \r, \r\n). - -: String#eql? - - Changed to be always case sensitive. - -: String#insert(n, other) - - Added. - - This is much the same as (({str[n, 0] = other})) except returing - self. - -: String#lstrip, rstrip, lstrip!, rstrip! - - Added. These strip only left or right part of a string. - -: String#match - - Added. - -: String/Array methods - - Returns an instance of receivers class. - -: String.new - - The first argument becomes optional. - -: Symbol#intern - - Added. - -: Symbol.all_symbols - - Added. [ruby-dev:12921] - -: IO - - 64bit off_t support by Janathan Baker. - -: IO#read -: IO#sysread - - takes optinal second argument for read buffer. - -: IO::sysopen - - New method to get a raw file descriptor. - -: IO#sysseek - - Added. - -: IO#fsync - - new method that copies all in-memory parts of a file to disk and - waits until the device reports that all parts are on stable storage. - Implemented with fsync(2) or equivalent. - -: IO.open - - Made public. Can only associate an IO object with a file number - like IO.new and IO.for_fd, but can take a block. - -: IO.for_fd - - Added as a synonym for IO.new. - -: IO.read - - Added. Like IO.readlines, except it returns the entire file as a - string. [ruby-talk:9460] - -: File#fnmatch, File::Constants::FNM_* - - Added. Refer to the fnmatch(3) manpage for details. - - Localism is FNM_DOTMATCH which has the opposite meaning of the - commonly known FNM_PERIOD, which does not exist in Ruby. - - e.g. - - # exclude files matching "*.bak" case-insensitively. - files.reject! {|fn| File.fnmatch?("*.bak", fn, File::FNM_CASEFOLD) } - -: File.lchmod -: File.lchown - - Added. - -: File.open, IO.open - - File mode can be specified by flags like open(2), - e.g. File::open(path, File::CREAT|File::WRONLY). - -: Regexp#options - - Added. - -: Regexp.last_match(n) - - Extended to take an optional argument. - -: MatchData#captures - - added. - -: Dir#path - - Added. - -: Dir.chdir - - Extended to take a block. - -: Dir.glob - - Made to support meta-character escaping by a backslash. Wildcards - and spaces may now be escaped using a backslash. - -: Dir.open - - Changed to return what the block returns when a block is given, just - as File.open does. (It always returned (({nil})) in 1.6 and - prior) - -: Dir.chdir - - Changed to warn only when invoked from multiple threads or no block - is given. [ruby-dev:13823] - - Dir.chdir('foo') { - Dir.chdir('bar') { # previously warned - puts Dir.pwd - } - } - -: Dir#pos= - - Returns the new position instead of self. - -: Dir::glob - - Now accepts optional FNM_* flags via the second argument, whereas - Dir::[] doesn't. - - Dir.glob("makefile", File::FNM_CASEFOLD) #=> ['Makefile', 'makefile'] - -: Class#inherited - - Method is called when Class is inherited by another class. - - class A; end - def A.inherited(by) - puts "A inherited by #{by.inspect}" - end - class B < A; end - - Prints out "A inherited by B" - -: Module#include? - - Added. [ruby-dev:13941] - -: Module#included - - Added. This is a hook called after Module#append_feature. - -: Module#method_removed -: Module#method_undefined - - Added. - -: Module.new, Class.new - - Extended to take block. - -: Time - - Extended to accept a negative time_t. (Only when the platform - supports it) - - p Time.at(-1) - => Thu Jan 01 08:59:59 JST 1970 - -: Time#to_a -: Time#zone - - Made to return "UTC" under gmtime. It used to return a platform - dependent value, typically "GMT", in 1.6 and prior. - -: Marshal to use marshal_dump and marshal_load - - if a dumping object responds to 'marshal_dump', Marshal.dump calls - it, and dumps object returned. Marshal.load allocates a new instance - using "allocate", then calls its "marshal_load" with dumped data. - Marshal format version is now 4.8 (was 4.6 in 1.6.8). - -: Marshal - - Fixed not to dump anonymous classes/modules. - - Fixed with loading modules. - -: Thread#group - - new method to get belonging ThreadGroup. - -: Thread#terminate - - synonym of Thread#exit - -: Thread#join - - Optional argument limits maximum time to wait the thread in second. - And returns nil if timed out. - -: ThreagGroup#enclose - - prohibits thread movement from/to enclosed groups. - -: Range#step([step=1]) - - Added. - -: SystemCallError - - SystemCallError's "===" match (used in rescue also) is now based on its errno. - -: Interrupt - - Made a subclass of SignalException. (It was a subclass of - Exception in 1.6 and prior) - -: NameError and NoMethodError - - Moved and now NoMethodError < NameError < StandardError. - -: NoMethodError - - Added. [ruby-dev:12763] - -: NotImplementError - - Finally obsoleted. Use NotImplementedError. - -: SystemCallError.=== - - Added. (See the "Comparison of exception classes in a rescue clause" - paragraph above) [ruby-dev:12670] - -: SystemExit#status - - Added. - -: Proc#== - - Added. - -: Method#== - - Added. - -: UnboundMethod is no longer subclass of Method - - class hierarchy changed. - -: Enumerable#all? -: Enumerable#any? -: Enumerable#inject -: Enumerable#sort_by - - Added. - -: Math.acos(x) -: Math.asin(x) -: Math.atan(x) -: Math.cosh(x) -: Math.hypot(x,y) -: Math.sinh(x) -: Math.tanh(x) - - Added. - -: Process.abort -: Process.exit - - synonym of Kernel#abort, and Kernel#exit respectively. - -: Process::detach(pid) - - new method to detach child process. child process will be "wait"ed - automagically. - -: Process.times - - Moved from Time.times. (Time.times still remains but emits a - warning) - -: Process.waitall - - Added. - -: Process::Status - - Added. (({$?})) is now an instance of this class. - -: Process::UID, Process::GID, Process::Sys, - - Added. - -: Signal - - Added. This module has module functions Signal.trap and Signal.list. - -= changes in bundled libraries - -: lib/cgi.rb - - cgi[name] returns CGI::QueryExtension::Value that wraps string - value, no longer array. - -: lib/timeout - - timeout "function" wrapped in Timeout module. - -: TCPServer#accept, UNIXServer#accept, Socket#accept - - New methods to return an accepted socket fd. - -: Date and DateTime - - lib/date.rb now provides both Date and DateTime. - - Some methods have been renamed. But the old names are still alive. - - Some new methods have been added (Date::parse, Date#strftime, etc.). - - Date#mjd now returns the chronological modified Julian day number. - - All facilities about tjd have been removed. - -: Curses - - Updated. New methods and constants for using the mouse, character - attributes, colors and key codes have been added. - -: Net::HTTP - - New version of Net::HTTP has introduced seriously incompatible - changes. For details, see document embedded in net/http.rb itself. - -: Socket.pack_sockaddr_in, Socket.unpack_sockaddr_in - - Added. Utility for direct Socket access. - -: Socket.pack_sockaddr_un, Socket.unpack_sockaddr_un - - Added. Utility for direct Socket access. - -: TCPServer#listen, UNIXServer#listen - - Added. - -: TCPSocket.new -: TCPSocket.open - - Extended to take an address and a port number for the local side in - optional 3rd and 4th arguments. - -= newly bundled library - -: ext/bigdecimal - - variable precision decimal number - -: ext/dl - - an interface to the dynamic linker. - -: ext/enumerator - - a helper module for the Enumerable interface. - -: ext/io/wait - - IO wait methods. - -: ext/iconv - - wrapper library of (({iconv})). - -: ext/openssl - - OpenSSL for Ruby - -: ext/racc/cparse - - Racc runtime library in C. (Racc is a parser generator for ruby) - -: ext/stringio - - Pseudo (({IO})) class from/to (({String})). - -: ext/strscan - - Fast string scanner library. - -: ext/syck - - fast YAML parser. - -: lib/abbrev - - creates an abbreviation table from a list - -: lib/benchmark - - Ruby scripts benchmarker - -: lib/cgi/session/pstore - - cgi/session back-end using pstore - -: lib/csv - - reads/writes CSV files. - -: lib/date/format - - strftime for Date class - -: lib/drb - - dRuby or distributed Ruby - -: lib/fileutils - - file utility library. - -: lib/generator - - converts an internal iterator to an external iterator - -: lib/gserver - - generic server used by xmlrpc - -: lib/ipaddr - - manipulates IP address. - -: lib/multi-tk - - to allow safe Tk, etc. - -: lib/open-uri - - easy-to-use wrapper for net/http and net/ftp - -: lib/optparse - - command line options utility library - -: lib/pathname - - handles pathname in OO manner. - -: lib/pp - - prettyprinter for Ruby objects - -: lib/prettyprint - - implements prettyprint algorithm. - -: lib/profiler - - library to implement -r "profile" - -: lib/racc/parser - - RACC parser generator runtime in Ruby. - -: lib/scanf - - scan string and retrieve object with format - -: lib/set - - Set class - -: lib/runit - - RubyUnit compatible layer for test/unit - -: lib/test/unit - - unit testing framework for Ruby - -: lib/tmpdir - - get temporary directory path. - -: lib/tsort - - topological sorting library. - -: lib/rexml - - REXML XML library - -: lib/webrick - - generic internet server kit - -: lib/xmlrpc - - simple RPC via XML - -: lib/un - - used like 'ruby -run -e cp -- -p foo bar'. neat, isn't it? - -: lib/win32/registry - - win32/registry is registry accessor - -: lib/yaml - - YAML Ain't Mark-up Language - -= removed libraries - -: lib/ftplib - - use net/ftp instead. - -: lib/telnet - - use net/telnet instead. - -= new port - -: WindowsCE port -: Win32 BCC - -= interpreter implementation - -: garbage collector - - faster, but uses more memory for the worst case. - -: string concatenation - - faster by avoiding too frequent realloc(3). +Changes for 1.9 + +Incompatible (Severe) + + * New syntax and semantics + o Block arguments are always local + o Block arguments + o New semantics for block arguments + o Block local variables + * String + o No longer an Enumerable + o ?c semantics + o "One-char-wide" semantics for String#[] and String#[]= [Ruby2] + o Encoding-awareness + * IO operations + o IO#getc + +Incompatible (Trivial) + + * New syntax and semantics + o Method used for splat arguments: #to_splat + o defined? and local variables + * Kernel and Object + o Kernel#require + * Class and Module + o Class variables behavior + o Module#attr is an alias of attr_reader + o Module#instance_methods, #private_instance_methods, #public_instance_methods + o Extra subclassing check when binding UnboundMethods + * Exceptions + o Equality of exceptions + o SystemStackError + o SecurityError + o Removed Exception#to_str [Ruby2] + * Array + o Array#nitems + o Array#[m,n] = nil places nil in the array. + * Hash + o Hash#to_s is equivalent to Hash#inspect + o Semantics for Hash#each and Hash#each_pair + o Hash#select + * Integer + o Integer(nil) raises TypeError + * Struct + o Struct#inspect + * File and Dir operations + o #to_path in File.path, File.chmod, File.lchmod, File.chown, File.lchown, File.utime, File.unlink... [Ruby2] + o Dir.[], Dir.glob + o Dir.exist? + * IO operations + o Non-blocking IO + o IO#getbyte, IO#readbyte, StringIO#getbyte, StringIO#readbyte + o Kernel#open takes encoding specified + o IO#initialize now accepts an IO argument + o StringIO#readpartial + o IO#lines + o IO#bytes + o IO.try_convert + o Limit input in IO#gets, IO#readline, IO#readlines, IO#each_line, IO#lines, IO.foreach, IO.readlines, StringIO#gets, StringIO#readline, StringIO#each, StringIO#readlines + o IO#ungetc, StringIO#ungetc + o IO#internal_encoding, IO#external_encoding, IO#set_encoding + o IO.pipe takes encoding option + * Time + o New format in Time#to_s + o Timezone information preserved on Marshal.dump/load + * Symbols: restriction on literal symbols + * $SAFE and bound methods + * Deprecation + o VERSION and friends + o Kernel.to_a + o Kernel#getc + o Object#type + o Hash#index + o ENV.index + o Symbol#to_int + o Removed Array and Hash #indices, #indexes + o libraries: base64, mailread, getopts, parsearg, soap, wsdl + +Compatible + + * New syntax and semantics + o New literal hash syntax + o New syntax for lambdas + o .() and calling Procs without #call/#[] + o Mandatory arguments after optional arguments allowed + o Multiple splats allowed + o Arguments to #[] + o printf-style formatted strings (%) + o Newlines allowed before ternary colon + * Kernel and Object + o BasicObject + o #instance_exec + o Object#=~ + o Object#tap + o Kernel#instance_variable_defined? + o Kernel#define_singleton_method + o Kernel#singleton_methods, Kernel#methods + * Class and Module + o Module#const_defined?, #const_get and #method_defined? + o Module#class_variable_defined? + o #class_variable_{set,get} + o Class of singleton classes + o #module_exec + * Binding#eval + * Blocks and Procs + o Arity of blocks without arguments + o proc is now a synonym of Proc.new + * Blocks and Procs + o Proc#yield + o Passing blocks to #[] + o Proc#lambda? + * Enumerable and Enumerator + o Enumerable methods called without a block + o Enumerable#cycle + o Enumerable#each_with_index + o Enumerable#first(n) + o Enumerable#group_by + o Enumerable#find_index + o Enumerable#take + o Enumerable#drop + o Enumerable#take_while + o Enumerable#drop_while + o Enumerator#each + o Enumerable#inject (#reduce) without a block + o Enumerable#count + o Enumerable#reduce + o Enumerator#with_index + o Enumerable##min_by, #max_by + o Enumerable#zip + o Enumerable#minmax and minmax_by + o Enumerator#rewind + o Enumerator#next + * Regexp#match, String#match + o Regexp#match, String#match + * Fiber: coroutines/micro-threads + * Array + o Block argument to Array#index, Array#rindex [Ruby2] + o Array#combination + o Array#permutation + o Array#product + o Array#pop, Array#shift + o Array#to_s is equivalent to Array#inspect + o Array.try_convert + * Hash + o preserving item insertion order + o Hash#_compare_by_identity and Hash#compare_by_identity? + o Hash.try_convert + * Integer + o Integer#odd?, #even? + o Integer#pred + * Method + o Method#receiver + o Method#name + o Method#owner + * Numeric + o Numeric#upto, #downto, #times, #step + o Numeric#scalar?, Complex#scalar? + o Numeric#div + o Numeric#fdiv + * Range + o Range#cover? + o Range#include? + o Range#min, Range#max + * Regexp + o Regexp#=== matches symbols + o Regexp.try_convert + * String + o String#clear + o String#each_char + o String#ord + o String#partition, #rpartition + o String#lines + o String#bytes + o String#encoding + o String#force_encoding + o String#start_with?, #end_with? + o String#unpack with a block + o String#hash + o String#upto + o String.try_convert + o String.encoding, String#force_encoding, String#encode + * Symbol + o Zero-length symbols allowed + o Symbol#=== matches strings + o Symbol#intern + o Symbol#encoding + o Symbol methods similar to those in String + * Math + o Math#log and Math#log2 + * File and Dir operations + o New methods + * Process + o Process.setrlimit + o Process.daemon + o Process.exec + * Misc. new methods + o public_send + o GC.stress, GC.stress= + o Method#hash, Proc#hash + o __method__ and __callee__ + o Symbol#to_proc + +* Implementation + * Memory Diet + * Object Compaction - Object, Array, String, Hash, Struct, Class, Module + * st_table compaction (inlining small tables) + * YARV -- cgit v1.2.3