Hello Christian,

Wednesday, December 17, 2003, 7:48:54 PM, you wrote:



>> Compare the following results:

>> Rebol: 18 seconds

CL> h: make hash! 100000
CL> start: now/time/precise
CL> for i 1 100000 1 [ insert tail h i ]
CL> now/time/precise - start
CL> == 0:00:00.25

O, shame on me - I have to guess myself that preallocating hash size
will have such effect. with "make hash! 100000" instead of just
"make hash! []", results at my computer are:

1.1983 seconds with append, 1.151 with "insert tail"

The only justification for my fault is that in ALL other languages I
know, omitting initial hash size parameter has no such dramatical
influence on performance (usually hash size is doubled)

CL> That's 250 msec. Your version runs in about 350 msec.

CL> Since I can't imagine you're running a machine 50 times slower than
CL> mine, there's something seriously weird going on ...

CL> BTW, I still don't quite get why append has to be so much slower than
CL> insert tail. Does anyone have any ideas wrt/ that issue?


It is clear - append is implemented using insert:


append: func [
     {Appends a value to the tail of a series and returns the series head.}
     series [series! port!]
     value
     /only "Appends a block value as a block"
][
     head either only [
         insert/only tail series :value
     ] [
         insert tail series :value
     ]
]




-- 
Best regards,
 Konstantin                            mailto:[EMAIL PROTECTED]

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to