D Language Foundation May 2024 Monthly Meeting Summary
Mike Parker
aldacron at gmail.com
Wed Aug 28 07:43:05 UTC 2024
The D Language Foundation's monthly meeting for May 2024 was held
on Friday the 10th. It lasted about an hour and 30 minutes.
## The Attendees
The following people attended:
* Walter Bright
* Jonathan M. Davis
* Timon Gehr
* Martin Kinkelin
* Dennis Korpel
* Mathias Lang
* Átila Neves
* Razvan Nitu
* Mike Parker
* Robert Schadek
* Steven Schveighoffer
* Adam Wilson
## The Summary
### Item 1: Deprecating operator overloads in Object
Steve wanted to discuss the implications of deprecating
`toString`, `toHash`, `opCmp`, and `opEquals` in `Object`. He
brought this up after seeing [a post from
Átila](https://forum.dlang.org/post/xwkithpcwnltfpvsyxft@forum.dlang.org) in a forum discussion on the topic, in which Átila had said:
> I talked to Walter and we agreed that the best way forward is
> probably to deprecate these member functions and remove them in
> the next edition.
I failed to record about half of the conversation, but I did
catch the important bit. The idea was that we would have a
`ProtoObject` similar to the one previously proposed, or whatever
we wanted to call it, that did not contain the overrides. It
would become the new root object in code compiled under the new
edition and would be part of the `Object` hierarchy in legacy
code.
Steve explained that it was supposed to be possible to compile
libraries using two different editions, but they must be compiled
with the same compiler. So the compiler would be aware of these
two different root objects and the two different hierarchies. He
just wanted to make sure we all agreed that we couldn't just
remove members from legacy objects. He thought managing the
runtime library would be the trickiest part with editions.
Martin thought it was going to be weird having these different
hierarchies, but then as he was talking about it he realized that
with the proto object deriving from `Object`, it might really
work. Timon said that the new edition's object was `Object`
without the methods, and the `Object` in the old edition was
implicitly rewritten to legacy `Object`, and in new editions, you
could refer to that implicitly.
Jonathan noted that we'd talked in the past about wanting to
remove the monitor from `Object`. The proto object would allow us
to do that. He said we should also look at whatever else we
wanted to clean up in `Object`.
### Item 2: Forum moderation
Steve said we'd recently been visited again in the forums by
someone who periodically returned with sock puppets, and that had
gotten him thinking about forum moderation. There were a couple
of ways he thought we could improve it.
First, he thought it shouldn't just be me doing everything. It
would be better if we had a team.
Second, he wondered if we could be more transparent about
moderation. He knew we were running Vladimir's custom software,
and he noted that I'd mentioned in the forums that there was no
way to restore a deleted post because, ultimately, it was the
NNTP interface backing everything. He wondered if we could put a
layer of moderation tools on top of that.
Finally, he suggested we should have some moderation rules, even
if they were very vague.
I agreed that we should have more people moderating. When I
signed up, I didn't realize I was going to be the only one doing
it. A big problem was my time zone. Sometimes, I woke up and
didn't check the forums until late morning or early afternoon my
time and discovered something had blown up in the interim.
I said I also would love more forum moderation tools. I would
love to move away from the NNTP interface on the back end. It was
2024, after all. We should have a trash bin that stored deleted
posts so that they were recoverable. Then if somebody wanted to
appeal, we could have a process for that. We could have time-outs
and more. With those kinds of tools, we could be more aggressive
in good conscience.
As far as rules, I said that I'd been around forum communities
for 30 years. In my experience, in forums without rules, people
sometimes complained about the lack of rules, but then in forums
with rules, they argued over which rules were there. In the end,
I didn't think it mattered if we had rules or not. I thought
there were only two sensible forum rules we could have anyway:
1. The moderators have full discretion to remove posts and ban
users as they see fit.
2. All decisions are final.
Those were the only things that made sense to me because they
covered all the bases. There was no room for argument. There were
no loopholes. Moderation was inherently subjective, inherently
arbitrary, and inherently biased. For example, I'd give a lot
more room to Steve if he went on a temper tantrum than I would to
one of the sock puppets.
I noted that when Walter and I were having our coaching sessions
with Saeed from Ucora, we'd come up with this idea of having a
kind of philosophy rather than a set of specific rules. Not just
about the forum, but the community in general. It was inspired by
the honor system that Caltech had when Walter was studying there.
Just a general philosophy about the kind of community we wanted
to foster. Forum posts that went against that would deleted.
I asked that anyone willing to become a forum moderator please
let me know.
Steve said that a good reason to have a set of rules was when you
had a team of moderators. Then they'd have something they could
agree on.
I said that made sense, but I could give an example of what could
happen in that situation. I was in a forum once where the
maintainers established a set of specific moderation rules that
everyone was constantly arguing about. It evolved into "yellow
card" rules that were appealable and "red card" rules that were
not. And the list of red card rules just kept growing as they
plugged more and more loopholes. It was a mess.
So I thought specific moderation rules were not the way to go.
The other thing was that as moderators, Steve and I might have
different red lines. Those were going to be gray areas where we'd
never agree. He might delete a post I wouldn't have, or I might
approve a post he wouldn't have. We should agree to back each
other up in those cases, and any moderation guidelines we might
come up with should account for that.
I asked who wanted to join me as moderators. Steve and Dennis
both volunteered. Átila noted that covered all the time zones.
Razvan said he'd be happy to help, but wouldn't want to make
moderation decisions. He'd prefer instead to flag posts for
moderation. Steve noted that the forum software did have a link
to flag posts (not visible to everyone) that was a little
underdeveloped since it didn't allow you to specify the reason
you were using it. He said he'd typically only flagged spam. If
people were being argumentative, he felt the best solution was
just to ignore them.
I said the general rule I'd been trying to follow was that if
someone lobbed a blatant personal insult in a post, I didn't care
what other information was in it, I'd delete it. Sometimes I'd
see things that weren't blatant insults but tingled my spidey
sense. Something close to the line for me, but not across it,
though it might cross it for someone else. In those cases, I
would wait and see. If the target of the insult then reached out
to me to complain about it, in the past I'd often try to persuade
them to let it go since I didn't see it as an insult. These days,
I was more likely to delete the offending post. No questions
asked.
Another thing I looked for was if a post was disruptive to a
thread. What I considered disruptive or not, other people might
consider the opposite. So if I started getting emails about a
post that I initially let pass, I could say, "Okay, it's
disruptive.".
We then devolved into a bit of discussion about the forum's spam
filter, the types of spam we get, and so on, before moving on to
the next item.
(UPDATE: Vladimir set up both Steve and Dennis as forum
moderators a few days later. They've been working at it since.
It's nice to have the extra hands and eyes, so thanks to both of
them for stepping up.)
### Item 3: Walter's & Atila's DIPs in the new DIP process
When I announced the new DIP process, the one thing I hadn't yet
worked out was how to handle DIPs from Walter and Átila. I
believed that if Walter wrote a DIP and could persuade Átila to
approve it, that should be enough, and vice versa. But I
remembered the big community blowup over the safe-by-default DIP
and how we responded to that by requiring Walter and Átila to
find someone else to take on their DIP ideas. We'd since decided
that was a mistake, but I didn't want to make an arbitrary
decision myself about how to handle their DIPs in the new process.
Walter and I had spoken about it and we wanted to get input from
the rest of the team. I asked for their thoughts.
Jonathan said he wasn't sure what should be done in terms of
approval, but he thought it was important that Walter's and
Átila's proposals were submitted for community feedback. I said
that was a given, and that Walter had two DIPs in the development
forum at the moment. That was why this was coming up now.
One of the posted DIPs was [the bitfields
proposal](https://forum.dlang.org/post/v193hc$b9c$1@digitalmars.com). It had received a good bit of opposition, including from people in the meeting. The other DIP was the one proposing [ref for variable declarations](https://forum.dlang.org/thread/v11mh1$fvs$1@digitalmars.com). It wasn't controversial. Should he and Átila approve it, then no big deal. But what about the bitfields DIP? If they approved that, would we have another blowup?
Steve didn't think the bitfields DIP was as controversial as the
`extern(C)` functions being safe by default, which was the source
of the blowup over that DIP, because not many people were using
bitfields. He thought Walter's concerns were a non-issue as
nobody would care. The penalty would be that we'd just inherit
all of C's problems with bitfields.
Martin said it wouldn't just be that. The one thing he didn't
like was that we'd lose the ability to take the address of any
member. That would be an ugly special case.
Steve said his point was that there wasn't a whole lot of code
out there that was suddenly going to be broken. You'd have the
choice not to use bitfields. So he thought maybe people weren't
going to like it, but they weren't going to use them either.
I noted that I wasn't asking what to do about any specific DIP
but about DIPs authored by Walter and Átila in general. What
should their assessment look like?
Steve said he didn't know of a way to do it other than having
someone else with veto power involved to avoid the situation with
the safe-by-default DIP. It wasn't like there wasn't feedback on
that one, or that there wasn't complete disagreement between the
community and the maintainers, and they approved it anyway. He
didn't know how you could fix that. He didn't think it was the
DIP process, just that that specific DIP was controversial.
Átila said they had walked it back anyway, so he wasn't sure
anything failed in that case. Steve said that was true, but he
didn't know if there was something we could do with the process
to prevent controversy.
Timon said he didn't think the safe-by-default DIP was
controversial in its entirety. There was just one aspect that, in
his opinion, had an easy fix that Walter didn't want to
implement. He instead decided to revert the decision. In the end,
it wasn't an issue over breakage, it was just about having
`extern(C)` functions be safe by default.
He said that going forward, accepting a bad DIP would be less
consequential than it had been in the past once we had editions.
In the worst case, we'd have one thing more to maintain in an
intermediate edition before it was fixed. Maybe that was a
calculation we could take into consideration. Átila said that was
a good point.
I said I just wanted a solution. Razvan had made a point to me in
one of our conversations that when someone from the community put
a DIP forward, they had Walter and Átila as counterweights. They
were there to temper it and tone it down after all the feedback
to make the final decision. But if it was just Walter or Átila
putting a DIP forward, they each had only the other as a counter.
Did we need more than that? Did we need to set up something more?
That was what I was looking for feedback on.
Razvan believed we did. There should be a mechanism of oversight
for everyone submitting a DIP. Even the language maintainers
could get it wrong, so we needed someone to point that out. Átila
said that should be him, but maybe we could just pick one of the
team members to be a second counter.
Razvan noted that his original suggestion to me was that we
should have some sort of committee. It could be two or three
people we trusted with this. If it were just one person, to the
community it might look like Átila could just give two beers to
Walter to get his DIP approved. Átila joked that that would be a
lot more effective on him.
Walter said he wanted to avoid what had happened with the C and
C++ committees. He felt they had lost their way with the features
they were adding and approving. He said they'd approved some
baffling stuff, like C identifiers that were normalized Unicode
identifiers. And C++ had implemented modules in a completely
wrong and ridiculous way. And they had a new library function
called std::launder. He said that he laughed every time he heard
a description of it, then forgot what it did.
He said that when the C++ committee first formed back in the 90s,
he'd heard members say things like, "I'll vote for your feature
if you vote for my feature." He felt that kind of thing had led
to incredible complexity in the language.
I said that wasn't the case here. What Razvan was proposing
wasn't a committee that made proposals, but a committee that just
acted as a counter for proposals from him and Átila.
Átila said that either the committee should be the people in this
call, or that I should pick someone to be the second counter.
Robert said he had thought something similar. We should just go
round-robin or random selection. When Átila put a proposal
forward, we could select one of us who wasn't Átila to assess the
DIP with Walter. And if the chosen person didn't have the time or
felt they didn't have the expertise, they should bow out and we
would go a second round with a shorter list.
Razvan thought the point here was to avoid the situation where an
overwhelming majority of the community felt that a DIP by Walter
or Átila shouldn't be implemented. So we could just have a
discussion about that particular DIP in one of our meetings, and
then vote on it. If you felt you didn't have the expertise, you
didn't vote. Then it would also be on Walter and Átila to agree
that they would accept the result or modify the proposal to sync
it with expectations.
Átila said that would be okay.
Walter asked if everyone remembered his string interpolation
proposal. There was just him, and then everybody else. It was a
pretty painful thing for him, all the arguing about it. He didn't
like what happened, but he eventually threw in the towel on it.
He couldn't fight everybody on it. He still thought it had been a
bad idea to give up, but he accepted that the community wanted a
different approach.
It had been him against the world, and he'd given up. So it
wasn't the case that he could just override everyone in the
community. It may work in theory, but it didn't work in practice.
He'd given up on other things, too, over the years. He still
seemed to be the only one who thought `@live` had any value. He
thought the jury was still out on that, but he wasn't confident
it would survive.
Steve said he thought it was important that anyone involved in
assessing a DIP should be as neutral as possible. You didn't want
someone deciding on it who was adamantly for or against it. They
had to be able to look at the arguments objectively. That was
kind of the point of not having Walter or Átila as the author
involved in deciding. They'd be so close to it that they might
not see the drawbacks.
I said that I was uncomfortable watering down Walter's authority
as a language maintainer even when it came to approving his own
DIPs. What if instead of having the team vote for a DIP, we sat
down to identify critical flaws that would cause problems down
the road and hash those out? I didn't know what that would look
like, though.
Robert said it was like we were trying to discover a new
government form next to democracy. When Walter was talking about
how it was him against the community on certain issues, Robert
had the thought that D is much more now than just something on
Walter's computer all those years back. It had a growing
community and was used, loved, and hated by a whole slew of
people. A benefit was that Walter got to go to DConf and have a
good time, but it also meant that he lost some control. Robert
wasn't sure that could be avoided. He understood how Walter could
get uncomfortable with it, but felt it was par for the course.
He said whether we went with voting in our meetings, a committee,
or having one or two people sit in to decide when needed, it had
to be Walter's decision to abdicate some of his power. It wasn't
like we were a community of 80 million people. He worried about
coming up with a detailed DIP process trying to account for all
kinds of caveats. At the end of the day, we had to trust whoever
we elected to evaluate Walter and Átila's DIPs, even when we
disagreed with them. We just had to agree to disagree and move
on. He felt we weren't going to find "perfect" here.
Steve felt whoever we picked should handle things via
face-to-face discussions rather than via forum posts or emails.
It was too hard to read the context and emotions involved in text.
Adam said that one of the reasons people brought things to him in
Discord was because they knew he'd be sitting in front of Walter
for an in-person discussion. He said it had been a bit
frustrating at times because he didn't always get their points
across the way they wanted, but even in those cases he was often
able to get to a point where Walter would say, "Okay, I'll have
to think about that." So there was something to be said for
face-to-face communication.
We got sidetracked a bit here talking about instances where
disagreements had been solved via video calls, conversations at
DConf, and in other face-to-face scenarios, then Walter suggested
that if a DIP was controversial, then we should have a meeting
about it to work it out. The person carrying the flag for it
should be involved, and then we could argue this way and that
about it. Arguing about it in the forums was never going to work
and only resulted in hurt feelings.
I said doing that for controversial DIPs was fine, but the issue
at hand was about doing something like that for his and Átila's
DIPs. I proposed that instead of picking one person to serve as a
second counter, we could have a group meeting with the regular
team. We could get together, then I'd ask if there were any
objections to moving a DIP forward, and we'd go from there. The
goal would be to resolve any objections one way or another. If
they were resolved in the author's favor, the DIP could go
forward. If not, it didn't get approved. Then if coming out of
that, the DIP ultimately was approved and any controversy arose,
we could explain whether any objections were raised and, if so,
how they were overcome. The point would be that the whole team
would be behind it if it went forward.
I asked if everyone was okay with that. There were no objections.
### Addendum: Walter's two DIPs
I next asked if anyone objected to either the ref DIP or the
bitfields DIP. I wanted to know if we needed to call a special
meeting to handle either DIP or to determine if any objections
were simple enough to handle in the time remaining in this
meeting. There were no objections to the ref DIP, but Timon and
Steve indicated they had objections to the bitfields DIP. They
had already brought them up in the forums, but I asked them to
voice them here to see if we could deal with them.
This started a discussion that lasted close to 30 minutes. I
won't walk through the entire thing here, as ultimately the major
objections had already been aired in the three review threads in
the DIP Development forum. The two biggest ones were that we
should specify a layout for bitfields and require `extern(C)` on
any bitfield that was dependent on the layout in the system's C
compiler implementation. Walter believed that we didn't need to
specify a layout and that it was perfectly fine to rely on the
system C compiler implementation. We were already doing that with
things like struct layout anyway.
Additionally, Martin reiterated his objection that we'd lose the
ability to say that every member of an object was directly
addressable.
At some point, I cut the conversation off and proposed we hold a
separate meeting to discuss the bitfield DIP in detail. Everyone
agreed.
(__UPDATE:__ Given that no objections were raised to Walter's ref
DIP, it became DIP 1046 and I submitted it to Átila for
assessment. He requested one clarification [and then approved
it](https://forum.dlang.org/post/xyppgndgxdjyqtftfjgd@forum.dlang.org). The meeting regarding the bitfields DIP went well, overall. The consensus was that there was no objection to the DIP in principle, just disagreement over the implementation details. We talked about several potential issues with bitfields, including layout, alignment, immutability, taking an address, etc. In the end, Walter agreed to make a few changes to the DIP and to test the implementation with a serialization library to see how it holds up before deciding if the DIP should move forward.)
## Conclusion
On May 18, we had a small planning session with Rikki to discuss
his DIP 1045, then we had the bitfields meeting on May 25. Our
next monthly meeting was on June 14.
More information about the Digitalmars-d-announce
mailing list