Hi,

> -------- Original Message --------
> Subject: Re: [E-devel] efl_add causing confusion
> Local Time: December 21, 2017 9:02 AM
> UTC Time: December 21, 2017 5:02 PM
> From: a...@andywilliams.me
> To: Enlightenment developer list <enlightenment-devel@lists.sourceforge.net>
>
> P.S. if the loss of temporary handles with efl_add is not met with
> efl_added it would be possible to add a new macro along the lines of:
>
> efl_add_scope(klass, parent) { ... statements ... } whereby the scope of
> the variable is valid only within that block.

This is an interesting idea that give an explicit lifecycle to the newly 
created reference and when you safely own it.

> On Thu, 21 Dec 2017 at 13:15 Andrew Williams a...@andywilliams.me wrote:
>
>> Hi,
>> This is now well documented (
>> https://www.enlightenment.org/develop/tutorials/c/eo-refcount.md) but the
>> more I use efl_add the more I feel it is confusing especially to new
>> developers.
>> In the current model (if I understand it correctly)
>>
>> - child = efl_add(klass, parent) means the child must NOT be unfeferenced
>> - child = efl_add(klass, NULL) means the child should be unreferenced
>> - child = efl_add_ref(klass, parent) means the child must be unreferenced
>> - child = efl_add_ref(klass, NULL) somehow means that the child should be
>> unreferenced twice
>>
>> In my opinion 1) and 4) are peculiar and so I provide a proposal to fix
>> this:
>> We could change efl_add to return void. It never retains a reference. If
>> the parent is NULL then it should be automatically unref before returning.
>> Then efl_add_ref would be changed to mirror this and always retain exactly
>> 1 reference - so if parent is NULL there is no double count returned.
>> Using this model if an Eo * is returned then I know I have a reference and
>> must later unref.
>> Any need for using the pointer in an efl_add (which is no longer returned)
>> would still be supported through efl_added within the constructor.
>> What do people think about this? I put the suggestion forward to improve
>> the symettry with add and unref which is currently confusing. If my
>> assumptions above are incorrect please let me know!

We have been trying to fix the semantic problem of efl_add since pretty much it 
was created. This proposal seems to build on top of efl_add_ref that was added 
to fix the problem created for binding. I do like this proposal at it start 
fixing the problem of inconsistency when creating an object. An additional fix 
is that we would not need any more an efl_del as efl_unref will be the only 
thing needed (efl_del is a weird thing that does unset the parent and unref 
somehow, but can't also be used safely by binding). This would make for a 
cleaner semantic and less surprise in refcounting.

Cedric
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to