Trivial Incompatibility a Lot of Enhancement * 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 * Array o Array#nitems o Array#[m,n] = nil places nil in the array. * Hash o New literal hash syntax 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... 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 [Ruby2] 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 * 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