Hi, Here's the brief list of changes from 1.4.x to 1.6.0. This list is by courtesy of Tomoya Akamatsu. = Changes in 1.6.0 * class variables * every built-in class calls initialize from new * Object#initialize takes exactly 0 argument * no to_a for multiple assignment (uses to_ary if available) * block_given? (new name for iterator?) * nice error messages (e.g. when you use global variabls for formal argument) * escape unprintable characters in error messages * RangeError exception * ScriptError exception * rescue => variable * rescue modifier * rescue clause for method body * syntax enhanced, e.g. a,b = File::split "foo/bar" a = yield b [1,2,3].sort do|a,b| b<=>a end.reverse [File::dirname "foo/bar"] * any object is now freezable * -e does not use temporary file * -X renamed to -C * RUBYOPT environment variabls * RUBYLIB_PREFIX environment variabls * security ($SAFE) bugfixes * get stack limit by getrlimit(2) * GC threshold has changed * singleton method for nil,true,false no singleton method for Fixnums and Symbols yet * consistent behavior for clone and dup * recycles dyna_var structure * built-in 'final' * no more Thread.join * ThreadGroup * Thread.start now takes arguments * Thread priority * thread aware debugger * select does not busy wait anymore * waitpid does not busy wait anymore * new regex \G (?>...) * regex does not support \< and \> offically * interrupt aware regex match * regex option /p renamed to /m * the default for $KCODE is now NONE (was EUC) * String#index's offset can handle multibyte characters * compile time string concatenation * better performance for string operations * slice, slice! * String#index, == uses the value of $= * lazy copy for String#dup * Kernel#scan * pack/unpack unerstands e(LE float), E(LE double), g(BE float), G(BE double), M(Q-encoding), U(utf-8), w(BER), Z(zero padded string) * Bignum can be packed * Array#concat, Array#+, Array#replace does not convert implicitly * Array#at, first, last * Array#filter -> Array#collect! * spaces can be escaped using backslashes within %w() * Enumerable#collect without block * return value for grep has changed * Numeric#truncate * Float#nan?, infinite?, finite? * Integer#modulo * consistent %, divmod * nil as valid Hash value * zsh like recursive wildcard (**) * own fnmatch implementation by eban * Dir::glob can take block * IO#open takes block, IO#new does not (Dir too) * printf can be specify argument order using $ * IO#sysread detects buffering error * IO#pid * IO#seek's argument can be omitted (default: SEEK_SET)n * IO#rewind set its line number to 0 * Proc#call distinguishes nil and no argument * IO#stat now returns a File::Stat object, not a Struct::Stat * rand's argument can be omitted (default: 0) * Symbol object * date2 integrated into date library * Time::local, Time::gm can take micro seconds * Time::utc, Time#utc, Time#utc? * Process#wait2, waitpid2 * blocks can be retrieved by rb_scan_args()