ufcs and integer params

Jonathan M Davis jmdavisProg at gmx.com
Sun Jul 15 14:11:33 PDT 2012


On Sunday, July 15, 2012 22:47:41 Timon Gehr wrote:
> On 07/15/2012 09:41 PM, Jonathan M Davis wrote:
> > On Sunday, July 15, 2012 11:56:57 Jonathan M Davis wrote:
> >>> What is enforced here? Why would it matter if anything is 'enforced'?
> >> 
> >> If you marked it as a property, then it's supposed to be abstracting a
> >> variable and should be treated as one, just like if it's a normal
> >> function,
> >> it should be invoked as a function, just like ++ shouldn't suddenly do
> >> --,
> >> and / shouldn't *.
> > 
> > And on a purely objective note, if you don't have property enforcement,
> > you
> > can't turn a property function into a variable, because even though it's
> > supposed to be used as one, you can't guarantee that everyone's using it
> > that way,  and if they're using it as a function, changing the property
> > into a variable will break their code.  And part of the point of
> > properties is to be able to switch between variables and property
> > functions depending on whether additional protections or calculations or
> > whatnot are required for that variable/property. Property enforcement is
> > required in order to allow that.
> > 
> > - Jonathan M Davis
> 
> No it is not, assuming that property enforcement is supposed to mean
> that function 'foo' cannot be called like 'foo' if it is not annotated
> @property.
> 
> There is no objective argument for banning this, except that the syntax
> would be made free for alternative use.
> 
> @property means: always implicitly call if it can be called without
> arguments. If it cannot, disallow calls that are not of the form fun =
> argument; (After the op= operators have been properly rewritten.)
> 
> And that is completely sufficient for transparently switching between
> variable/property. Stuff that is *not* annotated @property has no
> relevance.

There are two levels to enforcement. Neither exist without -property. The 
absolutely minimal level is that anything marked with @property must be used 
as a property. Without this, you can't swap out a property function for a 
variable without breaking code.

The second level - i.e. strict property enforcement - also requires that non-
property functions be called as functions.

-property is supposed to be doing strict property enforcement, but it's pretty 
buggy at the moment, so you can't really use it to guarantee much yet.

- Jonathan m Davis


More information about the Digitalmars-d-learn mailing list