On Sep 30, 2008, at 05:24 , Dave Thomas wrote:

> For example, the deprecations are fine in theory. But think about  
> how tests are supposed to work. You run them, and they're supposed  
> to be silent. Maybe a row of dots, but that's it. Any output means  
> there's a problem.

I think it is a cultural problem. We don't have or even support a  
culture of deprecation, of shedding dead weight. Somehow, the idea of  
announcing ahead of time that you intend to delete code (with a  
suitable replacement) _sometime_in_the_future_ sends shockwaves of  
terror throughout the ruby community. Personally, I find that rather  
embarrassing as I see nothing better than to reduce the amount of  
cruft we have and still maintain functionality.

> But now, when I run my tests, I get pages of stuff flying by, saying  
> stuff is deprecated. To someone who lives by tests, this is  
> incredibly scary.
>
> You might say "change your tests". But I think that's being a little  
> harsh. Part of being compatible with Test::Unit is providing a  
> similar user-level experience to it. A minor heart attack the first  
> time you run is a different experience.

Except... we're talking about a __DOT-OH__ release. If this was 1.6.9  
I'd completely agree, but this is 1.9.0 and we've had no problems with  
incompatibilities thus far. Think about the number of tests that are  
going to fail that expect String#[n] to return an int that are now  
going to blow up. Somehow that's OK, yet deprecating poorly named API  
is not? No. Dot-Ohs are where we introduce our incompatibilities.

And in this case, we're not even talking actual breakage... that's the  
thing that is killing me. We're talking about 100% compatible API,  
telling you that you're going to need to change it in the future. I  
even documented WHEN I was going to do this and nothing is even  
remotely close (or etched in stone for that matter):

     tu_deprecate :assert_nothing_thrown, :assert_nothing_raised #  
2009-06-01
     tu_deprecate :assert_raise,          :assert_raises         #  
2010-06-01
     tu_deprecate :assert_not_equal,      :refute_equal          #  
2009-06-01
     tu_deprecate :assert_no_match,       :refute_match          #  
2009-06-01
     tu_deprecate :assert_not_nil,        :refute_nil            #  
2009-06-01
     tu_deprecate :assert_not_same,       :refute_same           #  
2009-06-01
     def assert_nothing_raised _ = :ignored                      #  
2009-06-01
     def build_message(user_message, template_message, *args)    #  
2009-06-01

Yet, somehow, this is a huge thing that is totally freaking everyone  
out. I just don't get it at all, esp. given how long this has been in  
the works and how shockingly little feedback there was that whole time.