[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Why does Array#first not use rb_ary_subseq?

Yukihiro Matsumoto

5/18/2007 12:46:00 PM

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.

1 Answer

Stefan Rusterholz

5/18/2007 1:23:00 PM

0

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.cabo.... 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-....