D Language Foundation January 2026 Quarterly Meeting Summary
Mike Parker
aldacron at gmail.com
Thu Apr 30 12:31:25 UTC 2026
The D Language Foundation’s quarterly meeting for January 2026
took place on Friday the 9th. It lasted a little under 25 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)
* Mario Kröplin (Funkwerk)
* Mathias Lang (DLF/Symmetry)
* Mike Parker (DLF)
* Átila Neves (DLF/Symmetry)
* Razvan Nitu (DLF)
* Robert Schadek (DLF/Symmetry)
* Bastiaan Veelo (SARC)
* Nicholas Wilson (DLF)
## The Summary
### Mario
Mario said that Mathis, who wasn't present this time, liked named
arguments for function arguments. Funkwerk had started using them
and they worked fine. The problem was that VS Code still had an
old `dscanner` and an old `dfmt`, so whenever they used named
function arguments, VS Code marked them as errors and underlined
them in red.
Robert said that, by accident, he had been in the code-d
repository the day before and had seen that Jan appeared to be
preparing a new release. He suggested Mario keep an eye on it,
because the problem might simply go away soon. He added that Jan
was usually quite responsive.
### Bastiaan
Bastiaan said he didn’t have anything to report. He only wanted
to congratulate Dennis on an upcoming DMD release.
Dennis thanked him.
### Mathias
Mathias had nothing specific to report.
### Dennis
Dennis had nothing to report.
### Átila
Átila had nothing to report either. He said he wasn’t doing D at
the moment and was back on Python.
### Robert
Robert said he also had no bad news. He joked that he was sorry
about that.
### Walter
Walter had sent me an agenda item thinking this was a monthly
meeting rather than a quarterly. Since nobody had much to report,
I suggested we go ahead and use the opportunity to get feedback
on editions from the industry representatives.
Walter wanted to know what edition years meant. If we said
something was in the 2025 edition, did that mean it was added to
the language in 2025? If he was adding an edition-based feature
now, should he pick a future year? If a feature required an
edition, which edition should it use: 2024, 2025, 2026, or
something else?
I said that, as I understood it, an edition was a group of
preview switches that had been enabled. Whatever compiler release
turned those features on by default and no longer treated them as
previews was what determined the year of the edition. So if the
compiler with those features enabled by default was released in
2026, that edition was the 2026 edition.
Walter said that made the most sense.
I then said that the default pre-editions edition was intended to
be Edition Zero. Walter objected. He thought it should be the
edition before we started doing editions, rather than zero. I
said that was the meaning of edition zero: there was no edition.
Walter said that going from zero to 2025 was a discontinuity. I
argued that assigning a year to the pre-editions state implied
that it was itself an edition, when really it was the
pre-editions edition. Robert asked how Walter thought it should
be specified. Walter said 2025 would be the last edition of the
old way.
I pointed out that the DIP explicitly called for a zero edition.
Walter said that wasn't how it was implemented. In the
implementation, there was a minimum edition. So something like
2020 wouldn't be a valid edition. Zero would require extra
checks. To him, it seemed easier to say that 2025 was the edition
before editions. Then someone who wanted to mark code as using
the old pre-edition set of features could write that explicitly.
I said that I didn’t think people would mark the pre-editions
edition in the code. The absence of an edition number in the
module statement would be the pre-editions edition, and if
someone needed to specify it explicitly, they would do so on the
command line. Walter understood that a module statement without
an edition defaulted to the most current edition, then someone
who wants to use a module statement but stick with the old
semantics needs a way to specify that old edition in the source.
I agreed that was the case.
Bastiaan asked how this would work for old code, since old code
wouldn't have an edition statement. He understood that such code
would then use the latest edition, which made it sound as though
editions were breaking code after all. The code could be unbroken
by specifying an old edition, but the default behavior still
seemed surprising to him.
I explained that we had been through this several times in the
monthly meetings and other meetings about editions. The idea was
that dub would handle this behind the scenes. Old code using dub
would still compile because dub would set the default on the
command line to the pre-editions edition. The issue mostly came
up for people invoking the compiler directly.
Átila clarified that if a package had a `dub.json/sdl` with
nothing specifying an edition, dub would know that and set the
pre-editions edition.
I said that brought us back to the question: should the default
pre-editions edition be zero or 2025?
Walter thought it was currently coded to be 2023. Dennis noted
that it hadn't been released yet, so it could still be changed.
Walter said that since 2025 was now in the past, perhaps 2025
should be the pre-editions edition.
I said that was why I thought it should be zero. That
encapsulated all the years before the first edition. Walter said
the issue was that if he was writing or maintaining code, he
wanted to be able to say what edition he was using without
relying on the default. If he put 2025 in old code, then he could
rest assured that was what it was, without remembering to pass a
command-line switch.
I said that if the first real edition ended up being 2026, then
we could update the DIP to specify 2025 as the pre-editions
edition. Walter didn't think the DIP needed to be updated at that
point, but the behavior would need to be documented.
Mathias said he thought zero was much easier to remember than the
year in which the first edition was released. Robert agreed that
the memory argument was strong. Bastiaan said it was just a name,
so it didn’t really mean anything for the code. In that sense,
zero might be easiest. He jokingly suggested names like "Edition
Nil" and "Edition None".
Walter still liked 2025. He thought that if someone saw 2025 in
the source, they would understand that it meant the old, original
semantics. I said the reason I liked zero was exactly that it set
the pre-editions state apart. If you see zero, you know it is not
an editions version of D. If you see 2025, it looks like the
first edition.
Walter said that, in a sense, it was the first edition before
editions. He also thought that `module foo` followed by a zero
would look strange to someone unfamiliar with D. They might
wonder what that weird zero after the module declaration meant.
I said I couldn’t imagine why someone would intentionally put the
zero edition in the module statement. If they were compiling old
code, they wouldn't go back and modify every source file to add
edition zero. They would pass `-edition=0` on the command line,
which to me meant no editions.
Átila agreed that he didn’t see why someone would pick the old
edition in code either.
Walter said that if he was continuing to work on old code, he
would put the old edition directly in the module statement and
then upgrade it to a more modern edition when he got around to
it. That way, when he looked at a source file, he would know
which edition it used without having to check the build system or
remember command-line switches.
Dennis said many people used scripts where they just ran DMD on a
single D file. If such a file relied on old behavior and would
break with a newer edition, the easiest fix might be to add
something directly to the script file. If it was compiled with
something like `rdmd`, the user might not want to specify the
edition every time they invoked it.
I said Mathias’s point about remembering the year was still a
good one. If it was 2030 and someone wanted to compile with the
pre-editions behavior, they would have to remember which year
represented that behavior. Was it 2025? 2026? 2027? With zero,
they wouldn't have to look it up. Dennis agreed that was a point.
Robert suggested allowing both zero and 2026. Dennis suggested
that any integer under 2025 could mean the default pre-editions
edition. Robert joked that this would also solve his problem of
trying minus one as the first edition.
In summary, I asked if we agreed that 2025 or less would mean the
default edition. Walter said that wasn't his favorite, but he
could go with it.
Átila noted that D had had breaking changes in the past where it
might make sense to add editions retroactively. Walter said
editions only applied to the modern compiler. He asked what the
default should be for someone who wanted to always use the latest
edition. Dennis said the answer was no number, just what we do
now, `module name`.
Walter brought up two scenarios. One was old code that the user
wanted to keep compiling. The other was code where the user
wanted to download a new compiler and automatically use the
latest edition to keep the code up to date. The question was how
to trigger those two scenarios.
Bastiaan asked whether you could specify an edition in the
future. If an edition less than 2025 meant the zero edition,
could he say edition 3000? Walter said that if you did that, one
day your builds would break. More generally, if the compiler
didn't know how to compile edition 3000, it should give an error.
Bastiaan asked whether the decision to select the latest edition
when there was no edition marking was in the DIP so that he could
read up on it. Átila said it hadn't originally been there, but he
had changed the DIP to include it after we discussed the issue
previously.
Bastiaan said the idea seemed unnatural to him at the moment, but
he would read up on it first. Átila said most of the problem came
from experience with C#, where people could get confused about
new features or the version of the language if the language
didn't default to the latest edition. The compromise was that
most code was compiled with dub anyway, so dub could preserve
compatibility for existing packages.
I mentioned that we had a monthly meeting coming up the next
week, followed by an editions-specific meeting the week after
that to discuss what the first edition should look like. I
invited anyone from the quarterly meeting who wanted to join that
discussion to let me know.
### Luís
Luís had joined late and said he hadn’t had much time to sort
through things before the meeting. He mostly wanted to hear what
other people had to say.
He did have one update. Weka had upgraded to LDC 1.38, and the
next step would be upgrading to the latest. He said he would try
his best to keep Weka staying very much up to date.
At the moment, some Weka projects were running with the latest
compiler while others were still on older versions, such as 1.30.
That made upgrades complicated. What they wanted was an easier
compatibility path. Luís hadn't known about editions before the
meeting, but thought it might solve some of their problems.
### Conclusion
Our next meeting was a monthly meeting on January 9th. We also
had an editions-specific meeting scheduled for January 23rd.
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