D Language Foundation January 2025 Quarterly Meeting Summary
Mike Parker
aldacron at gmail.com
Thu Apr 10 11:37:11 UTC 2025
The D Language Foundation's quarterly meeting for January 2025
took place on Friday the 3rd at 15:00 UTC. It lasted about 35
minutes.
Our quarterly meetings are where representatives from businesses
big and small can bring us their most pressing D issues, status
reports on their use of D, and so on.
## The Attendees
The following people attended the meeting:
* Walter Bright (DLF)
* Luís Ferreira (Weka)
* Dennis Korpel (DLF/SARC)
* Mathias Lang (DLF/Symmetry)
* Átila Neves (DLF/Symmetry)
* Vladimir Panteleev
* Mike Parker (DLF)
* Carsten Rasmussen (Decard)
* Robert Schadek (DLF/Symmetry)
## The Summary
### Carsten
Carsten said that at Decard they were just continuing with work,
building out their network, and so on.
As a personal project, he'd been playing around with BetterC on
embedded systems. He'd encountered an issue with D's `size_t`: it
didn't fit the 16-bit words on AVR, which caused problems with
`.length`. It broke when trying to compile. He hadn't looked
deeply into it.
I said I'd never heard of AVR. He said it was an old 16- or 8-bit
processor. It was still used a lot. Arduino used it, for example,
and LLVM had a backend for it.
He said it worked if you didn't use `.length` on arrays or didn't
use `foreach` and such. Then you could actually compile with
BetterC, but you lost the advantages of BetterC over C.
He explained that AVR only had 8-bit registers. It could map them
to 16-bits, but it couldn't do it with `size_t` because it was
32-bits. He'd given up and switched to RISC-V because he didn't
want to spend the time on it.
I asked if they were still doing WASM stuff at work. He said they
were. They were building a transpiler for WASM to BetterC because
it was easier for them to use it like that.
### Vladimir
Vladimir said he'd had problems with a couple of codegen bugs,
but he'd found workarounds since the last meeting. Aside from
that, everything was okay.
### Luís
__Issues__
Luís said Weka had fallen into four issues, two of which were
related to codegen:
* [Lamdbas were being mangled
incorrectly](https://github.com/dlang/dmd/issues/20234), which
caused the resulting codegen to use the wrong mangle.
* [There was an issue with
`__traits(compiles)`](https://github.com/dlang/dmd/issues/20545)
guessing the wrong branch and generating the wrong code.
He'd uncovered another issue while rewriting their tracing
system. It traced every function entry and function call. The new
system was behaving differently than the old one. He found that
[out parameters didn't call the destructor when it was
assigned](https://github.com/dlang/dmd/issues/19109).
There was a discussion thread on the issue. Razvan had said there
that the spec wasn't clear whether out parameters should call the
destructor. Luís thought they should, but it was something we
should discuss. He said out parameters influenced the reference
counting of some objects. With this issue, reference counting was
buggy.
Another issue was [a problem with typed variadic arguments and
destructors](https://github.com/dlang/dmd/issues/17822). He said
we could see it in two different ways: either the destructor was
called twice or the postblit wasn't called. When an object in a
variadic argument had a custom postblit, it wasn't called.
He said someone at Weka was trying to solve it, but the good news
was they'd found workarounds for everything. The
`__traits(compiles)` issue was very hard to debug. They'd had to
run DustMite on their code and wait a few days to find it.
Luís said he'd submitted a PR for another issue, though he didn't
have a link handy since it was on his personal account and not
his work account. There were some cases when a template failed to
instantiate in which the errors weren't propagated into a
supplemental error message. It ended up saying the template
failed to instantiate, but not where. If that were clearer in
every case, those errors would be easier to debug.
Dennis asked if the lambda mangling issue was manifesting with
separate compilation. Luís said he wasn't the one who had
reported it and wasn't that familiar with it, but he thought that
yes, it was two compilation units. Dennis said that had been
[fixed in a recent PR](https://github.com/dlang/dmd/pull/17102),
at least the reduced example.
(__UPDATE__: Dennis has since told me the following:
> It's a partial fix. It fixes the most common cases, but there's
> still cases where the location isn't unique (e.g. because of
> mixin) where it falls back on the old unstable logic.
)
Luís said another thing on their side was that they were using an
old compiler. So there would be cases where old issues were
solved for later compiler versions. They were in the process of
updating the compiler to the latest version. He knew that Johan
had run into an issue upgrading to the latest beta, but he didn't
know what it was. They were on LDC 1.30 and wanted to upgrade to
1.40, which was a lot of versions.
Walter said we had move constructors mostly implemented now. Once
they were solid, he thought it best to abandon postblits.
Luís said they used postblits a lot. The spec said they should be
using copy constructors instead, but they weren't, so that was an
inconsistency. But he thought the problem would be solved if
there were just one way to do it. So he agreed that move
constructors would probably solve it.
Walter said he had no plans to improve postblits. I noted that
Weka's use case was one of the motivations for move constructors
anyway.
Regarding out parameters, Luís asked if there was any consensus
on whether they should call destructors. Átila said his instinct
was to say they should, but he didn't know what kind of
second-order effects could come from it. Walter said he wasn't
familiar with the code that caused the issue, so he couldn't say
for sure. He'd have to look into it. Luís said if we decided they
shouldn't, then we should either warn the user or put it in the
spec.
Walter asked if Luís was saying that the destructor wasn't called
before the object was reinitialized. Luís said he was. Walter
said that wasn't how out parameters were intended to work. They
were supposed to be given uninitialized objects.
Luís said if we went in that direction, we should enforce that
the object was uninitialized and make it clear in the spec.
Walter agreed the compiler should detect the error, but out
parameters shouldn't be passed objects that expected to be
destructed before they were reinitialized.
Luís said he understood. He thought they mostly had that issue in
their RPC infrastructure. In cases where they upgraded and
downgraded between versions, if they changed the out parameters
to ref or something, then the person who wrote the code was
probably assuming some kidn of behavior that wasn't happening. It
wasn't something he approved of. He'd found it when he created
some tests.
I was surprised that it wasn't in the spec. Luís reiterated that
Razvan had mentioned in the issue that it wasn't clear. Átila
said the spec said only that the parameter was initialized with
`x.init` upon invocation. Walter said initialization implied it
was uninitialized to begin with.
Luís thought that in `@safe` code, we should warn if something
that wasn't void initialized was passed to an out parameter.
Walter said the problem with doing that in the general case was
that it required data flow analysis. Luís said we could still
catch some cases, even if others were silently allowed. We could
mitigate some issues.
Walter understood the point behind that. He worried that if we
only covered some cases, people would assume it would always
work. They'd pass something it couldn't detect and wonder why
they had a problem.
It was the same sort of thing with statically checking for null
pointer dereferences. People wrote examples saying the compiler
should track whether a pointer was null. He thought the compiler
probably should, but if we implemented it, someone would have
cases where it wasn't checked because of complex flow control.
That would be very unexpected behavior for them. That was why
he'd been reluctant to implement it. It gave a false sense of
security.
Luís said it was something they'd considered implementing a
linting rule for. It was probably easy, though, to at least give
a warning about using out parameters in specific situations.
I said the docs should be explicit that anything requiring
destruction shouldn't be passed to an out parameter. It was all
too easy to reuse an instance for that. If it required
destruction, you would have to handle it manually.
Átila agreed and thought we should explicitly say that
destructors would not be called. Walter and Luís agreed.
__The new GC__
Luís said he'd spoken with Amaury at DConf about the new GC
implementation regarding ARM. The new GC assumed a page size of
4K, but ARM had a different page size, which could cause
higher-than-expected memory usage on ARM systems. He wanted to
follow up on the implementation's progress.
I said no one at the meeting was up to speed on that. It would
have to be Steve or Amaury. I said I could put him in touch with
them and he could ask them (and I did).
Luís said Weka had considered forking the GC to have some extra
checks. This was a problem for them with scaling in terms of
memory, basically scaling and the number of nodes they had on the
same machine. Sometimes the GC didn't collect when they wanted.
Mostly this was their problem and not a GC problem, but if the GC
had better interfaces for debugging it would be easier for them
to understand the issue. For example, one of the things they did
was to have some calls to the GC for a small allocation or a
large allocation. That wasn't parameterized in the GC, so they
needed to change it in their compiler fork.
They thought of forking the GC to have traces for debugging when
there was a problem. He emphasized this was almost certainly due
to their misuse of the GC in some way. He understood the new GC
had some improvements for that. It was something they wanted to
have.
### Dennis
SARC had been upgrading from 32-bit executables to 64-bit.
Everything had been mostly okay. They'd had some trouble with
32-bit precompiled external libraries. Now they were trying to
bind it all together with Microsoft's COM servers, which was a
hassle, but nothing to do with D.
Everything was going pretty well.
### Robert
Robert had nothing related to work, but he said someone had let
him know that he'd overlooked the Installer issues in the
Bugzilla to GitHub migration. Those were now done. Unless anyone
found anything else he'd missed, that should be all of them.
Walter said he'd noticed that there seemed to be a one-off
between the issue numbers and the PR numbers. He was getting
confused when switching between them as to whether he was dealing
with the PR number or the issue number.
Robert said that it depended on the repository and, to a degree,
on the project itself. They were just incremental numbers that
happened to be lining up too close for Walter's comfort. He could
create a couple of dummy issues and delete them. Aside from that,
there was nothing we could do about it.
Walter asked if Robert was talking about new issues and PRs
rather than the migrated ones. Robert said it was true even for
the migrated ones. However, he'd used a two-stage API to create
the issues from the migration, so they wouldn't necessarily be
incremental.
He said the issues were created in parallel, and then another API
pulled on them when they were done. And because GitHub was a
highly distributed system at this point, they weren't necessarily
processed in the order they'd been submitted. So there could be
some reordering now for certain issues, though the difference
wouldn't be large.
Vladimir said Robert was talking about migrated issues. He asked
if Walter was talking about migrated ones or new ones. Walter
said new ones. Now all of the issues and PRs were mismatched.
Vladimir explained that GitHub had a single numbering system for
both issues and PRs. So if you took a URL to an issue and
replaced the number with a PR number, GitHub would take you to
the PR, because it knew that number referred to a PR and not an
issue. GitLab had it the way you might expect, with issues and
merge requests having different numbering systems, but on GitHub,
they used one system.
He said the only fix would be to create a separate repository
just for the issues, but he didn't expect we'd want to do that.
Walter said we definitely did not.
Walter noted that the instructions when submitting a PR still
referred to setting things up for Bugzilla instead of with GitHub
issues. Vladimir said there was an open PR to fix that. The tests
were still failing.
Robert said someone had left a note in Bugzilla that the issues
had been moved. He wasn't sure who that was. Vladimir raised his
hand, and Robert thanked him.
Walter thanked Robert for putting in the work to get the
migration done. He thought it was going to be great.
Luís gave Robert a "big thanks". He said it was much better. Weka
used GitHub for their issues, and when they referenced issues now
it should all be tracked in the same place.
I asked if we still wanted to do what we'd discussed before and
make the Bugzilla read-only. Dennis and Luís said it had been
done already. Vladimir said you could still comment on things, as
it was the only thing that couldn't be turned off, but you
couldn't file new issues.
Walter asked if we could make the Bugzilla pages static instead
of continuing to generate them. Vladimir said we'd have to
involve Brad Roberts (he manages the server), but we could do it.
Walter said that would make the pages faster and also easier to
archive. The Bugzilla issues were a treasure trove of things. If
we made them static, then it became simple and cheap to host them
and they couldn't be modified.
Luís said LLVM did exactly that when they migrated to GitHub. He
thought you could even download the archive.
Walter suggested it would be possible to write a program using
wget to pull the pages down and store them statically. I said
that would make it easier to move them to our own server, too,
when we got to that point. Luís said that since it was just plain
text it should be very small.
Vladimir noted they were also mirrored to the forums. Walter said
he had [a static version of the newsgroup web
pages](https://www.digitalmars.com/d/archives/digitalmars/D/). He
ran the bot on it once a week to refresh it.
### Me
I'd told everyone in the [December monthly
meeting](https://forum.dlang.org/post/uvqbluehjkljthuhzsjm@forum.dlang.org) about the DConf dates of August 19-22. I repeated it here for the industry folks.
We'd wanted to go with September, but it was too expensive this
year, so it wasn't a possibility. We'd thought about December,
but that was no good for Symmetry. So we'd settled on August. I
was waiting for the contract to be signed. It was virtually
locked in, but I didn't want to announce it until it was
finalized.
Vladimir asked where it was happening. I told him it was in
London again, at CodeNode. As long as Symmetry was hosting it, it
would continue to be in London.
## Conclusion
Our January Monthly meeting took place the following Friday,
January 10th. Our next quarterly happened on Friday, April 4th,
2025.
If you are running or working for a business using D, large or
small, and would like to join our quarterly meetings periodically
or regularly to share your problems or experiences, please let me
know.
More information about the Digitalmars-d-announce
mailing list