DIP26: properties defined
Michel Fortin
michel.fortin at michelf.ca
Sat Feb 9 04:44:35 PST 2013
On 2013-02-09 11:58:23 +0000, Jonathan M Davis <jmdavisProg at gmx.com> said:
> You must be able to rely on front always being used without parens, and you
> must be able to rely on front() doing a call on the return value rather than
> simply calling front. Otherwise, you're going to have problems with code
> erroneously using parens to call front and breaking when used with anything
> that actually defines it as a property, and you'll break anything involving
> delegates or other callables. Returning ref is irrelevant, especially if we
> get full property rewrites (e.g. front += 7 and the like works with property
> functions without ref). What matters is that the syntax is consistent and that
> the semantics of using parens on front are consistent. Generic code needs to
> work with anything with the right API, and making front a function will cause
> problems with that.
I'll agree with you that it'd be better if properties were allowed with
UFCS too. At the same time, this DIP removes much of the boilerplate of
writing properties, so it's not only a "fix" for the current problems,
it's also a much welcome improvement over what we have. It doesn't
address the UFCS issue, but that doesn't prevent it from being fixed in
other ways.
For instance we could add a 'this' argument (not that I favour this
particular syntax):
@property void front(int[] this, int value);
One problem we currently have is that the way properties are defined
with @property is that there's no way to distinguish module-level
properties from UFCS properties. Instead of fixing that, many people
are trying to disallow one or the other. So instead of fixing the real
problem, people have divided into two camps: one that likes
module-level properties and one that likes UFCS ones. Both sides
wanting to disallow the other's side pet feature. I find the situation
somewhat ridiculous. Whatever side we choose, it'll break the language
coherency while alienating many people.
I believe both module-level properties and UFCS properties to be
desirable. So is the idea put forward in DIP26 that reduces boilerplate
code. The question is how do we put all that together.
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca/
More information about the Digitalmars-d
mailing list