@property - take it behind the woodshed and shoot it?

Jonathan M Davis jmdavisProg at gmx.com
Fri Jan 25 00:41:27 PST 2013


On Friday, January 25, 2013 00:29:52 Jonathan M Davis wrote:
> On Friday, January 25, 2013 00:19:28 Walter Bright wrote:
> > On 1/24/2013 5:15 PM, kenji hara wrote:
> > > 1. Optional parentheses for normal functions should work shallowly IMO.
> > > 2. Optional parentheses for property functions should not work. Applying
> > > () for property function name always applied to its returned value.
> > > 
> > > #1 is a ratification of current behavior. It allows the combination of
> > > UFCS and removing redundant ()s.
> > > #2 is a breaking change. If we need it, community consent is required.
> > 
> > There is a way to do #2 without breaking existing code.
> > 
> > Create a new property attribute, say, @prop. Imbue it with the new
> > behavior. Leave the old @property as it is, and let it cycle through the
> > usual warning, deprecation, removal process.
> 
> Considering that it's always been the plan that @property would be enforced
> such that any use of it would be illegal with parens (it's explicitly among
> the things tha TDPL says about @property), the expectation of pretty much
> every D programmer is that that's how @property functions are to be used,
> and it shouldn't come as any surprise when that's enforced. As such, I
> really don't think that it's a big deal if we simply start enforcing that
> @property functions be called without parens. And if you're really
> concerned about breakage, then we could start with making it a warning
> rather than an error. But I wager that in almost all cases, any such
> warning or error would be triggered by a mistake rather than someone
> intentially using parens with an @property function.

In fact, I'd argue that making @property enforce that a function be called 
without parens would be on par with things like starting to enforce that final 
switch has cases for all of the values in an enum. Yes, it can break code, but 
it only breaks code because the feature wasn't enforcing what it was supposed 
to enforce per the spec. And we've made those sorts of changes before. It's 
really just a bug fix, albeit one that risks having a larger impact than many. 
Code which follows the spec won't be broken by the change.

- Jonathan M Davis


More information about the Digitalmars-d mailing list