[phobos] Time to get ready for the next release

Jonathan M Davis jmdavisProg at gmx.com
Thu Apr 21 16:26:16 PDT 2011


> On Thu, 21 Apr 2011 17:17:27 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
> 
> wrote:
> >> On Thu, 21 Apr 2011 15:41:17 -0400, David Simcha <dsimcha at gmail.com>
> >> 
> >> wrote:
> >> > On Thu, Apr 21, 2011 at 3:39 PM, Jonathan M Davis
> >> 
> >> [snip]
> >> 
> >> >> I know that there are a number of people on the list - particularly
> >> >> newer
> >> >> posters - who fully expect @property to be strict and are surpised
> >> 
> >> when
> >> 
> >> >> it
> >> >> isn't. And I see _zero_ problem with strong property enforcement as
> >> >> long as
> >> >> the compiler isn't buggy with regards to properties (which it
> >> 
> >> currently
> >> 
> >> >> is).
> >> >> So, I'm 100% behind strict enforcement.
> >> >> 
> >> >> - Jonathan M Davis
> >> 
> >> What about the fact that no two people can agree what should and
> >> shouldn't
> >> be a property? Or, more practically, that third party library A won't
> >> conform with organization B's coding policies? Or how about that an O(1)
> >> property which gets re-factored into a big expensive O(N) operation
> >> (i.e.
> >> see bug 5813) Or ranges/containers that may all have different mixes of
> >> function-like methods and field-like methods. Speaking of templates,
> >> what
> >> about how well/poorly opDispatch, etc compose with @property? Oh, and
> >> then
> >> there are entire articles against the @property solution to the
> >> field/method syntax problem in computer science literature (look up the
> >> Uniform access principle used in Ruby and Eiffel).
> >> 
> >> Also, surprise isn't necessarily a bad thing. Methods-as-properties
> >> surprised me I received when I first started using D and it put a
> >> massive
> >> smile of joy onto my face in the process.
> > 
> > It's a property if it's marked with @property. If it's not marked with
> > @property, it isn't.
> 
> The concept of a property is entirely synthetic. It grew out of the desire
> to utilize field access syntax with methods. It's also somewhat fluid
> between languages, since in some it's exclusive, and in others it's not.
> 
> > Programmers can argue until they're blue in the face
> > about whether a function should be marked with @property and thus used
> > as a
> > property or not, but by strictly enforcing @property, it becomes
> > completely
> > consistent.
> 
> But that's exactly the problem: without consensus _enforced_ consistency
> means adapting yourself to one or more programming
> styles/school-of-thought simultaneously.

It's enforced only insomuch as a function marked as @property then must use 
property syntax, and those not marked with @property can't use property 
syntax. If that's not the case, then what is the point of @property? What does 
it do? The _only_ case which I see where it gives you _anything_ is that 
@property could help distinguish where a callable value is returned by a 
getter, but if you're allowing property functions to be called without the 
property syntax, then that introduces an ambiguity which renders even that 
benefit of @property useless.

Allowing for @property functions to be called with parens or non- at property 
functions to be called without parens leads to major inconsistencies in usage 
of functions, and generally makes @property pointless. Even if you make it so 
that @property functions can't be called with parens while allowing non-
@property functions to be called without them, then that leads to inconsistent 
syntax for function calls and makes it harder to know whether something is 
actually a property function or not. I really don't understand what benefit 
there is in not strictly enforcing @property. Yes, the change will break code, 
but if you don't make it, then very nearly the only benefit of @property is to 
serve as documentation saying that that was the way that the programmer who 
wrote the function intended it to be called.

> > Every @property functions is called as a property and no function
> > which isn't @property is called as a property.
> 
> But the fact that you're arguing this point shows that this isn't true.
> The issue is that unlike fields, functions, objects, etc, no two people
> really have the same concept of a 'property' in their heads. So when you
> say 'property' and I say 'property', we can mean very different things.
> This ambiguity is something fairly rare in programming languages; we
> expect that 'noun_X' has a single specific meaning/concept and it doesn't.
> So when someone talks about a 'property' they really mean as implemented
> in C# (or Java or Python, etc).
> 
> Sometimes I wonder if this is all a nomenclature issue; if
> Methods-as-Properties was simply called Methods-as-Fields and it was
> explained somewhere prominently as something unique to D with
> examples/benefits X/Y/Z, would anyone have an issue with it?

Yes. There will always be arguments over whether something is conceptually a 
property and should be marked with @property. But as far as the language is 
concerned, if @property defines whether the property syntax is used or not, 
then the programmer writing the function can dictate whether a function is a 
property function or not, and the calling of that function is then completely 
consistent. It also allows for the programmer to later make it so that an 
@property function is a variable instead. If @property isn't enforced, then 
you can't do that, and the interchangeability of public member variables and 
@property functions is supposed to be part of the point of properties in the 
first place.

There is a difference between the concept of a property and whether a function 
is a property function or not. Programmers can (and sometimes do) argue until 
they're blue in the face about whether something is conceptually a property or 
not. Ideally, anything which is conceptually a property would either be a 
public member variable or a property function, but it's up to the programmer 
to determine whether they'll make a function a property function or not. Once 
it's a property function, then it should be treated as a property and use the 
property syntax. So, the correctness of whether a property function actually 
represents a conceptual property is irrelevant as far as calling the function 
goes. The programmer who wrote the function made a decision, and then that's 
the API. As long as that is strictly enforced by the compiler, it eliminates 
ambiguity on the manner. It could be a poor design decision to have made it a 
property function, but there's no ambiguity on the part of the compiler or in 
how the function should be used.

> > And yes, there are definitely bugs with @property. They're going to need
> > to be
> > sorted out before @property is enforced, but the fact that bugs exist
> > doesn't
> > mean that we should never strictly enforce @property.
> 
> I've been taking this into account and (hopefully) haven't been holding
> quality of implementation against @property. If any of my arguments were
> QoI issues, please let me know.

The lack of chaining on some level at least is a quality of implementation 
issue (e.g. http://d.puremagic.com/issues/show_bug.cgi?id=2883 ). Whether 
chaining assignments calls both the getter and the setter or tries to use the 
return value of a setter (which it shouldn't have) is primarily a QoI issue. 
Most of what you've been discussing hasn't been, but some of it is at least 
partially a QoI issue.

- Jonathan M Davis


More information about the phobos mailing list