caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Re: About array
@ 1999-10-12 15:04 Damien Doligez
  1999-10-15 12:30 ` Anton Moscal
  0 siblings, 1 reply; 3+ messages in thread
From: Damien Doligez @ 1999-10-12 15:04 UTC (permalink / raw)
  To: caml-list

>From: Anton Moscal <msk@post.tepkom.ru>

>Evaluation `f i' can cause GC call -> we must use modify function. Really
>we can check address of our fresh array after each `f i'. While this
>address remains unchanged we have no need to call `modify'. I think this
>will be good.

Wrong.  There is no guarantee that the GC will move your fresh array.
In most cases it will not because the array will already be in the
major heap.


>I made the following experiment:

[replacing Array.init with a home-brewed version]


>time became 0.97 sec (but this version will not work
>with float arrays)

Indeed, it only works with int arrays.  And the only reason it's
faster is because it's monomorphic.  All your GC-oriented "magic"
amounts to nothing (you're not avoiding the call to "modify").
In fact, with this "init" function is even faster:

    let init l (f : int -> int) =
      if l = 0 then [||] else
       let res = create l (f 0) in
       for i = 1 to pred l do
         unsafe_set res i (f i)
       done;
       res
    ;;

(i.e. the standard library's "init" with a type constraint)

-- Damien




^ permalink raw reply	[flat|nested] 3+ messages in thread
[parent not found: <380324A8.DEB61647@univ-savoie.fr>]

end of thread, other threads:[~1999-10-15 13:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-10-12 15:04 About array Damien Doligez
1999-10-15 12:30 ` Anton Moscal
     [not found] <380324A8.DEB61647@univ-savoie.fr>
1999-10-12 13:08 ` Anton Moscal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).