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
