[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Vala] private fields vs bodyless properties



Hi Hans,

On Fri, May 30, 2008 02:05, Hans Vercammen wrote:
> The strange thing is, that whenever "private int foo { get; set; }" is
> used as an rvalue it translates to something like self->priv->_foo, but
> when I use it as an lvalue the setter method gets invoked, which can
> cause overhead in some situations.

That's just a missing optimization. We will be able to replace the
function call by direct assignments in most cases in a future version.

> After some digging I found that I can also use _foo as property lvalue
> in the vala source bypassing the setter, but this feels more like a hack
> and im not sure if I can rely on that.

You should definitively not rely on that, it's a bug that Vala accepts
this at the moment. However, after adding the aforementioned optimization,
this won't be necessary anymore for performance reasons, either.

> Assigning private or protected values during construction is a rather
> common practice, but I don't know what the preferred solution would be.
> Personally I like the {get; set;} thing, even for just marking private
> fields read/write/construct only, but maybe some final optimization
> layer in the generator should simplify this.

I generally recommend the following for construct-only properties:

public string foo { private get; construct; }

For cases where this is a performance issue, we're improving the support
for non-GObject (but still GType-registered) classes, which follow more
closely the C# and Java construction scheme.

Juerg



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]