DIP1000: Walter's proposal to resolve ambiguity of ref-return-scope parameters
ShadoLight
ettienne.gilbert at gmail.com
Fri Nov 26 10:32:54 UTC 2021
On Friday, 26 November 2021 at 02:03:41 UTC, Paul Backus wrote:
> On Friday, 26 November 2021 at 00:31:19 UTC, Dennis wrote:
>> On Friday, 26 November 2021 at 00:26:35 UTC, Paul Backus wrote:
>>> More seriously: this is exactly the kind of obscure "gotcha"
>>> that makes C++ so beginner-hostile, and IMO it is worth going
>>> to considerable lengths (including breaking changes) to avoid
>>> it.
>>
>> Allowing breaking changes, what syntax do you think makes
>> intuitive sense?
>
> * Allow `return ref` and `return scope`.
> * Forbid the `return` storage class from appearing in any other
> context.
>
As an occasional D(hobby) user but long-time lurker on this
forum... it has been noticeable t me that D is gradually
approaching C++ in complexity!
Something like this, as you hinted,...
> ```d
> struct S {
> ref int opIndex(return ref scope this) {
> // ...
> }
> }
> ```
... are inevitably going to be confusing to newbies.
Personally what I think would help is to somehow 'link' those
keywords together that is a single entity i.e. in your example
`return ref` and `return scope` becomes `return-ref` and
`return-scope`.
Or anything similar that achieves the same, like `return_ref` and
`return_scope`, as long as it is clear that they are not separate
keywords in this context. Or whatever makes the most sense from a
lexing/parsing POV.
It will at least read easier and be easier to explain (like `ref
int opIndex(return-ref scope this)` is allowed, but not `ref int
opIndex(ref-return scope this)`, compared to `ref int
opIndex(return ref scope this)` is allowed, but not `ref int
opIndex(ref return scope this)` .
I realize this in effect introduces new keywords and is equally a
breaking change, but in my opinion this is preferable to the
explosion in parameter attributes we are seeing.
More information about the Digitalmars-d
mailing list