D Language Foundation July 2026 Quarterly Meeting Summary
Mike Parker
aldacron at gmail.com
Thu Aug 13 09:43:29 UTC 2026
The D Language Foundation’s quarterly meeting for July 2026 took
place on Friday the 3rd. It lasted a little under 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)
* Luís Ferreira (Weka)
* Dennis Korpel (DLF/SARC)
* Mathias Lang (DLF/Symmetry)
* Mike Parker (DLF)
* Bastiaan Veelo (SARC)
* Nicholas Wilson (DLF)
## The Summary
### Bastiaan
Bastiaan said SARC had no pressing issues. They were inching
closer to D-Day. They weren't quite there yet, but things were
looking promising.
Dennis asked whether they had solved the garbage collector thread
contention. Bastiaan said they had solved it in one central
module that was called billions of times in a session. He had
seen another test that was taking a little longer, though, and
still needed to dive into it.
He said a university had asked if they had a project that a group
of bachelor’s students could work on. SARC had some command-line
programs that they wanted to run as Windows services, so they
came up with an assignment to build something that could turn any
command-line program into a service, with a user interface living
in the dock. The service needed to start without anyone logging
in and launching it manually. One of the project requirements was
that it be written in D.
Four students took it on. Bastiaan said they had been very
positive about D, two of them especially so, and he thought those
two would continue working with the language. The project itself
was a success and had produced a complete, finished product. He
had encouraged the students to publish it on code.dlang.org.
He said the whole thing had been a very nice experience. Nicholas
thought it sounded like a good candidate for the D blog if the
students were interested. I agreed and asked Bastiaan to give
them my email address. He said he would.
__UPDATE__: The students emailed me and we've discussed the blog
post.
### Me
I passed along an update from Mario about Funkwerk. They had two
problems to solve, but the good news was that neither of them was
caused by D. Everything was working after Mathis pushed some
immutable utilities forward in their codebase.
### Luís
__serve-d on macOS__
Luís said he had asked people at Weka what questions they thought
would be useful to raise at the meeting. One issue was their
development experience on macOS. More and more people at the
company were using Macs, [and
serve-d](https://code.dlang.org/packages/serve-d) wasn't working
the way they needed it to. Luís had used it without any problems
on Linux, both on his previous work laptop and on his personal
machine, but on macOS it crashed.
He asked whether the foundation would be willing to support an
official, stable LSP server that worked across all platforms. He
also thought it would be valuable to have one based on the
compiler so that it could provide full semantic information,
which serve-d did not.
I said we were working toward putting an LSP interface in the
compiler. There had been talk of running the compiler as a daemon
with the LSP server built in, but another possibility was
exposing DMD as a library for another process to use. I didn't
know what final form it would take.
Walter said progress was being made, but it was frustratingly
slow. The front end had been designed as a standalone program,
not as a library, and converting it was not easy. I said this was
the kind of project it would be useful to hire a contractor to
push through if we had the funding.
As a short-term solution for Weka, Luís had created an LDC plugin
that traversed the DMD front end and generated something similar
to Ctags. It was good enough for their purposes, but the
resulting file was huge. He thought serve-d’s macOS crashes might
likewise come from high memory consumption. Weka had a monorepo
containing all of its code, and serve-d couldn't load the whole
project. They had to limit it to specific directories.
Weka had sponsored some serve-d work to get issues fixed, but
Luís wasn't sure whether they had a list of the problems that
remained. One issue was that they had to build serve-d themselves
for every Mac user. That was manageable for people already at
Weka, but it made setup a pain for new people. He thought the
deeper memory problem was in DCD. Rather than keeping every
symbol in memory, maybe DCD could index them in a memory-mapped
database on disk and look them up only when needed.
I found [an existing serve-d issue from July
2025](https://github.com/Pure-D/serve-d/issues/393) about a
segmentation fault on macOS. Luís thought it might be related to
an Apple API change affecting thread-local storage. He had also
tried the official DMD installer on macOS and seen it segfault,
apparently because DRuntime made an assumption about the TLS
regions that was no longer valid. The runtime fix had not yet
been released.
He added that debugging that sort of thing was harder because D
support in LLDB on macOS wasn't working properly. He accepted
some responsibility for that because he had worked on the
project. The good news was that he was pushing again to get his
changes upstreamed.
__Very high compile-time memory usage__
His other major topic was Weka’s compile-time memory consumption.
Their builds had become enormous. They had recently increased
their build servers from one terabyte of memory to one and a half
terabytes, and the builds were still memory-bound. One source of
the problem was Weka’s system for versioning reference types. As
the number of versions grew, the compiler had to perform more
comparisons during CTFE to generate the structs, and all of that
data had to remain in memory.
He said that the proper solution on Weka’s side was to split the
compilation into much smaller pieces. Still, he wanted to know
whether more of the compiler work could be cached, particularly
CTFE, so that repeated invocations could share results and
incremental builds could be faster. LDC could cache back end
work, but not the front end.
Walter pointed out that caching normally consumed more memory,
which was already their limiting resource. Luís agreed that it
could, but said there might still be a net gain. Their larger
build servers had not reduced build time. Meanwhile, DMD's normal
strategy was to allocate until it exited. Using its low-memory
mode reduced memory use, but made the build much slower because
the collector ran more frequently over a very large number of
objects. If CTFE results could be cached, he thought the overall
memory cost might fall rather than rise.
Walter asked whether Weka could break the program into smaller
programs or shared libraries. Luís said that was exactly what he
was advocating internally. Their current approach was the wrong
solution for their problem, and they needed to split it up.
Walter said he could trim a few bytes here and there from
compiler data structures, but that would only fiddle around the
edges and wouldn't solve a problem of this scale.
Luís had already experimented with CTFE optimization in a branch
of Weka’s LDC fork. Their generated structs contained many
zero-initialized arrays. CTFE currently materialized every
element as an expression node even when code only needed
something like the array's length. He changed it so the array
could be represented as a repeated-value range and materialized
only when something actually touched its elements. On Weka's
workload, that alone saved roughly fifty gigabytes of memory.
The branch was only a proof of concept. It worked on Weka's
codebase, but he hadn't run thorough tests, and there were likely
edge cases where he had failed to materialize an AST node that
needed it. He wasn't claiming it was ready to ship. Still, it had
led him to consider reviving Stefan Koch's old CTFE engine, which
used a bytecode VM rather than interpreting everything through
AST nodes.
Walter thought a JIT would increase memory consumption, since the
AST still had to exist and the generated code would be additional
data. Nicholas explained that the major cost was not just the
fixed AST for the function. The existing interpreter represented
the intermediate values created while executing the function as
still more AST nodes. Translating the function into bytecode and
executing that could avoid most of those temporary expression
objects. Walter understood the distinction and agreed Nicholas
was right.
Walter had once spent a fair amount of time trying to free
temporary nodes generated during CTFE, but the problem had been
much more difficult than he expected. Generated nodes that had to
survive as part of the final result were mixed together with the
intermediate nodes. He hadn't found a safe way to tease them
apart.
I asked whether improving the CTFE engine could be a Symmetry
Autumn of Code project. Luís thought something related might
already be on the project list, but the biggest problem was
finding time to mentor it. Dennis thought the current CTFE engine
would be a very demanding project for a student and require heavy
mentor involvement. If Walter had struggled with reclaiming its
memory, that showed how complex the code was.
Nicholas proposed duplicating the result nodes that needed to
live and allocating the copies separately. That could leave the
long-lived CTFE objects on one set of pages and make it possible
to discard the pages containing temporary garbage. He said it was
probably a stupid idea, but Walter said it wasn't a bad germ of
one. Another possibility was to mark every node created during
CTFE, walk the result at the end to unmark the nodes that had
survived into it, and free whatever remained.
Nicholas suggested that if the task was too difficult for a SAOC
student, our intern might be able to look into it. He already had
some compiler context. He asked Luís for links to both Stefan's
old engine and Weka's branch so he could pass them along and see
what came of the discussion.
Luís had also found another source of extreme memory use while
building his test case. Weka used only the conservative garbage
collector, but the compiler still generated precise-GC bitmaps.
For large arrays, the precise-GC information was lowered to a
runtime template whose elements became part of the mangled name.
Those mangled symbols could grow to megabytes or even gigabytes.
LDC hashed template parameters in its backend, but by then the
enormous name had already eaten up memory in the front end. The
front end only had back references. Luís thought official
mangling should use hashing rather than relying on repeated back
references, which he worried could be abused to produce explosive
expansion. He had added experimental work on this to his branch
as well.
He hoped to upstream some of these changes and work on a more
complete CTFE solution if he could find the time. This was
hurting Weka more and more, so if the company chose to prioritize
it, he wanted to make an attempt.
He asked if there had been any progress on the new garbage
collector Symmetry had been working on. Mathias said he thought
it was finished and working in Symmetry's projects. Luís said
Weka was well behind the current compiler versions, which was why
he hadn't realized the collector was already in use. He had
recently moved Weka from LLVM 14 to LLVM 18 and next needed to
get them to LLVM 22. Mathias confirmed that Symmetry used the new
collector every day and that it was working well. Luís said that
was great news.
### Mathias
Mathias said he had no problems with D to report.
### Dennis
Dennis had nothing to report with his industry hat on. On the DLF
side, he had been experimenting with a couple of things we
discussed earlier in the meeting.
First, he had been toying with an LSP implementation for DMD. He
had shown a demo at DConf and was considering making a serious
push to release it at some point.
Dennis had also been experimenting with a WebAssembly backend for
DMD, potentially for use in CTFE as well. He recalled that
Stefan's CTFE project had been a bytecode interpreter rather than
a JIT. Since Stefan had moved on to his own metaprogramming
language, Dennis wasn't sure there was a future for it.
With Claude's help, he had produced a fairly advanced WebAssembly
backend prototype that passed most of the DMD test suite. Walter
warned him that the last ten percent was the killer. Dennis knew
that. He could pass most tests, but there were still obstacles
between that and running real programs.
He wanted to know how receptive everyone would be to adding a
WebAssembly backend to DMD. He wondered whether people would
consider it redundant because LDC already supported WebAssembly.
He thought it had value in its own right, particularly for macOS,
and Mathias said the CTFE angle sounded promising. If we wanted
to use it for CTFE, then it had to be part of DMD.
Nicholas noted that there was also ongoing work around the
WebAssembly System Interface. WASI effectively provided the
operating-system layer, and newer versions were adding more
runtime support, including areas such as exception handling,
garbage collection, and C bindings.
Dennis left it there. He said he might have something for the
blog and would email me about it.
### Nicholas
Nicholas said the GSoC students were doing well. The interim
report was coming up. The reporting period didn't open until the
following Monday, which annoyingly meant he couldn't complete it
yet, but his student was making good progress.
Walter thanked Nicholas for all his help with Walter's pull
requests. Nicholas asked which ones. Walter said Nicholas had
simply been doing a great job helping him get them finished.
Nicholas said it was his pleasure.
### Walter
Walter said he was still plugging away at that blasted AArch64
code generator, moving it forward bit by bit.
Fixup generation was currently a giant mystery. He spent a lot of
time writing small pieces of code, running them through GCC,
examining the fixups it generated, and then integrating support
into the code generator one case at a time.
Dennis asked whether he had been using an AI agent to help debug
it. Walter said he didn't use AI to generate the code. What he
found productive was generating sample object files himself and
asking an AI whether the fixups were correct. It would then point
out his mistakes.
Dennis said an agent could go further than that. It could compile
test programs, inspect the binaries, and locate bugs
autonomously, saving Walter from copying information back and
forth. This had been very useful during Dennis's WebAssembly
work. The agent could sometimes fix an entire bug by itself, then
he only had to verify that it had identified the real root cause.
He worked on Linux using QEMU for ARM, which was also how he had
set up the ARM CI.
Nicholas asked whether Walter used Compiler Explorer to change
small examples and immediately inspect the output. Walter said
he'd used it for much of the initial work. When he needed to find
the AArch64 instruction for an operation like multiplying
floating-point numbers, he could write a two-line C function,
compile it in Compiler Explorer, and see the right instruction.
That had been extremely useful given the architecture's thousands
of instructions and how unclear many of them were to him.
Compiler Explorer was less helpful with debug information and
fixups, but AI had been useful there. He'd been using ChatGPT.
Dennis [linked him to a pull
request](https://github.com/dlang/dmd/pull/23157/changes) where
Claude had independently found a bad relocation whose addend
accidentally contained an opcode instead of the offset. It was an
example of what an agent could do. Walter said he would look at
it after the meeting.
## Conclusion
Our next meeting was the July monthly meeting on the 10th. Our
next quarterly meeting is set for the first Friday in October.
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