DIP23 draft: Fixing properties redux

Jonathan M Davis jmdavisProg at gmx.com
Mon Feb 4 11:04:42 PST 2013


On Monday, February 04, 2013 23:56:50 kenji hara wrote:
> 2013/2/4 Andrej Mitrovic <andrej.mitrovich at gmail.com>
> 
> > On 2/4/13, Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org> wrote:
> > > I'm unclear that's a problem.
> > 
> > The problem is you cannot replace a field with a @property function
> > without breaking user-code when you take into account operator
> 
> > overloading. Consider:
> As an essential question, how often occurs rewriting fields to property?
> 
> As far as I thought, such rewriting will cause:
> 1. compile error by type mismatch (if you use &obj.field),
> 2. or, success of compilation *without any semantic breaking* (if you don't
> use &obj.field).
> 
> I think the result is not so harmful.

There's also the issue a variable being able to be passed by ref, which a 
property function can't emulate, which is why it would be quite valuable to be 
able to mark a variable as @property - either to indicate that it's illegal to 
do anything with it that you can't do with a property function or to make it 
so that it lowers to getter and setter property functions and therefore can't 
be used with anything which wouldn't work with a property function.

But if we could guarantee that swapping out variables and property functions 
wouldn't break code, then we could get rid of a _lot_ of property functions 
(since many of them don't do anything other than set and/or return the 
variable that they're wrapping). Because we currently allow stuff which only 
works with a variable or a function, we can't just seamlessly between 
variables and property functions, and it's not going to happen anywhere near 
as often for fear of breaking code. And many more people will simply create 
useless wrapper property functions around variables in case they need to add 
more code to them later (e.g. to validate the argument to the setter). We'd be 
much better off if anything which wasn't legal for both variables and property 
functions was made illegal for property functions and added a way to do the 
same for variables which are supposed to be treated as properties rather than 
explicitly being intended to be public variables like in a POD type.

We could save a lot of boilerplate code if we can simply make it variables and 
property functions guaranteed to be swappable without breaking code.

- Jonathan M Davis


More information about the Digitalmars-d mailing list