On Thu, 23 Apr 2009 19:00:10 -0400, Andrei Alexandrescu <[email protected]> wrote:

Robert Jacques wrote:
On Thu, 23 Apr 2009 14:37:37 -0400, Andrei Alexandrescu <[email protected]> wrote:
dsimcha wrote:
CapacityArray: A range that covers a builtin array and gives it a capacity field. All operations that don't have to do with appending are forwarded to the underlying array via alias this (modulo a few compiler bugs), meaning that a CapacityArray has an identical compile time interface to a builtin array,
and is implicitly convertible to one.

Upon more thinking, I think we'll have to bit the bullet and define Array!T and Slice!T. Then dmd rewrites:

[ a, b, c ] -> .Array!(typeof(a))(a, b, c)
T[new] -> .Array!(T)
new T[n] -> .Array!(T)(n)
T[] -> .Slice!(T)

It seems increasingly clear that slices alone can't quite cut the mustard.

So your CapacityArray will essentially be the basis of Array.
No. The capacity field hack only works with the current free-list based mark-sweep GC. In every other type of GC, the capacity is dynamic and can not be cached in the array itself. Introducing a language feature that is specific to an implementation seems like a bad idea.

1. STL does the same thing so it's likely a more general issue than one might think.

1) Malloc generally uses a free-list based allocation scheme, so no, its not more general.
2) The STL is a library, not a language feature.

2. This is not a language feature. Different implementations can take different routes.

Creating seperate types for slices and arrays is a language feature.

P.S. I think having array builders in Phobos is a good idea, I just don't think that they warrant a language change.

Reply via email to