std.database
Rikki Cattermole via Digitalmars-d
digitalmars-d at puremagic.com
Tue Mar 1 20:11:10 PST 2016
On 02/03/16 4:48 PM, Erik Smith wrote:
> Yes agree that the poly Database is broken - it isn't reference counted
> and I will fix that.
My point was, you shouldn't handle that.
> Your sample code had me wondering if I am missing something else, but I
> can't see another issue yet. I think the use of classes would
> definitely lead to problems with resources being freed out of order or
> too late.
Currently its use after free. E.g. destructor gets called but there is
still a copy around.
At the very least it should be an explicit call.
If classes lead to problems, so will structs.
> As far as memory management options, my plan is to work allocators into
> the design and that would seem to provide a lot of options. I'm having
> a problem at the moment with MallocAllocator's shared interface. I'm
> not sure why it's shared since malloc/free are thread safe and I can't
> seem to cast away the shared. I'm sure there is a reason.
Use IAllocator. Don't touch the structs unless you want pain.
Oh and btw final class is your friend.
As an FYI here is my managed memory concept
https://github.com/rikkimax/alphaPhobos/blob/master/source/std/experimental/memory/managed.d
its not finished but it mostly works.
Of course I would want to go the more OOP way, sure thats more
allocations but over all I think there are enough wins that its worth
it. So if you feel it doesn't fit well with your goal, say so :)
> erik
>
>
> On Wednesday, 2 March 2016 at 03:07:54 UTC, Rikki Cattermole wrote:
>> Okay I've found a problem.
>>
>> Here is some code demonstrating it.
>> http://dpaste.dzfl.pl/022c9e610a18
>>
>> Now take a look again at Database
>> https://github.com/cruisercoder/dstddb/blob/master/src/std/database/poly/database.d#L37
>>
>>
>> Do you see the problem?
>> The solution is simple.
>>
>> The client database type can be a struct or a class. It doesn't matter
>> too much (assuming you're going the way of ranges).
>> But the intermediary representation must be on the heap and should
>> probably use the constructor and not a static create method to get it.
>> This way people can use other memory management solutions and
>> construct it however they like.
>
>
More information about the Digitalmars-d
mailing list