Reddit: why aren't people using D?
Steven Schveighoffer
schveiguy at yahoo.com
Mon Jul 27 09:13:59 PDT 2009
On Mon, 27 Jul 2009 10:54:00 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
>
>> That's why properties are not
>> functions.
>
> This post had a negative effect on me: I now think properties are
> functions even more than before.
Let me bring you back to the issue at hand:
writefln = "hi";
:)
properties are *implemented* using functions, but both properties and
function usage should be restricted to disallow bizare code.
Another example:
I've brought up this example before, but I'll summarize the issue. I
created a TimeSpan struct for Tango, which represents a span of time. I
had static functions to create time spans, and properties to convert time
spans. For example:
struct TimeSpan
{
static TimeSpan seconds(long n); // returns a TimeSpan representing n
seconds
...
long seconds(); // convert this timespan to seconds
}
So you use it like this:
auto ts = TimeSpan.seconds(5);
assert ts.seconds == 5;
But then I got a bug report one day that this assert fails:
auto ts = TimeSpan.seconds(5);
ts.seconds = 4;
assert(ts.seconds == 4);
What the second line does is create a temporary TimeSpan of 4 seconds, and
throw it away.
What happened here? Why did the compiler compile this code at all? Well,
because I can't tell the compiler "no, that static seconds function is
*not* a property", someone tried to use it as one, and then complained it
didn't work like it should. Would anyone reading the second line of code,
knowing it compiles, *not* think "aha! TimeSpan has a way to set it's
seconds component"?
The "solution" was to rename the static function to fromSeconds, although
this is still valid code:
ts.fromSeconds = 4;
it doesn't look like it means anything (what's this fromSeconds field?).
But WTF? Why do I have to do this kind of shit instead of just telling
the compiler "this is how you use my object. Any other uses are invalid.
End of discussion".
For reference: http://www.dsource.org/projects/tango/ticket/1184
-Steve
More information about the Digitalmars-d
mailing list