Yukihiro Matsumoto wrote:
> Hi,
> 
> In message "Re: Why does Array#first not use rb_ary_subseq?"
>     on Fri, 18 May 2007 21:36:19 +0900, Stefan Rusterholz 
> <apeiros / gmx.net> writes:
> 
> |When I run a small bench I noticed that Array#first(n) with an argument
> |is vastly slower than Array#[0,n].
> 
> The difference is due to Array#first is optimized for memory
> consumption, I guess.  We'd like profile on the use-case, so could you
> show us "vastly slower" example code?
> 
>               matz.

Thank you for your reply.

Memory consumption: could you please elaborate that a bit for me?
I somehow expected the COW Array created by Array#[] to be more memory 
efficient as I understood that to be the reason why that is used at all. 
I'm new to C, so please forgive me if I'm a bit slow :-(

I posted a benchmark with results and code on 
http://pastie.caboo.se/62638. I don't have a specific use-case but I'd 
say a lot of array operations base on .each (all Enumerable methods) 
which is why I added a bench running an each loop over the elements.
It's intriguing that the difference only seems to be huge for the 
creation. In my initial bench I only run the [] and first method, I 
didn't add an each-loop. I didn't expect this as the returned array is 
not modified. I think I have to delve a bit more into the whys and whats 
with that COW array.

But what I forgot to ask in my initial question: if those two 
implementations have different characteristics, why isn't that 
documented? (from the docs I'd just expect first to have nicer semantics 
for its use-case and nothing else)

regards
Stefan Rusterholz

-- 
Posted via http://www.ruby-forum.com/.