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