Hi Michael --
My impression has always been that the main point of YARV is the gain in speed. It's definitely had an impact in at least some other areas -- for instance, ParseTree doesn't work in 1.9.1, which I know is a big issue for people who have been doing stuff that involves AST manipulation. (I don't follow that very closely but it sounds like there's progress toward coming up with a new approach that will work.)
Koichi is definitely still at work on the threading model. There's an interesting
interview with Koichi on threading and GC.
I'm not sure I understand your question about 1.9 and Rails. Do you mean will Rails start taking advantage of 1.9-only features? If so, I think it will, though as far as I know Rails 3.0 will still run on 1.8 (but I could be wrong about that).
Good question about the future of Ruby. I have no answer, though :-) I think the adoption of Ruby will increase, though there will always be organizations that simply don't look at open-source alternatives at all. It also depends on where in the organization. I've always felt, for example, that Rails is really great for intra-organizational applications, and in many cases it's a lot easier to have wide latitude of tool choice for those than for the public-facing ones.
Ruby after 1.9... well, we haven't heard as much about 2.0 in the recent past as we used to, but I believe in part that's because 1.9 is probably fairly close to what 2.0 will be. At least, as far as I know, 2.0 will use YARV and so forth. I suspect that the 1.8.6 to 1.9.1 transition will be looked back on as by far the most major change in the history of Ruby up to that point.
If I could add a feature to Ruby, it would be to restore some behavior that enumerators had for a little while and then lost. At some point during 1.9.0 development, you could do this:
array = [1,2,3]
enum = array.enum_for(:map, &lambda {|x| x * 10 })
enum.next # 10
enum.next # 20
enum.next # 30
In other words, the enumerator carried inside itself not only the hookup with the object (array) and the method (map), but also a block. That is no longer the case. I exchanged some email with Shugo on ruby-core about it, and I gather it's a performance issue. I think it's really too bad, and frankly it makes enumerators a lot less interesting to me.
An enhancement to the language I would like to see is the removal of class variables. But I don't think I'm going to win that one :-) I'd also like to see :: removed as a method-calling operator (a dot synonym). I keep seeing things like:
Array::new
and I have no idea what the appeal is of it. The dot does the job just fine.
For a long time I've wanted:
class Object
def singleton_class
class << self; self; end
end
end
so then you could do:
some_object.singleton_class.class_eval ...
but I know Matz has been reluctant to add this, partly because of all the disagreement about what singleton classes should be called, and partly because he's not convinced (as I recall) that being able to grab hold of a singleton class is that important or common. Judging by how many times people end up writing that method, though, I think it would be good to have it.
I'm very glad to hear that you're enjoying Ruby and that it's rekindling your interest in programming!