D Language Foundation April 2026 Quarterly Meeting Summary

Mike Parker aldacron at gmail.com
Mon Jun 22 09:00:51 UTC 2026


The D Language Foundation’s quarterly meeting for April 2026 took 
place on Friday the 3rd. It lasted approximately fifty 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)
* Martin Kinkelin (LDC/Symmetry)
* Dennis Korpel (DLF/SARC)
* Mathias Lang (DLF/Symmetry)
* Átila Neves (DLF/Symmetry)
* Razvan Nitu (DLF)
* Mike Parker (DLF)
* Guillaume Piolat (Auburn Sounds)
* Bastiaan Veelo (SARC)
* Nicholas Wilson (DLF)

## The Summary

### Guillaume

Guillaume said he had been making a SIMD library for a few years. 
It was used primarily by people developing consumer software.

There was an issue with either LDC or DUB related to the function 
ABI. It was an esoteric issue where one function built in one 
translation unit with AVX enabled could be called from another 
function that had not been compiled with AVX support, then the 
register would be missing data. Two different users had reported 
the problem to him.

He believed the issue was at the intersection of LDC and DUB. It 
made using the latest AVX and AVX2 instruction sets in D more 
troublesome than it should have been.

Nicholas asked Guillaume for a reproduction of the build script 
so that he could determine whether the problem was in DUB or LDC. 
Guillaume had already [linked to a GitHub issue containing a 
reproduction](https://github.com/dlang/dub/issues/3080). Nicholas 
said he would take a look at it soon.

Other than that issue, Guillaume was very happy with D. He was 
using LDC 1.41 and had encountered no problems on any of the 
three desktop operating systems. He hadn't yet moved to LDC 1.42 
because upgrading required a bit of validation.

He had also been doing some ARM64 benchmarking. In some cases, 
integer operations performed better than floating-point 
operations, which made fixed-point arithmetic more interesting.

(__UPDATE__: [A fix was submitted to DUB the next 
day](https://github.com/dlang/dub/pull/3111). Nicholas merged it 
a couple of days later.)

### Dennis

Dennis had no new work problems to report.

I asked him how SARC’s D port was performing. He said he was 
still working on making the switch. The code he was writing was 
only for the D version, but the Pascal version still had to be 
maintained. It was annoying because the testing was really slow.

### Mathias

Mathias said he hadn't been doing much programming lately.

### Átila

Átila said he didn't have much to report. He at least got to so 
some coding, but it was mostly in Python these days. He was 
working in D once a week.

He was going to talk about some of the stuff he'd been doing [at 
the D Symposium](https://dlangsymposium.com/), and that was 
agentic coding. It had helped a lot with DRuntime. He still had 
some PRs that were red in CI that he needed to get back to. He 
was also trying to review building DRuntime with 
`-preview=nosharedaccess`.

### Razvan

Razvan had nothing to report.

### Walter

Walter had moved from cross-compiling his AArch64 implementation 
to running natively on a Mac. He'd gotten the runtime built and 
was now attempting to link a single program. The linker was 
complaining because he was giving it the wrong arguments, so he 
had to figure out the correct command line for the linker.

He was making progress inch by inch. There were a thousand small 
things to deal with, and he had to juggle multiple compilers to 
get things compiling on the Mac. There was the last working DMD 
release on the Mac, the current one he was building, and the 
AArch64 build of the compiler. He managed to regularly confuse 
himself about which compiler he was running and which platform he 
was targeting. He was slowly getting there.

He had also completed his presentation for the symposium. His 
computer had crashed and caused him to lose half of it, but he 
had been able to rebuild it from from his notes. He'd decided to 
be more bombastic about D. A long time ago, some of the C++ 
people had gotten mad at him for being critical of C++, so he had 
toned that way down. Now that seemed like the wrong thing to have 
done. He was toning things up now. He didn't care if people 
complained that he was bashing C++.

The presentation was called 'Elegant D'. It had a lot of examples 
in C, C++, and D to demonstrate how things worked in D and how 
much easier it was to write code in D. He had considered 
including Zig and Rust, but since he had never written a program 
in either language, he thought he would likely embarrass himself 
by making inaccurate statements. He'd decided to stick to 
criticizing C and C++.

I asked if he'd thought about his DConf presentation. He was 
considering either a revised version of 'Elegant D', a talk about 
the AArch64 code generator, or more of an overview about why D 
was a better language to program in.

Átila said that if it made Walter feel better, he had bashed C++ 
while speaking at CppCon once. At one point, one of the attendees 
had accused him of being on a covert mission to convert everyone 
to D. Átila had replied that was being very overt.

Walter said one of the things in his presentation was using `= 
void` to avoid default initialization. Someone had sent him a 
link to a C++ proposal to do the same thing. They had come up 
with every ugly, complicated way under the sun to do it. And they 
did it by inventing weird new keywords and stuff. His response 
was to ask why they didn't just copy D. Somebody had said you 
shouldn't have `= void` because `void` didn't mean "do not 
default initialize". Walter had argued that of course it did. The 
word "void" meant "empty". It meant nothing was there. It was the 
perfect keyword for it and it was already there.

He had also been looking at how C++ did CTFE and was confused. He 
had read the descriptions of the keywords `constexpr` and 
`consteval` and wondered how they managed to do it wrong every 
time. Why did they have two keywords to do it? C++ was a powerful 
language, but it was utterly lacking in taste. They took ideas 
from D and turned them into ugly things.

Átila said the C++ contracts proposal explicitly did not support 
custom error messages in contract assertions, while leaving open 
the possibility of supporting them later. In the meantime, 
`contract_assert(predicate && "error message") would work and the 
compiler would print the error message out when the assertion 
failed. Of course, string decayed to a pointer, so you could do 
that because the short circuit worked.

### Bastiaan

Bastiaan didn't have much to report, but he thought he would need 
to try profiling SARC's code again. Whenever he had attempted to 
use profiling in the past, the executable had crashed, possibly 
because of stack space exhaustion. Since they had moved to 64-bit 
in the meantime, he hoped that might work better.

Dennis asked if he was talking about the `-profile` switch, and 
Bastiaan said yes. For 64-bit builds, they were using LDC.

Walter asked why they would use anything other than 64-bit. 
Bastiaan said they had been 32-bit until now, and he thought it 
was because of old hardware on ships. Now the idea was to fully 
optimize the 64-bit build and not optimize the 32-bit build. In 
practice, he thought they could probably do away with 32-bit, but 
he wasn't completely sure.

One reason they still used DMD in development was its faster 
compilation speed. They hadn't been using 64-bit DMD because 
their use of `alloca` was incompatible with exception handling on 
64-bit Windows. He noted that we'd discussed this previously, and 
Walter had said the exception handling mechanism on 64-bit 
Windows was undocumented and that he'd given up trying to 
understand it.

Walter said DMD on 64-bit Windows used its own exception handling 
mechanism, but he had no idea how it would be affected by 
`alloca`. Dennis posted a link to [the exact line of code in the 
backend](https://github.com/dlang/dmd/blob/2298fced3c39bfbea4e02c0bfc99812975de2362/compiler/src/dmd/backend/eh.d#L50) that generated the error message "cannot mix alloca and exception handling". Walter said he would look at it.

Bastiaan supposed it would be a lot of trouble to get that to 
work, but they were good with using LDC. That said, DMD’s quick 
compilation was nice to have during development, and that was 
when they used 32 bits.

He said they used `alloca` to allocate variable-length arrays on 
the stack and avoid the global lock in the garbage collector. He 
supposed poor multithreaded performance might not matter much 
during development, but then they'd have to use conditional 
compilation or some other things. He wondered whether the new 
garbage collector might eventually make all of this obsolete.

### Martin

Martin said he didn't have much to report. It was just more of 
the same.

They'd recently added support for LLVM 22 to LDC. The next step 
was to merge the stable DMD front end to bump to DMD 2.113. He 
hoped it would go smoothly since the last release wasn't too long 
ago.

At Symmetry, they were using LDC 1.42 with the latest changes and 
the new garbage collector enabled by default. They had 
encountered no significant problems.

They had also seen an average run-time improvement of 
approximately five percent simply by moving from LDC 1.41 to 
1.42, without changing their code. They weren't completely 
certain where the improvement came from.

At first, he thought it could be due to a small off-by-one error 
that had been fixed in the new garbage collector. That error 
could cause extra allocations. But then he recalled that they had 
seen the performance improvement before the fix. It really seemed 
to be something in the compiler.

He was thinking it might have been something to do with the 
associative arrays being templates now. Not having to go through 
`TypeInfo` and all the indirections could give the optimizer more 
to work with. He was hoping other people would see some 
improvements and chime in to confirm their numbers. But he 
thought that was really nice.

Another good thing was the new built-in 
`__traits(needsDestruction)`. It allowed LDC and the runtime to 
eliminate extremely ugly workarounds that had been necessary 
because of semantic analysis ordering and forward reference 
problems. The compiler could now perform the additional aggregate 
semantic analysis for structs and classes to check if there was a 
compiler-generated destructor and/or a user-defined one.

There was a comment in the runtime saying to replace all of the 
old `hasElaborateDestructor` logic with the new trait. He'd done 
a quick grep and it was terrible. Most of those checks just did 
it for structs and ignored static arrays of structs. We 
desperately needed a `destruct` function, a little helper 
somewhere, which would take care of stuff like this. Give it a 
reference to some object and it would handle destruction. For a 
struct, it would call the destructor. For a static array, it 
would go through the array and destroy all of them, handling any 
exceptions when destroying one of them. It was just a matter of 
handling old things that had never been fixed properly. There was 
always work to do, but we all knew that.

Other than that, he had seen contributions to LDC from people 
interested in using ImportC on exotic platforms. One contributor 
had fixed ImportC built-ins after testing three C libraries on 
Android. By adding a small number of missing built-ins, he'd been 
able to interoperate with those three libraries on Android.

Another contributor was using either ImportC or WebAssembly, he 
wasn't certain which. He just thought it was interesting that 
people were using this stuff on more complicated platforms where 
you could only cross-compile. There was no native compilation for 
WebAssembly, obviously, on Android. There could be, but there 
were some weird issues that prevented providing LDC binaries. 
They'd put some effort into investigating it recently, but had to 
give up.

He was pleased that the DMD release process now was in a proper 
state. He didn't know what had been done, but it was nice that 
the master and stable branches were being handled better.

### Me

I gave on update on some discussions I'd had over the past couple 
of months about funding and about an informal proposal I'd 
received to create an industry workgroup. My sense was that this 
would go beyond what we were doing in the quarterly meetings and 
be more focused on actual development, and not only the problems 
that the industry people were having. It was just an idea at this 
stage.

I reminded everyone that I was looking forward to receiving their 
DConf talk submissions and would be watching my inbox. Also, June 
would arrive quickly, and that was when I needed to announce the 
next Symmetry Autumn of Code. We needed to begin thinking about 
potential projects.

### Addendum

As we were getting ready to wrap, Walter talked about how he'd 
been improving some of his old D-Man doodles using AI to make 
them look more professional. He'd begun replacing the ones he'd 
uploaded to the website.

During this discussion, I asked if he'd replaced the image used 
for 404s. It's the "assembly required" image used on [the Inline 
Assembler page](https://dlang.org/spec/iasm.html) of the 
documentation. He said he had. That prompted Martin to ask about 
Walter's plans for inline assembly on AArch64.

Martin wanted to know whether Walter intended to create something 
similar to DMD’s x86 inline-assembly syntax or use the 
GCC-compatible syntax supported by GDC and LDC. He said the GCC 
syntax was architecture-independent at the language level. It 
used strings for the instructions and required the author to 
declare the inputs, outputs, and clobbered registers explicitly. 
That made it easier to adapt code through string mixins when 
register names or calling conventions were different across 
platforms. It could also allow functions containing inline 
assembly to be inlined.

DMD’s current x86 inline assembler understood the instructions 
itself, including which registers they read or modified. One 
consequence was that the compiler had to disable some 
optimizations for functions containing inline assembly. He said 
that if Walter created a separate AArch64 assembly language in 
the same style, it would probably remain DMD-specific. Martin did 
not intend to implement another architecture-specific assembly 
parser in LDC.

Walter said his plan was to follow the same approach as DMD’s 
Intel inline assembler. The Intel implementation matched the 
syntax used in Intel’s documentation and knew from its tables 
which registers each instruction read and modified. His AArch64 
implementation would likewise use the syntax from the AArch64 
specification and track register use automatically.

He had nothing but bad things to say about the GCC approach. The 
programmer had to specify the inputs, outputs, and affected 
registers manually. He understood why it was portable across 
architectures, but he didn't like using it. He preferred an 
assembler where an instruction from the processor manual could be 
typed exactly as documented. The AArch64 disassembler already 
worked that way, and the inline assembler would match the 
specification as well.

He said the AArch64 inline assembler was vastly simpler than 
DMD’s x86 implementation. He hadn't written the original x86 
version, which was clever but nightmarish code that he wouldn't 
inflict on anyone. Its main advantage was that it worked.

Martin understood the reasoning but noted that users who wanted 
their inline assembly to work across DMD, LDC, and GDC would face 
limitations. Much of the inline assembly in DRuntime and Phobos 
existed to compensate for DMD code-generation performance, so 
perhaps AArch64 would need less of it. The remaining low-level 
runtime functions would still require a small amount, 
particularly for bare-metal use.

Walter noted that inline assembly use had declined dramatically 
over the past decade. There were only about five or six instances 
in the runtime. Since most users would need only a few 
instructions, he didn't consider portability of the syntax a high 
priority.

## Conclusion

We delayed our April monthly meeting by a week to April 17th 
since several folks were heading to Mike Shah's D Symposium. Our 
next quarterly meeting was set for the first Friday in July.

If you're 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