On Thursday, 24 January 2013 at 08:35:01 UTC, Walter Bright wrote:
This has turned into a monster. We've taken 2 or 3 wrong turns somewhere.

Perhaps we should revert to a simple set of rules.

1. Empty parens are optional. If there is an ambiguity with the return value taking (), the () go on the return value.

2. the:
   f = g
rewrite to:
   f(g)
only happens if f is a function that only has overloads for () and (one argument). No variadics.

3. Parens are required for calling delegates or function pointers.

4. No more @property.

Under the proposed rules, which of the lines in the output of the following program will be the same?

---
import std.stdio;

int globalInt = 42;
auto ref g() {
    return globalInt;
};
auto globalG = &g;

auto ref f() {
    return globalG;
}

void main() {
    writeln("&globalInt: ", &globalInt);
    writeln("globalInt: ", globalInt);
    writeln("&globalG: ", &globalG);
    writeln("globalG: ", globalG);
    writeln("---");
    writeln("&f: ", &f);
    writeln("&f(): ", &f());
    writeln("&g: ", &g);
    writeln("&g(): ", &g());
}
---

Also, don't forget that @property was actually introduced to solve specific syntactic issues, not just because somebody didn't like the laxness of the previous rules.

Now, yes, the current implementation in DMD doesn't solve the issues, while introducing new issues by disallowing parameterless function calls altogether. But I think the last larger discussion on the topic some two to three months ago produced a set of @property rules that would actually work. I think there is a summary in DIP21.

Anyway, I think you should turn your proposal into a DIP, and better sooner than later so that the details on the edge cases, impact in terms of breaking code, … aren't lost in an endless forum discussion.

David

Reply via email to