> That would be a memory leak.
No it wouldn't:
If the "if" statement is false, then it should delete it in the end of the 
block.

You might afraid the complicity of valac calculation.
That could be resolved - using two C variables - one for owned and one for 
unowned.
The owned always deleted at the end of the block, the trick is that this C 
variable is
set to null when transferring ownership.

If an owned "bar" was defined outside the block, I already said you're right 
and it
should be null in when outside the block(e.g. class field), since there's no 
way to
automate this safely.

I know it may add a minor complicity, but it just seems rational to use an 
object with
"unowned" access after transferring it to something else, since passing 
ownership
privilege doesn't means forgetting a reference.

I suppose that most Vala programmer solve this(including me) problem by saving
this variable in different unowned variable, but this is not 
intuitive(especially for a
new language) and may raise many bugs.

Tal

Date: Thu, 9 Jan 2014 21:04:16 +0100
Subject: Re: [Vala] Change in 0.23.1 for array ownership and .length parameter
From: lethalma...@gmail.com
To: tal...@hotmail.com
CC: vala-list@gnome.org

That would be a memory leak.

On Thu, Jan 9, 2014 at 7:01 PM, Tal Hadad <tal...@hotmail.com> wrote:

> What about:

>

> if (foo) {

>    bar = (owned) ar;

> }

> // what now

>

> This behavior is confusing.

It would be unowned, even if in "if" statement, just like I suggest.



Tal



> Date: Tue, 7 Jan 2014 09:24:40 +0100

> From: lethalma...@gmail.com

> To: vala-list@gnome.org

> Subject: Re: [Vala] Change in 0.23.1 for array ownership and .length  
> parameter

>

> On 07/01/2014 06:46, Tal Hadad wrote:

> > This case trigger me a question I wanted to ask before.

> > Why transforming ownership is nulling the original variable?

> >

> > Instead of nulling, maybe just change variable to behave as unowned.

> >

> > You might say that there is a problem in my solution, like this code:

> >

> > uint8[] ar = new uint8[10];

> > if (some_method() != NULL)

> >      another_method((owned)ar);

> > ...

> >

> > Since after the "if" case, valac can't determinate if ownership was 
> > given(at compile time).

> >

> > Despite of this, nulling "ar" variable is even worse in my opinion and it's 
> > error prone.

> >

> > The user might use "ar" varible later and it will crush he's application.

> > If he was lucky enough, he would realize that ar is null.

> > It's not easy to find that this line causing it.

> >

> > I suggest solution for the last problem from valac side - treat ar as 
> > unowned after the

> > (owned) operator, even if this operator was in "if" block!

> >

> > That way, "ar" won't be null, and the user could use it later only as 
> > unowned.

> >

> > And for class/struct fields - I do accept that they must be nulled when 
> > transferring ownership.

>

> What about:

>

> if (foo) {

>    bar = (owned) ar;

> }

> // what now

>

> This behavior is confusing.

> _______________________________________________

> vala-list mailing list

> vala-list@gnome.org

> https://mail.gnome.org/mailman/listinfo/vala-list



_______________________________________________

vala-list mailing list

vala-list@gnome.org

https://mail.gnome.org/mailman/listinfo/vala-list



-- 
www.debian.org - The Universal Operating System
                                          
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to