pointers, assignments, Garbage Collection Oh My?
Maxim Fomin
maxim at maxim-fomin.ru
Thu Jul 11 00:43:58 PDT 2013
On Thursday, 11 July 2013 at 07:13:50 UTC, Jacob Carlborg wrote:
> On 2013-07-11 04:59, Maxim Fomin wrote:
>
>> To be pedantic dynamic arrays are implemented in D simply as
>>
>> struct Array
>> {
>> size_t length;
>> void* ptr;
>> }
>>
>> and there is no type parametrization since such arrays
>> handling is
>> opaque for users (in druntime they are treated as void[]).
>> Parametrization can be useful in user side since performing any
>> operations with structure above (void*) will lead to errors.
>> But in user
>> side there is no point in manipulating the structure directly,
>> as it can
>> be done using usual properties/druntime without template
>> bloat. By the
>> way, the style ABI page is written, allows implementation to
>> have more
>> fields.
>
> typeof("asd".ptr) gives back immutable(char)*, not
> immutable(void)*. So from a user point of view it's as if the
> array is templated.
It's in the user side. In druntime it is void[] + typeinfo. I am
not aware of any part in dmd/druntime where arrays are repsented
as templates (or strongly typed) as depicted in this dicsussion.
And current treatment can be barely called templatization as
there is no templates, template instantiations and typicall
horrible mangling at all. More precise description is not
templatization but some kind of implicit conversion from array of
specific type in source code to void array plus typeinfo in
runtime library. If user tries to use struct Array(T) {...}
instead of usual arrays he will gain no benefit but useless
template bloat.
More information about the Digitalmars-d-learn
mailing list