On Fri, 22 Apr 2011 00:26:40 -0400, Jonathan M Davis <[email protected]>
wrote:
> Allowing for @property functions to be called with parens or
> non-@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.
Why is this a benefit? Since your concept of a 'property' differs from
mine, @property can only muddy the waters (unless we're both writing
code
using the same standards document). Being able to switch between call
styles, allows me to self document my own (or my company's) guide-lines
into the code. Besides, why should I care if something is a 'property'
function or a regular function? or even a field, for that matter?
There's
field syntax and there's method syntax, but why should the library care
how I choose to access their code? They don't have to read/review it. I
(and my team/managers, etc) do.
One of the points of properties that I've seen commonly discussed in
languages
in general is the fact that you can more or less seemlessly switch
between
something being a public member variable and a property function.
Actually, seamlessly switching between field and field-like methods isn't
a design goal of 'properties'. The actual design goal is to allow the
promotion of a field into a member function. Once that occurs, you can
never go back, due to method overloading. In fact, OOP concerns were one
of the major driving forces behind 'properties' in the first place.
As soon as
you're loose about enforcing property syntax that doesn't work.
Actually, since you're not actually suppose to ever downgrade a 'property
function', this isn't that big of a deal. And at a more formal level,
Methods-as-Fields is a subset of the Uniform access principle. And UAP is
capable of downgrading any function, not just 'property function's, to a
field, so long as inheritance isn't an issue.
And the fact
that D is loose about it is incredibly bizarre.It's the only language
that I
know of that works that way.
Both Ruby and Eiffel do similar things.
Typically, property syntax is strictly enforced
for property functions and completely disallowed for non-property
functions.
C# definitely works that way.
Property functions are part of the API of a library. The fact that they
are
property functions is part of that API, just like the names of functions
and
how many parameters they have is part of the API. So, making it so that
@property is strictly enforced such that it strictly defines the syntax
for
calling a function isn't really any different from requiring that you
use a
specific name when calling a function.
So 'properties' should be strict because ()s are part of the API, but ()'s
are only part of the API if 'properties' are strict. (circular logical is
circular)
Making it loose instead is actually the
sort of thing that is extremely uncommon in programming. Programming
syntax is
generally very exact.
I do not think that word means what you think it does. Yes, programming
languages need to be unambiguous/exact simply to compile. However, they
very often include multiple ways of doing the same thing; infix operator
overloading and functions, fields and methods, objects and structs,
if/for/foreach/do/while/goto/break/continue, with(...), etc. The option of
using ()'s or no-()'s can be view similarly. Note that all those examples
have sparked various debates, spawned languages and list wars over the
years. D is a multi-paradigm language and should allow you to express
'property' based design as well as non-'property' based design.
What it sounds to me like is that you just don't like the idea of
property
functions and don't want to have to ever use them as property functions.
I'm sorry for that impression. I believe it's party due to the nature of
this thread. It began as a response to your assertion that there were zero
problems with strict property enforcement. I hope this discussion has at
least raised your awareness of some of the issues that exist with strict
'property' enforcement and that you have given some thought to their
importance relative to the benefits of strict 'properties'.
I whether I like or dislike 'property functions' is really dependent on
your definition of what they are. I've used different "properties" before,
read up on their history, usage and conceptual evolution in other
languages and academia. C# style 'properties' are, quite literally, a copy
of the first 'quick hack' to solve several key software engineering
problems. This isn't actually a criticism; the extreme power of C++'s
templates, as I understand it, was something of an accidental discovery
followed by an evolutionary process. And, in other languages, the original
concept of 'properties' has evolved as well. I'd put D as about halfway in
the evolutionary process (as currently defined) today. The mixing of field
and method notation is still a fairly new concept as programming languages
go, and I don't believe the concept has been fully explored and put to
rest yet. So yes, the trail isn't as broken in as we may have liked, but I
don't believe that is a reason to head back, as it were. As we run into
issues, we should evaluate them, dissect the root problem and then
brainstorm multiple possible solutions and ways to go forward.
Personally, I think that it is _way_ better than the incredibly lax way
that
property syntax has been handled in the past. And it seems perfectly
normal to
me that they'd be just as much a part of the API as the function's name.
Except that it isn't normal, historically speaking. Pre-'properties', no
one would consider ()'s as part of a function's API. And in
post-'property' languages, no one considers ()'s as part of the API. That
'properties' even gave designers control over ()'s in the first place, is
more an artifact of implementation then active, intended design.
If
@property isn't enforced, then I don't see much point in ever having
added it
in the first place. The only advantage that I can see with having
@property
and lax enforcement over no @property at all is the incredibly rare
ambiguity
with delegates, and I honestly don't think that that problem merits
adding
@property. Strictly enforcing @property, on the other hand, and making
the
syntax consistent _is_ well worth it.
What do you mean by 'consistent'?
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos