@safe RCSlice with DIP1000 + runtime checks
rikki cattermole via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 3 04:20:00 PDT 2016
On 03/09/2016 11:02 PM, Nick Treleaven wrote:
> On Friday, 2 September 2016 at 11:42:57 UTC, rikki cattermole wrote:
>> I've got a much more advanced memory management solution[0].
>> I'm waiting on DIP1000 implementation before implementing it into it.
>>
>> But over all I quite like this type approach.
>>
>> [0]
>> https://github.com/rikkimax/alphaPhobos/blob/master/source/std/experimental/memory/managed.d#L255
>>
>
> OK. Looks quite complex. Do you have the docs generated anywhere?
Docs[0].
Before implementing as a library solution I was working on a language
concept[1]. The basic idea is that the end user should never care about
how memory is 'owned'. The main thing to know is that it isn't plain old
data that you can do literally anything you want with it.
So these are valid transformations:
- managed!T -> scope T
- managed!(T[]) -> managed!(T[])
- managed!(T[]) -> T if(isBasicType!T)
- managed!(T[]) -> managed!T if(!isBasicType!T)
T cannot be a pointer but it can be an array, class, struct or primitive
type. If you do pass a pointer it will *value so it acts as if it was
typeof(*T.init) when accessing.
The current implementation is fairly dumb in that it does two
allocations per memory instance. But that is an implementation detail.
So this is hugely over kill for most people but would be amazing what
you could do for containers.
[0] http://cattermole.co.nz/docs/html/std_experimental_memory_managed.html
[1] https://wiki.dlang.org/User:Alphaglosined/ManagedMemory
More information about the Digitalmars-d
mailing list