On Mon, 25 Apr 2011 15:46:20 -0400, Steve Schveighoffer <[email protected]> wrote:
From: Robert Jacques <[email protected]>
To: Steve Schveighoffer <[email protected]>; Discuss the phobos library for D <[email protected]>
Sent: Monday, April 25, 2011 3:29 PM
Subject: Re: [phobos] Time to get ready for the next release

On Mon, 25 Apr 2011 09:58:47 -0400, Steve Schveighoffer <[email protected]> wrote:
----- Original Message -----
From: Robert Jacques <[email protected]>
To: Discuss the phobos library for D <[email protected]>
Cc:
Sent: Sunday, April 24, 2011 12:03 PM
Subject: Re: [phobos] Time to get ready for the next release

On Sun, 24 Apr 2011 07:33:30 -0400, Jacob Carlborg <[email protected]> wrote:

  If writeln = "foo"; doesn't compile but printf =
"foo"; does then I would consider it not fixed. The way I would want
@property to behave is disallow bar = "foo"; for functions not marked
with @property. But still allow functions not marked with @property to be
callable without parentheses.

Also, this and another post have given me an idea: what if non-@property methods could be assigned to if and only if a valid 'getter' also existed. This
would still 'fix' writeln = "foo" but be a less restrictive
than an outright ban.

It was an idea that Andrei brought up (before @property syntax was introduced), but I don't think it can be properly enforced:

int select(int timeout = 0); // both "getter" and "setter"

-Steve

Hmm... good point. Counter-point, select's functions signature is still a 'setter' signature. A 'select' / 'select()' method doesn't exist, it's simply syntactic sugar for select(0). Since a lookup of select by DMD involves the actual function overloads and not their sugary-transforms, it should still detect that select has no zero-arg overload and therefore error on 'select = 5'.


Easily worked around:

int select() { return select(0); }
int select(int timeout) { ... }


This seems silly, but it actually is likely to occur with final interface methods that want to enforce what the default select does.

That makes sense. Thanks for the example and rational.

But in any case, this is diverging into the obscure. I don't think rules that try to guess what the author is intending are as good as annotations which tell the compiler what the author is intending.

Of course not, but there's a reason that most cars are automatics: there is a non-negligible cost to using a heavy annotation based system. The question isn't so much as is one 'better' or not, but is it good enough most of the time? There are problems with using @property alone. There are problem with using Methods-as-Fields alone. This would indicate that some compromise is needed, and therefore every point of the synthesis/trade-off curve is valuable. (Or alternatively that we need to scrape both and start a fresh)
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to