On Thursday, 6 April 2017 at 07:24:28 UTC, Nick B wrote:
I'm going to address this post to Walter and Andrei, as the
joint captains of the D ship, so to speak.
[...]
For the community, it seems different rules apply. In-depth
news-groups discussions for new proposals are firstly
encouraged and then later discouraged, with the ultimate
response that the proposal MUST be in the form of a
time-consuming DIP, to be considered, even if it will
ultimately wastes everyone time, and cause resentment in the
community.
Agreed.
I don't want to make any assumptions, and I do respect Walter for
consistently taking on a role that means that people keep
criticizing his choices whatever he does, but his approach to
dealing with the community is undeniably flawed, and seems to be
breeding a lot of frustration and resentment.
My personal example is from a discussion we had in February about
'return scope', where Walter Bright asked deadalnix to explain
his case, and explain the problems he saw. At the time, deadalnix
(and other users) replied that they didn't want to make their
cases, because they had already done so in the past, and they
expected Walter to ignore whatever they would tell him.
http://forum.dlang.org/post/[email protected]
I outlined several problems I saw with return scope, and Walter
replied to my post, answering each point I made. And while it's
commendable that Walter took the time to do it, those answers
felt extremely frustrating to me; Walter did *not* address my
points, and did not take what I was saying seriously. As an
example, one of the problems I pointed out was:
It only addresses cases where a reference might be escaped
through a single return value; it doesn't address escaping
through 'out' parameters,
The following conversation ensued:
Walter:
Yes it does (the general case is storing a value into any data
structure pointed to by an argument).
Me:
I don't understand. Let's say I have an arbitrary class
'Container', and I want a function that stores a pointer to an
int in this container, in a way that lets the function's caller
know that the int* given to it will last only as long as the
container, and I want to do it without return values. The
prototype would be akin to
void store(ref <scope-info> Container cont, <scope-info>
int* ptr);
And the code it would be used in would look like:
{
scope Container c;
scope int* ptr = ...;
store(c, ptr);
}
What would the syntax be?
Walter:
c.ptr = ptr;
You can also do:
ref Container store(ref return scope c, return scope int*
ptr);
The rest of the conversation basically went like this:
Me: This isn't possible, or if it is, it shouldn't be.
Walter: Yes it is. It compiles.
Me: Okay, but it shouldn't compile, because it make [invalid
write error] possible.
Walter: Well, it doesn't compile with @safe.
Me: Yes, it does compile with @safe, and no, it shouldn't, and my
point from the beginning was that your model made that kind of
function impossible. Why do you think we're even talking about
this?
In short, Walter asked for people to give their opinions on the
subject; but when I did give my opinion, Walter did not take my
points seriously, and basically assumed that the only reason I
disagreed with him was that I didn't understand the subject as
well as he did. Other people (including Dicebot) have complained
about that.
This was a very frustrating experience, and I did not want to
participate in the discussions about Dlang any further after that.
Look, again, I feel bad trash-talking Walter. He's putting a lot
of effort into this. But he's clearly really, really bad at
listening to other people. This has to be addressed at some point.