: IO::sysopen a new method to get a raw file descriptor. : 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.). : Thread#join Optional argument limits maximum time to wait the thread in second. And returns nil if timed out. : dl module Imported. An interface to the dynamic linker. : IO#sysseek Added. : IO 64bit off_t support by Janathan Baker. : abort() optional terminate message argument. : iconv module Imported. Wrapper library of (({iconv})). : Dir::glob Now accepts optional FNM_* flags via the second argument, whereas Dir::[] doesn't. Dir.glob("makefile", File::FNM_CASEFOLD) #=> ['Makefile', 'makefile'] : fileutils module Imported. File utility library. : racc runtime module Imported. Racc runtime library. (Racc is a parser generator for ruby) : tsort module Imported. Topological sorting library. : stringio module Imported. Pseudo (({IO})) class from/to (({String})). : strscan module Imported. Fast string scanner library. : 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#fill takes block to get the values to fill. : Array#new takes block to get the values to fill. : Array#fetch takes block to get the default value. : Hash#update takes block to resolve key conflict. : IO#fsync Added. : 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 : allocation framework any instance of class can be allocated by class.allocate, (except a few classes). : break and next Extended to take an optional expression, which is used as a value for termination. [experimental] : 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. : expression parenthesis in the first argument Experimentally 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 is 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] : pp module Imported. Prity Printing library. : open Extended so that when the third argument is permission flags it calls open(2) instead of fopen(3). : Array#fetch Added. : 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] : Curses Updated. New methods and constants for using the mouse, character attributes, colors and key codes have been 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 } } : Enumerable#all? : Enumerable#any? : Enumerable#inject : Enumerable#sort_by Added. : 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. : IO#puts do not treat Array specially. : IO.for_fd Added. : IO.read Added. [ruby-talk:9460] : Interrupt Made a subclass of SignalException. (It was a subclass of Exception in 1.6 and prior) : Marshal Fixed not to dump anonymous classes/modules. Fixed with loading modules. : MatchData#to_ary Added for convenience of Regexp#match. [ruby-dev:12766] Previously we had to do: foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz").to_a[1..-1] p [foo, bar, baz] But now can do: _, foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz") p [foo, bar, baz] : Math.acos(x) : Math.asin(x) : Math.atan(x) : Math.cosh(x) : Math.hypot(x,y) : Math.sinh(x) : Math.tanh(x) Added. : Method#== Added. : 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. : Multiple assignment behavior Fixed so that "*a = nil" results in "a == []". : NameError and NoMethodError Moved and now NoMethodError < NameError < StandardError. : NoMethodError Added. [ruby-dev:12763] : NotImplementError Finally obsoleted. Use NotImplementedError. : Object#singleton_method_removed : Object#singleton_method_undefined Added. : Proc#== Added. : Proc#yield Added. This is equivalent to Proc#call except it does not check the number of given arguments, which are thus passed to the proc as-is. : 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. : Range#step([step=1]) Added. : Range#to_ary Added. You can now do something like this: a, b, c = 1..3 : Regexp#options Added. : Regexp.last_match(n) Extended to take an optional argument. : Signal Added. This module has module functions Signal.trap and Signal.list. : 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. : String#[regexp, nth] Extended to accepts optional second argument. 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] : SystemCallError.=== Added. (See the "Comparison of exception classes in a rescue clause" paragraph above) [ruby-dev:12670] : SystemExit#status Added. : 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. : 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. To be investigated: Sat Feb 24 03:15:49 2001 Yukihiro Matsumoto * io.c (set_stdin): preserve original stdin. * io.c (set_outfile): preserve original stdout/stderr.