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 * Array o Array#nitems was removed (use count {|i| !i.nil?}) * 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#[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 Kernel#open takes encoding specified o IO#initialize now accepts an IO argument o StringIO#readpartial 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 Object#=~ 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 * 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#map,collect_all called without a block returns an enumerator. * Regexp#match, String#match o Regexp#match, String#match * Fiber: coroutines/micro-threads * Array 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 * 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#ord o String#encoding o String#force_encoding o String#unpack with a block o String#hash 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.daemon * Misc. new methods o public_send o GC.count o ObjectSpace.count_objects o Method#hash, Proc#hash o __callee__ * Implementation * Memory Diet * Object Compaction - Object, Array, String, Hash, Struct, Class, Module * st_table compaction (inlining small tables) * YARV