I approved DIP1036e

Adam D Ruppe destructionator at gmail.com
Fri Jan 19 00:20:36 UTC 2024


I unsubscribed from this forum, since I find it to make me angry 
and not lead anywhere productive, but people linked me to this so 
I'll give one more reply to set the record straight.

There's a ST:TNG scene that comes to mind relating to all this:

https://www.youtube.com/watch?v=Owyj_5TuHQw

"It's not you I hate, Cardassian. I hate what I became because of 
you."

I used to be nice to people online. I used to not cuss online. I 
kinda miss the old me.

On Thursday, 18 January 2024 at 16:31:11 UTC, Mike Parker wrote:
> Adam was unhappy that Walter wanted a spec, so Atila agreed to 
> put the editions proposal on hold to get it done (and please, 
> let's not rehash the argument about reading code vs. writing 
> specs).

It was never about reading code vs writing specs. Let's review 
the facts.

I published an implementation *in an effort to clarify an 
existing spec* - implementing the YAIDIP as written by John 
Colvin and Andrei Alexandrescu, which is an evolution of DIP1027 
- on October 19th. https://github.com/dlang/dmd/pull/15714

In the process of working with that implementation, I found flaws 
in the design (in particular, it was incapable of handling tuple 
arguments, which includes nested strings, because they threw off 
the odd-even rule specified) and fixed them in a separate branch 
on October 20th (note that there are other potential ways to fix 
this issue, but since this was already a solution we debated and 
found working during the original dip1036 review, I stuck with it 
- that's why the PR is called "1036e", since it built on those 
existing principles). https://github.com/dlang/dmd/pull/15715

Note that DIP1036 was written primarily between September 2020 
and March 2021. This is not a new topic, many of us have spent a 
significant amount of time on the topic over a period of many 
years. 
https://github.com/dlang/DIPs/blob/344e00ee2d6683d61ee019d5ef6c1a0646570093/DIPs/DIP1036.md

There are, of course, several differences between the PR and the 
original dip1036 (whereas PR 15714 kept quite strictly to the 
YAIDIP's text), but we'll get to those soon.

So, remember, the code was written on October 20th.

To better show how the feature works in practice, I wrote the 
first of several user-facing examples on October 21st. 
https://github.com/adamdruppe/interpolation-examples/commit/ca4441508c9726519e769184cc7314fc0bf146b7

On October 23rd, Walter stated that the PR "Lacks 1: complete and 
accurate specification, or even a description. 2: comments. 3: 
test cases". 
https://github.com/dlang/dmd/pull/15715#pullrequestreview-1693080343

(Frankly, I think that very request is obnoxious, because on 
October 22nd, Walter posted his dip1027 implementation. I've said 
before that him doing this is a real slap in the face of the 
whole DIP process - his DIP was reviewed and rejected. He's been 
beating that dead horse for many, many years, never 
incorporating... or even *acknowledging* the feedback from 
reviewers. You probably recall my listing the receipts for this 
on New Year's Eve.

But nevertheless, compare the first draft of PR 15722 with the 
first draft of PR 15715. They're very similar, down to the 
semantic function both using the same `new MixinExp` hack (well, 
I thought it was a hack, until I saw Walter did it the same way, 
so apparently he thought it was a decent way to do it!). So I 
found it difficult to believe he was simultaneously capable of 
writing one implementation and incapable of understanding an 
independent, yet *very similar* implementation. Even if there 
were questions, he surely has significant foundation to ask them 
specifically and engage in a productive dialog. But instead, it 
was a vague drop and run. This is why there's an "us vs them" 
mentality - Walter acts not like a partner for peace, but rather 
as an obstacle to overcome. The DIP process structurally 
reinforces this - he is like the final boss to defeat after a 
grueling gauntlet to get to the prize.)

However, despite my skepticism, on October 24th, I started 
fulfilling that request, adding the first tests, which also 
double as basic documentation and examples on the compiler side, 
showing some specific edge cases that differentiate it from the 
original dip1036 text. 
https://github.com/dlang/dmd/commit/75f6f326695b5354c9ffb38ed4ec47b057881549

Additionally, on October 24th, I edited the first comment on the 
PR to incorporate a plain text description (similar in style to 
Walter's 1027 PR's introduction). (Click the "edited" drop down 
on the comment on Github to see the history with dates attached. 
Note that at the time Walter made the request, the plain text 
description was indeed not there. But shortly after he requested 
it, I edited it in to be easy to find.)

I added additional documentation, both comments on the 
implementation, more tests for specific edge cases that needed 
clarification, and VERY IMPORTANTLY a full user-facing 
documentation page on *October 26th*. 
https://github.com/dlang/dmd/commit/2ff8e2d1598d4b2cd581320095f526c8547c2c46#diff-22dd3c85816b0aa6351d1bc21e72ed410b509f8f7c768db3dd974967751b37e1

I've posted this link several times, and never got an 
acknowledgement from any of you that it exists.

Click that. Check the date on it. Read the contents on it. This 
is NOT code one has to reverse engineer. This is a description, 
written up as a standard D documentation block, for users to 
understand how the feature works.

Again, THIS IS NOT ASKING SOMEONE TO REVERSE ENGINEER THE CODE 
nor is it true that I refused to write documentation. There ARE 
examples, tests, comments, and two plain text descriptions, one 
aimed at the code reviewer and one aimed at the end user.

This is the #1 thing driving me nuts about this whole thing. 
Walter requested a description on Monday, October 23rd. I 
answered that request by *Thursday, October 26th*. The examples 
and documentation I wrote over those three days form a 
significant fraction of Atila's DIP text! 
<https://github.com/atilaneves/DIPs/blob/string-interpolation/Interpolation.md> (This dip was mostly written between December 18th and present day.)

Then, when we were on the DLF call on November 10th, more than 
two weeks AFTER I had *already written the requested 
documentation*, Walter again demanded a nebulous "spec" instead 
of engaging with the work that was already done.

I'd say "you have no idea how angry this makes me", but you were 
on that call. You certainly have some idea of how angry it makes 
me.

Now, I confess, my kneejerk reaction on that call, the sudden 
outburst of anger, was not an ideal response. I'm ashamed of the 
angry outburst. It surprised even myself. I was otherwise 
prepared with the documentation and examples written, but I was 
evidently not emotionally prepared.

Nevertheless, can we please, PLEASE, finally acknowledge the 
*verifiable fact* that I did NOT refuse to write documentation, 
but rather quite the contrary, actually *did* write the requested 
documentation within 72 hours of receiving the request.

If you all have a specific problem with this, you never 
communicated what it is. Do you (plural you, not you 
specifically, Mike) just not know it exists? Do you find the 
formatting unacceptable? The content insufficient? If so, in what 
way?

I'm actually inclined to think it you all honestly don't even 
know it is there. This would be consistent with many other cases 
where leadership made a request, the request was fulfilled, then 
silence. There's little follow-up.

You might notice that on those DLF calls, I prepared ahead of 
time for each one, starting with follow up on old business, then 
introducing new business. I kept the notes from the previous 
meeting and checked the links ahead of time so I could see what 
was done and what still needed to be done.

I suggest you do the same. But not just with meetings. Do it with 
any time - when you request something, put a note on your 
calendar to follow up on it some time later. In fact, it is best 
to communicate your schedule to the person you're requesting, 
such as "This needs documentation and test. I will check back in 
on Friday."

That's actually one useful bit of deadlines: they're a good time 
to schedule the follow up. Look back at the original request and 
see if it was done. E.g., reload the pull request page and glance 
it over for new pushes, then you can talk to the person you 
requested the work out of, knowledgeable of what was done to keep 
the conversation on topic and productive.

IIRC this was the key feature of the DIP redesign back when 
Dicebot proposed it - the old dips, before dip1000, were often 
left in limbo. The new process, with you taking up the role as 
dip manager, included various steps and timeframes to ensure 
something happened.

The new DIP process has also failed - i think the us-vs-them 
structure, frontloading the grinding work just to have it 
dismissed or misunderstood in an adversarial battle instead of 
refined in a cooperative, iterative process is the key to why - 
but ensuring you do get an answer in a predictable timetable is a 
good idea.


Anyway, I'm going back off this forum too. I have better things 
to do than argue in circles again as well.


More information about the Digitalmars-d mailing list