Dynamic array and slices (need Walter and Andrei decision)
Brad Anderson
eco at gnuk.net
Thu May 30 12:15:19 PDT 2013
On Thursday, 30 May 2013 at 18:46:17 UTC, deadalnix wrote:
> On Thursday, 30 May 2013 at 18:25:08 UTC, Maxim Fomin wrote:
>> In neighbor thread (especially from 5 page
>> http://forum.dlang.org/thread/mailman.175.1369540733.13711.digitalmars-d@puremagic.com?page=5)
>> there is discussion about current state of definitions in D
>> related to slices, slice expressions and arrays. There is
>> significant contradiction between documentation in different
>> parts of the D site and people who interpret it.
>>
>> Problem boils down to following:
>>
>> - in array and type official spec page, dynamic array is
>> defined as T[] type as "Dynamic arrays consist of a length and
>> a pointer to the array data.". The page also describes what
>> slicing is. Also expression page defines what SliceExpression
>> is. Internally dmd follows these conventions.
>>
>> - in articles part of the site there is article "D Slices"
>> written by Steven Schveighoffer, which abolishes current
>> relevant parts of current spec. According to the article,
>> dynamic array is runtime managed memory which in
>> implementation specific manner provides some set of operation
>> related to arrays. According to the article T[] is by no means
>> a dynamic array, but a slice. The article explicitly claims
>> that spec is wrong.
>>
>> So, there is contradiction between what T[] is. Either it is a
>> slice (and what is more important, not a dynamic array type)
>> which point by druntime managed dynamic array, or is object of
>> type dynamic array, which may point to heap or stack memory.
>>
>> Discussion shows that there is no clear consensus on this, so
>> there is need for Walter and Andrei to comment on this.
>
> An array IS a slice. A slice IS an array. Nothing contradict
> anything.
There is some...peculiar stuff about slices though. If you slice
a static array or a pointer and append to it the slice then
points to a new distinct GC allocated array. It's not all that
different from appending to a slice backed by a dynamic array an
exhausted capacity but it can be surprising to people who don't
know about this.
Perhaps appending to a slice of non-gc allocated memory should be
an error (you can't append to a static array, for instance).
More information about the Digitalmars-d
mailing list