char[] == null

Maxim Fomin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Nov 20 13:38:23 PST 2015


On Thursday, 19 November 2015 at 15:36:44 UTC, Steven 
Schveighoffer wrote:
> On 11/19/15 3:30 AM, Jonathan M Davis via Digitalmars-d-learn 
> wrote:
>> On Wednesday, November 18, 2015 22:15:19 anonymous via 
>> Digitalmars-d-learn wrote:
>>> On 18.11.2015 22:02, rsw0x wrote:
>>>> slices aren't arrays
>>>> http://dlang.org/d-array-article.html
>>>
>>> The language reference/specification [1] uses the term 
>>> "dynamic array"
>>> for T[] types. Let's not enforce a slang that's different 
>>> from that.
>>>
>>>
>>> [1] http://dlang.org/arrays.html
>>
>> Exactly. T[] _is_ a dynamic array. Steven's otherwise 
>> wonderful article on
>> arrays in D ( http://dlang.org/d-array-article.html ) made the 
>> mistake of
>> calling the buffer that T[] points to on the GC heap (assuming 
>> that even
>> does point to the GC heap) the dynamic array. And per the 
>> language spec,
>> that's not true at all.
>
> It was not a mistake :) It's how I still think of it. The spec 
> is confusing, and my terminology, IMO, is a much more 
> consistent (and accurate) way to think of it.
>
> -Steve

Why formal definition of dynamic array caused confusion and is 
inconsistent? It is well consistent with static array and other 
aggregate types notions.

Consider this:

int *x = new int; // this is 'int type' ans it is 'dynamic'
int y;
int *a = &y;            // and this is not 'int type'

The problem is treating chunk of heap memory as some kind of type 
(dynamic in this case). Type of object determines an interface of 
interacting with object while storage determines memory location 
and possibly duration of lifetime. It is possible to have object 
of any type to be allocated on different storages - for example, 
slice does not necessarily points to dynamic array (in your 
terms). C and C++ established a long tradition of such standard 
notions as object, lifetime, storage and type. From system 
language perspective calling memory a type (in other words, type 
of object depends on where it was allocated) does not make much 
sense.


More information about the Digitalmars-d-learn mailing list