On Wednesday, 30 January 2013 at 01:40:52 UTC, TommiT wrote:
On Wednesday, 30 January 2013 at 00:25:41 UTC, Jonathan M Davis wrote:
On Wednesday, January 30, 2013 00:55:13 Rob T wrote:
[..]
You know a lot more about implementing compiler magic than I do, so I'll ask you if you think the effort is doable enough
to justify having property functions that can act like a
drop in replacement for existing variables?

I believe that two main things are needed: [..]

I always thought that having public member variables is a bad style of programming because of the lack of encapsulation. So, if there's a language feature that enables you to write public member variables, and later on, replace them with property functions, wouldn't that mean that the language is encouraging this particular kind of bad style of programming?

Well, the main reason why this was bad convention, is because the "." operator conceptually returns by reference, so you are operating directly on the encapsulated variable with no possibility of oversight through the encapsulation.

The @property method will restrict variable usage to non-ref and non-pointer uses only, which is a form of encapsulation through the "." operator, and it can later be replaced with a function call if required.

Even with @property restrictions, I still don't think it will work as expected. For example, if the variable is a struct, then you have to disallow operations on the struct from outside.

Example:

struct Y { int a; }

struct X{ @property Y y; }

X x;

x.y.a = 4; // <- this has to be illegal!

Reason?

struct X{

  Y _y;

  @property Y y{ return _y; }

}

// this won't change _y as it did before.
x.y.a = 4;

I figure if we're going to do something about properties, we may as well do something much more compelling and re-invent the property rather than attempt to partially emulate variables just because someone was in a hurry and left their encapsulated variables public and used them directly outside the struct or class.

--rt

Reply via email to