Keyword arguments, which give flexibility to API design
This looks good to replace all those options hashes in rails for example, though I wish they'd made it an all or nothing thing, apparently you can still do this:
def foo(x, str: "foo", num: 424242)
i.e. use some named and some unnamed in the same method which looks ugly.Module#prepend, which is a new way to extend a class
Compared to something like Go, I do worry the Ruby inheritance picture is becoming overly complex, but I guess there must have been some use case for this - anyone know where it is going to be used?
__dir__, which returns the dirname of the file currently being executed
This is a great little enhancement which means I can replace File.dirname(__FILE__) from the start of a lot of utility scripts. Would love to have seen more little improvements like this.
The UTF-8 default encoding, which make many magic comments omissible
At last! This should have been in 1.9.
Performance improvements
While these are incremental, it's nice to see more improvements - thanks Ruby team!
Onigmo, which is a new regexp engine (a fork of Oniguruma)
Not sure what this changes from Oniguruma.
Refinements
Refinements seems to be the headline feature for a lot of people, but I have two hesitations about it: it's encouraging a practice which has come to be seen as one of the most dangerous parts of Ruby - monkey patching, and the process of deciding its inclusion seems to have brought about a few schisms with the community developing alternative Ruby implementations because of performance implications, and raised wider issues about the Ruby design process:
http://www.confreaks.com/videos/1278-rubyconf2012-toward-a-d...
There is the argument of course that it's attempting to limit monkey patching and therefore limit the damage caused, but should it be encouraged at all? It'd be interesting to hear more on what happened here from anyone has been following this closely.