Array Slices and Interior Pointers
Dmitry Olshansky
dmitry.olsh at gmail.com
Tue Dec 11 12:24:28 PST 2012
12/11/2012 11:23 PM, Alex Rønne Petersen пишет:
> On 11-12-2012 20:09, Dmitry Olshansky wrote:
>> 12/11/2012 4:04 AM, Alex Rønne Petersen пишет:
>>> http://xtzgzorex.wordpress.com/2012/12/11/array-slices-and-interior-pointers/
>>>
>>>
>>>
>>>
>>> Destroy.
>>>
>>
>> Aside from the fact that I can use slices without GC just fine? :)
>> The base pointers would then be either counted, released manually or
>> implicitly as part of stack unwinding.
>
> Yes, in theory. But that's not how most idiomatic D code written today
> works.
>
I'd mention that the most of idiomatic D code is agnostic with respect
to the origin of slice. The major reason to use slices is to avoid
allocations and thus the allocation scheme is not important up to the
point of explicit copy.
And at that point e.g. Phobos plays it safe and does everything that has
to copy or incrementally build via GC. And it gets bashed for it every
once in a while. To put simply it's because there is no concept of
allocators in idiomatic D code _yet_.
And separating slices and allocation mechanism behind them is the key of
usability of slices as they stand. If we add stuff that makes them 50%
more bulky and helps only a certain scheme of GC memory allocation we
are screwed.
Also what would direct operations with ptr field translate to in your
scheme e.g.:
arr.ptr = arr.ptr+x;
where ptr+x is hidden by some function and not obvious to the compiler?
Same question with slicing a raw pointer - what will the base contain?
(The pointer _might_ have been interior.)
>>
>> I personally think that managed VMs are going to have to emulate slices
>> and pointers as an array object + one or pair of offsets. In fact it
>> could be implemented as an abstract object with implementation depending
>> on where you did get that pointer from.
>>
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list