Browse thread
How to do this properly with OCaml?
-
Thomas Fischbacher
- Christophe Dehlinger
- Berke Durak
- Michel Quercia
- Eric Cooper
-
Michael Alexander Hamburg
-
Xavier Leroy
- Berke Durak
- Michael Alexander Hamburg
- Thomas Fischbacher
- Alex Baretta
- skaller
- Thomas Fischbacher
-
Xavier Leroy
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | skaller <skaller@u...> |
| Subject: | Re: [Caml-list] How to do this properly with OCaml? |
On Sun, 2005-07-24 at 14:08 -0700, Stephane Glondu wrote:
> BTW, I was talking about 'a array option, not 'a option array. You can use
> (mostly of) the implementation of Buffer, hence have the same
> efficiency... I don't understand your point about "efficiency". If you
> think that the Buffer implementation is not efficient, I may agree with
> you, but this is an algorithmic issue, not a typing issue.
Observe the constructor:
let create n =
let n = if n < 1 then 1 else n in
let n = if n > Sys.max_string_length then Sys.max_string_length else n
in
let s = String.create n in
{buffer = s; position = 0; length = n; initial_buffer = s}
creates an *uninitialised* string of length n:
"val create : int -> string
String.create n returns a fresh string of length n. The string initially
contains arbitrary characters."
If you have to initialise the store, it is expensive,
and if you have to provide a dummy value it is hard
to use.
If you used a 'a array option, and
assert (match Some a -> Array.length a > 0 | None -> true)
then you can use the first value of the array as
the dummy value for the rest of the array, and avoid
Obj.magic -- however this is very inefficient, since
the dummy would have to be changed in many places
whenever the first entry in the array changed
(and that isn't just a store -- there is a write-barrier
to think about .. :)
That won't happen in Buffer because you can't modify it,
but it must be allowed in more general variable length
mutable array.
--
John Skaller <skaller at users dot sourceforge dot net>