Aleksi Niemelwrote:
> ... 
>   $ ruby -v -e'a=[1,2,3]; a[1,0]=a; p a;'
>   ruby 1.6.2 (2000-10-16) [i686-linux]
>   [1, 1, 1, 1, 1, 1]
> 
> I guess it's not as it should be. I'd expect [1, 1,2,3, 2,3].
> 

Yes, either that or an infinite set of 1's, since 'a' is growing 
as it gets inserted...

I tried something related:

irb(main):021:0> b
[1, 2, 3]
irb(main):022:0> b[-1,0]=b
[1, 2, 1, 2, 1, 2]
/usr/local/lib/ruby/1.6.0/irb/main.rb:461:in `gsub!': failed to allocate memory (fatal)
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:461:in `prompt'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:341:in `eval_input'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:331:in `call'
        from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:193:in `prompt'
        from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:234:in `each_top_level_statement'
        from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:215:in `loop'
        from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:215:in `each_top_level_statement'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:352:in `eval_input'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:62:in `start'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:61:in `catch'
        from /usr/local/lib/ruby/1.6.0/irb/main.rb:61:in `start'
        from /usr/local/bin/irb:19

There definitely is a problem here. ;-)

> ...
> Then I bumped into the problem. Backwards compatibility. I got scared.
> Messing around with [] surely causes many programs to fail. 

Maybe [] should not be an alias, but have its own defined set of
operations?  That could eliminate these side effects, and the
dichotomy resulting from comparisons to things like substr() etc.

I'm not sure this would be a simple task, though. I have not looked
in depth, but it seems like it may be deeply connected to many
things...

> So I'm asking:
> 
> 1) Do you think we should change the way Array#[pos, len] version
>    works for next Ruby version?
> 
>     - remove surprising array[pos, 0] = [1,2,3] array flattening
>     - change semantics for negative pos
> 

Yes.

I guess that means we have to consider supporting

	array[pos,0] = 1,2,3

(or some other way to force flattening)

> 2) Do you think Array#insert(pos, stuff) should work almost like
>    current Array#[pos, 0] = stuff except it doesn't autoflat?
>    Or do you think negative pos too should be handled differently
>    from Array#[pos,len]= ?
> 

I think negative pos ought to be handled differently than it is now.

In other words, if a=[1,2,3], then a[-1,0] = 4 should result in [1,2,3,4], 
not [1,2,4,3]. Likewise for a.insert(-1,stuff).  


Guy N. Hurst

-- 
HurstLinks Web Development    http://www.hurstlinks.com/
Norfolk, VA - (757)623-9688
PHP/MySQL - Ruby/Perl - HTML/Javascript