On 07/09/2017 03:51 PM, kdevel wrote:
On Sunday, 9 July 2017 at 10:32:23 UTC, ag0aep6g wrote:
[...]
As mentioned in the subject my posting is about the state of affairs wrt. the (non-)nullity of strings. In C/C++ once a char * variable became non-NULL 'it' never loses this property. In D this is not the case: The non-null value ""
'becomes' null in

    "".decodeComponent

Nullity of D strings is quite different from nullity of C strings. A null D string is a valid string with length 0. A null char* is not a proper C string. It doesn't have length 0. It has no length.

A C function can't return a null char* when it's supposed to return an empty string. But a D function can return a null char[] in that case.

[...]
Sure. But I am writing about the string value which comprises the (non-)nullity of the string. This is not preserved.

Just like other pointers are not preserved. In the .ptr field of a D array, a null pointer isn't special. Null arrays aren't special beyond having a unique name.

[...]
string is not a pointer but a type. To the user of string it is completely irrelevant, if the nullity of the string is implemented by referring to a pointer inside the implementation of string.

string is a type that involves a pointer. The type is not opaque. The user can access the pointer.

A null array is not some magic (invalid) value. It's just just the one that has a null .ptr and a zero .length.

I think that's widely known, but it might not actually be in the spec. At least, I can't find it. The page on arrays [1] just says that "`.init` returns `null`" and that "pointers are initialized to `null`, without saying what null means for arrays. On the `null` expression [2], the spec mentions a "null value" of arrays, but again doesn't say what that means.

You also shouldn't rely on it returning null for a null input, even when it currently does that.

I assumed that a non-null string is returned for a non-null input.

As far as I see, you had no reason to assume that. If the spec or some other document mislead you, it needs fixing.

[...]
Yes. But that second proposition what not the one chosen in the documentation. It was not chosen because it does not extend to the nontrivial case where one has more than zero elements. ;-)

Or the spec's just poorly written there, and wasn't meant the way you've interpreted it.


[1] https://dlang.org/spec/arrays.html
[2] https://dlang.org/spec/expression.html#null

Reply via email to