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