D Language Foundation November 2025 Monthly Meeting Summary

Mike Parker aldacron at gmail.com
Mon Apr 27 14:55:06 UTC 2026


The D Language Foundation's November 2025 monthly meeting took 
place on Friday the 14th and lasted about an hour and thirty-five 
minutes. I was unable to attend, so Razvan ran the meeting and 
Dennis recorded it.

## The Attendees

The following people attended:

* Walter Bright
* Iain Buclaw
* Rikki Cattermole
* Dennis Korpel
* Mathias Lang
* Átila Neves
* Razvan Nitu
* Steven Schveighoffer
* Mike Shah
* Nicholas Wilson

## The Summary

### A D symposium at Yale

Mike Shah opened saying he wouldn't take too much of everyone's 
time. His pitch was to organize a D programming language 
symposium hosted at Yale University.

He said Steve and Ali had recently come to Yale to give a guest 
talk, which had gone very well. About 50 students showed up, and 
there were a lot of good conversations afterward. That convinced 
him there was real interest.

The basic idea was to hold a two-day event, possibly in April or 
May, while students were still on campus. One day would be for 
talks, and the second day would be more of a hackathon or 
workshop where speakers, students, and community members could 
work together on something productive and fun. Yale could provide 
the space and automatic recording at no cost, and Mike could 
handle the catering. The main logistical hurdle would be finding 
sponsorship to help fly speakers out.

Átila thought it was great. He wasn't sure what he could do, but 
if sponsorship could be found, he didn't see why we wouldn't 
support it.

Mike said the goal was not to compete with DConf. This would be 
spaced a few months before, and at this stage he was mainly 
trying to gather interest and see whether people would consider 
speaking if reimbursement were available.

Robert joked that this was preaching to the choir. He thought it 
was great that Mike was specifically reaching out to students 
because the language needed the next generation.

Mike said that if the group was willing to give him the blessing 
to go ahead, he would start working on it. There were people in 
Boston who might be able to help recruit, and he could reach out 
to Symmetry and other companies to see if anyone was interested 
in sponsoring. More than anything, he thought it would be good to 
get some visibility for D.

Walter asked where Yale was, and Mike explained that it was in 
New Haven, Connecticut, about a two-hour train ride from either 
New York or Boston. He was thinking about late April 2026, since 
that would put the event late enough in the semester for his 
students to have had two semesters of D programming. Walter 
thought it was an awesome idea and was all for it.

Rikki suggested that since it would be more local to the United 
States, people could make a road trip of it. That led to some 
joking about the scale of the U.S.

On the topic of local gatherings, Walter brought up the D Coffee 
Haus he had been running for the last year and a half. It was a 
monthly meeting that averaged six to ten people, with some 
regulars and a rotating set of others. He said it had been really 
fun. Sometimes they didn't even talk about D. They talked about 
things like nuclear fusion, airplanes, and investments. It 
reminded him of the conversations he had in college, when 
students would sit around talking about computers, technology, 
and anything else with smart, well-educated people.

He recommended that others try setting up local D meetups if they 
had D people nearby. He said they had even invited C++ people, 
some of whom liked it so much that they started their own local 
version.

Mike said he and Steve were close enough geographically that they 
should probably stop making excuses and make something happen 
eventually. Steve said Mike lived in Rhode Island and he lived in 
Massachusetts, only about 20 or 30 minutes away. Walter asked 
whether there were other D people in the area. Steve said Andrei 
lived in Boston.

Razvan was concerned that the previous year's DConf had been hard 
to fill with talks, and that having the Yale event only a few 
months before DConf might split the limited pool of people 
willing to give talks. His view was that DConf was for the 
hardcore D community, often the same faces with some new ones, 
while the Yale event sounded more like a popularizing event. He 
suggested that the Yale talks should focus more on showing how 
cool D is, rather than going deep into D internals or other 
topics that might put off a wider audience.

Mike agreed that this was something to think about. The event 
could have a mix of material, especially since it would be at a 
university. There could be more back-to-basics talks. He had 
enough teaching material prepared that he could hand slides to 
someone and tell them, for example, to talk as much as they 
wanted about templates. Part of his secret plan was also to 
invite neighboring universities and get as many people as 
possible to try out a new programming language. He mentioned 
schools in the northeast such as MIT, Harvard, and Columbia, and 
thought students would at least come to hear about a language 
they hadn't used before.

Walter asked whether Mike's class and students were at Yale. Mike 
said yes, he was teaching a D course there now and would be 
teaching another one in the spring. That meant there would be a 
built-in student audience. He also mentioned that one of his 
students was working with Nicholas and Bruce, so he could 
encourage them to present as well. It wasn't the goal to make 
people produce two new talks in one year. He was fine with people 
recycling DConf talks or giving shorter versions.

Walter said he had recycled talks himself, including at monthly 
C++ meetings, and saw no problem with doing that. He would 
tentatively like to attend and meet Mike's students.

Rikki said the same topic could be presented very differently 
depending on the audience. For a Yale-style talk, someone might 
present a null check or bounds check and emphasize that it could 
now be checked at compile time. A DConf version would be much 
more likely to explain how it was hooked into the compiler, how 
semantic analysis worked, and the theory behind it. Those were 
two wildly different talks for different audiences, and each 
audience could love the version aimed at them.

Steve asked whether Mike's students paid attention to DConf 
talks. Mike said he didn't think they had watched many. In the 
first semester, they were mostly getting everything from him in 
lectures. He had linked to a few keynotes and older DConf talks 
he thought were interesting, but the students wouldn't have seen 
too many. Steve thought recycling old talks would be fine, since 
there had been DConf talks going back to 2013.

Mike said he had another meeting, but he would be happy to join 
the next monthly meeting and report on progress. Razvan made one 
more suggestion before Mike left: if the audience was primarily 
students, the event could be framed more as a workshop or 
symposium, with talks on topics not covered in Mike's course, 
followed by hands-on workshops the next day. Mike liked that idea 
and said he would love it if speakers were willing to grab a 
handful of students and build something with them. He said they 
might market it as a D workshop, D symposium, or something like 
“come learn about the D language.”

(__UPDATE__: Mike [announced the D Language Symposium 
2026](https://forum.dlang.org/post/mwlmmkokvjgqrhvtrupc@forum.dlang.org) in the forums in January. [It was a successful event](https://dlangsymposium.com/). He has posted [the talk videos on his YouTube channel](https://youtube.com/playlist?list=PLvv0ScY6vfd-7WWQl86RY6hL6mSO7YGCe).)

### Null check status

Rikki said the first item on his list was the status of the null 
check.

The feature had been approved months ago and had originally gone 
into OpenD. It now had [a DMD PR 
upstream](https://github.com/dlang/dmd/pull/22040). The good news 
was that most things were working, especially thanks to 
@limepoutine, who had managed to get function pointers and 
delegate/function pointers working. The PR was waiting on a 
review from Walter. Once Walter reviewed it, Rikki could turn the 
feature back on, take it out of draft, and merge it.

There was some bad news. Context pointers for delegates couldn't 
be checked because lazy parameters could have a null context 
pointer. He thought the solution there could be to disable copies 
of lazy parameters, but that would have to be done in an edition.

Another issue was intrinsics. Rikki said they had to be disabled 
entirely for null checks because their backend handling was too 
fragile. He didn't want to try to fix that. His proposal was that 
once Walter got to the point of needing intrinsics for ARM, 
Walter should try to fix the architecture rather than copying a 
bad x86 architecture over to ARM.

Walter didn't understand the problem at first and asked if Rikki 
meant things like `memcpy` intrinsics. Rikki clarified that he 
meant XMM/SIMD intrinsics. Walter said he hadn't attempted to 
worry about null checks with SIMD because there were no pointers 
in SIMD instructions. Rikki said the CI disagreed.

Walter still didn't understand, saying there were no pointer 
instructions in x86 SIMD instructions. Rikki said some of the 
intrinsics took pointers as arguments. Steve asked whether Rikki 
had a link to the failed CI. Rikki did not.

Rikki said what he had done was disable null checks around 
intrinsics to get around the error. Walter continued to say he 
didn't understand how null checking a pointer to a SIMD location 
would be any different from anything else. Rikki said Walter was 
thinking about values like `float4`, but there were more cases 
than that, including pointers to data and arrays. All he knew was 
that trying to do the null check caused failures, and he wasn't 
going to debug it further.

Átila said this would be very hard to resolve by talking about it 
without an example written down. Rikki said he would [link the 
code where he disabled the 
checks](https://github.com/dlang/dmd/pull/22040/changes#diff-54719c55eec4a6cfe3b7b7f4b5289d0b5a0b9d41e8589a023bba4d68921f8be0R5525) and then pass it to Walter, who could remove that code and investigate later. Steve clarified that disabling the code was just to get around the CI error. If the code were put back, the CI should reproduce the error and show what was going wrong. Rikki agreed, but wanted to get the feature reviewed and merged first, then worry about the backend issue later.

Walter still didn't understand the problem. Átila suggested this 
was probably better handled asynchronously. Rikki said the thing 
to do was to disable the workaround once the PR was merged and 
see what actually failed in the backend. Razvan suggested that 
Rikki provide a written example and perhaps start an email thread 
with Walter, since they weren't making progress in the meeting. 
Rikki agreed to provide the links and instructions to comment out 
the relevant block of code.

(__UPDATE__: The PR has since been merged.)

### macOS support

Rikki next moved to the status of macOS support. He had bumped 
macOS support from 13 to 14 with some help from Iain, and that 
had worked out. [Moving from 14 to 
15](https://github.com/dlang/dmd/issues/21987), however, had not 
worked. He was using the macOS 15 Intel image and had concluded 
that DMD did not support macOS 15. He said it was basically DOA 
at the moment. He had tried with an LDC bootstrap, which got a 
bit further, but the CI still failed. Even with all the fixes on 
master, it didn't work.

Walter asked whether the problem was DMD generating x86-64 code 
that didn't work. Rikki said yes. Walter asked why. Rikki said he 
didn't have a MacBook to test on, so he couldn't debug it.

Steve said it was hard to find an Intel Mac that supported macOS 
15. It had to be a very late Intel Mac, and most people had 
already switched to Apple Silicon. His own Intel Macs were too 
old to update. Walter asked whether newer Macs were no longer 
emulating x86. Rikki said the GitHub image was called 
`macos-15-x86`, but it was running on an M1 according to GitHub's 
documentation. It definitely should have been working.

Walter said x86 apps on Apple Silicon required Rosetta. Rikki 
said the setup did work, but not enough. It was definitely set up 
for x86. Steve said his own experience running x86 programs such 
as dub and DMD on an M1 was sketchy. The system would sometimes 
decide that a universal binary was in ARM mode and try to link 
ARM code with x86 code. He had mostly switched away from DMD on 
his Mac and used LDC instead.

Walter said that from a larger point of view, he had been 
generating programs with DMD that ran on his ARM Mac mini. He 
wasn't going to worry about DMD failing to generate x86 code for 
Mac because he didn't see much point in struggling with it. Apple 
didn't care about x86 anymore, and fighting with that was a waste 
of time. He would keep working on the ARM-generating version of 
DMD.

Rikki said that sounded like dropping x86 support for macOS with 
DMD, because as of macOS 15 it was dead. Walter said he 
understood that. Steve pointed out that there were still people 
using macOS 15 on x86 systems who used D, because he had people 
complaining in some of his projects about it not working. He 
usually told them to use LDC.

Walter asked whether no D programs worked, or whether there was 
simply no release. Steve said there was no release version of DMD 
that worked on macOS 15 because of a segfault issue. That issue 
involved Apple changing something internal, related to 
thread-local storage, where the system was using bits it hadn't 
used before. The way D was zeroing those bits caused segfaults. 
That had been fixed in master, but not released yet.

The discussion then got tangled because there were two issues 
being discussed. Steve reiterated that the issue he'd brought up 
had affected DMD and LDC when macOS 15 was released and had been 
fixed in master. There had not been a DMD release since then, so 
the current released DMD did not work. What Rikki was talking 
about was different. Even if the compiler and library could be 
built from master, the macOS 15 CI still didn't pass well enough 
to use that image for release testing.

Rikki said the one idea they had was that x87 appeared to have 
gone away on macOS 15, but not macOS 14, even on the same 
hardware. Someone with macOS 15 would need to test it. He had 
pinged Luna, who had a relevant machine, but she wasn't able to 
help much at the moment.

Steve tried to clarify the CI situation. GitHub had been running 
tests on macOS 13. They had bumped to 14. If they tried to bump 
to 15, CI failed. So they could build on macOS 14 and possibly 
run on macOS 15, but they could not build and test on the macOS 
15 GitHub image. Rikki added that they didn't actually know 
whether a compiler built on 14 and moved to 15 would pass all 
tests. Some cases might work, and others might not.

Walter asked whether anyone had a macOS 15 machine they could use 
to test DMD and see why an executable was failing. Átila said he 
definitely did not. Robert was on macOS 14. Steve was on macOS 26 
on an M4 Mac, but not on an x86 system. Rikki explained that the 
image in question was an Intel image running on M1, with x86 
system libraries. Steve said if the issue was only running an x86 
image emulated on an M1, then he didn't think we needed to care 
about it. Rikki cautioned that it might also apply to regular 
Intel macOS 15 systems.

Walter asked whether the compiler crashed, the linker failed, or 
the generated code crashed. Rikki wasn't sure anymore because it 
had been a while since he investigated. He offered to create a 
new PR bumping to macOS 15 Intel and ping Walter on it so Walter 
could see exactly what was failing. Walter said he would at least 
like to know whether it was something trivial, such as a wrong 
switch or the linker trying to combine x86 and ARM code.

Steve found what he thought was [the last time macOS 15 had been 
enabled in a PR](https://github.com/dlang/dmd/pull/21985). Walter 
saw an undefined identifier error and said that was something 
that could be found. Rikki thought that particular issue involved 
an incompatibility between the backend and something in the 
frontend where x87 wasn't supported, and the configuration 
between the frontend and backend was mismatched. He had filed a 
bug report for that, but he wasn't sure whether it had been using 
macOS 15 or macOS 15 Intel. The distinction mattered.

Walter was frustrated by the shifting explanations. Rikki said 
the issue Steve had linked was one problem associated with macOS 
15, but not necessarily the same issue he had originally meant. 
Steve agreed that they now knew that particular log was not the 
issue Rikki had been talking about. The next step was for Rikki 
to create a new PR with the macOS 15 bump so they could get 
current logs.

Átila said that in the future, this kind of thing should probably 
be handled asynchronously first and then discussed in the 
meeting. It wasn't efficient to try to diagnose this in real time 
without links to CI failures. Walter again asked whether anyone 
had a macOS 15 Mac. When the answer was no, he said we were dead 
in the water because no one had the machine. Rikki said all he 
could do was report that he had run into the problem.

Rikki mentioned that his own Mac was from 2014, and joked that we 
could use his Macintosh Classic if we wanted, but that was Mac 
68k machine and he hadn't booted it yet. Steve said Luna had an 
actual Intel MacBook Pro with macOS 15, but again, she was not in 
a position to work on it at the moment. Átila said one of the 
users with such a machine would have to debug it. Steve thought 
the first step was still to reproduce the CI failure. Rikki said 
if the failure involved something like missing x87 instructions, 
we would need a debugger on a real machine. Átila reiterated that 
it wasn't useful to talk about what might be happening without 
either a machine or CI results. Steve agreed that step one should 
be to make the failure visible.

Rikki said he would create the bump PR, ping Walter, and then 
probably leave it to Walter, because that was as far as he could 
go.

### Bundles

Rikki moved on to bundles. Robert asked him to explain what he 
meant by "bundles", because Robert had several different concepts 
in mind.

Rikki said he would get to that, but wanted to begin with the 
motivation. For starters, at least for DMD, DRuntime had to be 
split from Phobos in terms of the binary. We couldn't keep 
putting both into the same binary because of symbol limits in 
some cases. We were also introducing BaseD, which had to live 
somewhere and would increase the symbol count. It would need to 
exist as object files, not just as part of DRuntime. Phobos v3 
would also not be a single binary. It would have a set of shared 
libraries built on top of it for things such as coroutines, web 
servers, and other functionality. The current situation with 
compiler switches and how D shipped things wasn't good enough for 
that.

Átila asked what problem he was trying to solve. Rikki said the 
issue was linking and imports: how to link against BaseD, how to 
link against Phobos v3, and how to handle the fact that these 
pieces would be separate binaries. Walter said we probably needed 
Adam Wilson to talk about that. Rikki disagreed, saying Adam 
hadn't been thinking about it. Walter said Phobos v3 didn't exist 
yet. Átila agreed and said he still didn't understand what 
problem Rikki was trying to fix right now.

Rikki said Phobos v3 couldn't exist if we couldn't link against 
it. Átila responded that on November 14, 2025, nobody was trying 
to link to it. There was nothing to link to yet. Rikki reiterated 
that it couldn't exist without solving this first. Átila said 
that when we got to releasing it, they could solve the problem if 
we had one, but Adam wasn't even present and he didn't understand 
why we were talking about it now.

Rikki agreed to move on. Átila quoted himself, saying, "Never do 
tomorrow what can be left until the day after tomorrow, because 
by then you might not have to do it anyway." Rikki said this was 
definitely a case where we would have to do something.

Robert said he didn't know that yet. He noted that Rikki hadn't 
run a shell script or otherwise tried to build and link Phobos v3 
to show that the linking failed. Unless the problem had 
materialized, there was no measured problem. Rikki might be right 
that there would be something to fix, but there might also not 
be. Robert said Rikki was trying to build a bridge when there was 
no water to build a bridge over. Walter added that it seemed like 
trying to build a launchpad for a rocket without knowing what the 
rocket would be.

### Class monitors and `synchronized`

Rikki's next item was the class monitor. He said the current 
situation was dire in terms of unsafe casts and hard-coding 
between the compiler and the runtime. He said Steve knew about it 
because they had been trying to figure out a way around it for 
months.

One reason this mattered was custom root classes. When D 
eventually switched to safe by default, he didn't think `Object` 
was going to come along in the same way it existed now. The 
monitor was one of the first steps. Currently, it was special. It 
hooked into the compiler, the compiler synchronized on it and 
initialized it, and the relationship between the compiler and 
DRuntime was hard-coded. Rikki thought we could move the monitor 
to be a field of the root class, simplifying the compiler 
somewhat, though it would change the class layout.

We could also loosen things so that the monitor worked with 
structs, pointers to structs, classes, and more than one 
interface. We could provide static methods for monitor entry, 
monitor exit, and perhaps destruction. That would allow custom 
monitors rather than being hard-coded to `_d_monitor`. If it 
worked, we could even have monitors in C++ classes, and 
eventually in a custom root class.

Átila asked why we would want a monitor in a C++ class. Rikki 
said it would verify that the approach worked. Átila asked who 
was asking for this. Rikki said if we wanted custom root classes, 
we had to solve it. Átila said that was begging the question. 
Walter said D already allowed C++ classes that didn't have object 
monitors. Rikki said yes, current C++ classes didn't have them. 
The proposal would allow them to have one and would also allow 
custom root classes to have them. Walter said COM support in D 
already allowed classes without monitors. He didn't get what 
problem was being solved.

Steve said the problems he had with the monitor were that it 
wasn't just the synchronization primitive. Other things were 
stuck in there too, including signals and slots, and it was all 
hidden under the hood with allocations and odd behavior. It 
seemed like there should just be a language hook for 
`synchronized`. There was no reason the monitor had to be a 
special part of the class. He didn't know the right solution, but 
when writing the new GC, one thing he still didn't support was 
synchronizing on an object. If an object was synchronized on, it 
gained a monitor and also gained a destructor if it didn't have 
one before. His current GC had no way to do that.

Átila said his proposal would be to remove the monitor and also 
remove `synchronized` from the language in a future edition. 
Steve said that would work, too. Rikki said `synchronized` 
definitely needed to stay. Átila disagreed.

Walter said the monitor came from Java. It was there so the 
`synchronized` keyword could work. He thought signals and slots 
had been a technique that was hot 20 years ago but no longer was. 
Steve said he had at least one bug report against his GC about 
signals and slots not working, so at least one person still used 
them.

Walter asked whether `synchronized` was an obsolete feature 
because it wasn't how modern synchronization worked anymore. 
Átila said he agreed 100%. Rikki said people did use locks 
through `synchronized`, and that it was a valid way to write such 
code. Steve said having a scoped locked area was not horrible. 
Átila said there were ways to do that without `synchronized`.

Rikki argued that what `synchronized` provided was compiler 
understanding that a block was synchronized and therefore 
couldn't be yielded within. He would rather the language make 
that safe than have people work around it with something like 
`core.sync.mutex`, accidentally yield while holding a lock, and 
end up with a deadlock they couldn't figure out.

Átila again suggested removing `synchronized` and the monitor in 
a future edition. Rikki asked for a counterproposal. How should 
we tell the compiler that a block was synchronized? Átila didn't 
know if that was useful and asked Rikki to send code showing what 
he wanted to do. Steve said all of the GC used locks without 
`synchronized`, and the compiler never complained about yielding. 
He wasn't sure what Rikki meant.

Rikki explained that he was talking about stackless coroutines. 
He had added to the DIP that if a `synchronized` statement 
existed, yielding inside it would not be allowed. The concern was 
that people would write synchronized statements, then yield 
inside them and create deadlocks.

Átila said this was not the best way to talk about blocks of code 
without looking at the code or the proposal. Steve asked whether 
other languages had this restriction. Rikki suggested checking C# 
quickly. Walter said Adam was an expert in C# and should probably 
be part of the discussion. Átila again said he wanted to see code 
before forming an opinion.

Rikki described the scenario. Inside a coroutine, you synchronize 
on something, do work that requires the lock, and then 
accidentally yield. You cannot hold the lock across the yield. 
Átila asked why the coroutine was holding a lock anyway. Steve 
said he didn't see how this was fundamentally different from a 
thread holding a lock and being put to sleep by the kernel. Rikki 
said that was exactly the point. He wanted the language to model 
and prevent it.

Robert said he didn't understand the actual problem. His 
understanding was that if a coroutine or thread entered a 
synchronized block and then got interrupted, when it woke up 
again, it would still have the lock. He considered that the 
correct semantics. Rikki said that was right, except for the part 
where it might never wake up. Robert said that sounded like 
solving deadlocks in the wrong way. Taking resources away from 
other threads or coroutines was not how people normally avoided 
deadlocks, except in a few academic languages that had failed 
horribly. If that was the proposed direction, he would strongly 
oppose it.

Rikki clarified that he was not proposing taking the lock away. 
The problem was that if one coroutine went to sleep while holding 
a lock, another coroutine might try to acquire that lock, fail, 
and prevent the original coroutine from ever waking up. Steve 
pointed out that internally, when entering a synchronized block, 
a coroutine would have to sleep until the lock was available 
anyway. Rikki said some languages and runtimes allowed yielding 
while waiting for a lock, but people had found that it caused 
deadlocks.

Steve said deadlocks would happen if synchronized code wasn't 
written correctly, and that was a fact of life. Átila mentioned 
Pony as a language without deadlocks because it didn't have 
locks, though it had a complicated type system to support that 
model.

Walter said yielding inside a synchronized block screamed bug to 
him. Rikki agreed and said it shouldn't be allowed. Walter said 
the language did not know what a yield was because D didn't have 
a yield feature. Átila noted that with stackless coroutines, the 
compiler would know. Walter said stackless coroutines were a 
different synchronization issue from `synchronized` on a monitor. 
They were just incompatible with each other.

Átila summarized the oddness of the discussion. They were talking 
about a feature that didn't exist yet, that might cause problems 
with `synchronized`, and that somehow related to the class 
monitor. He again proposed removing the monitor and 
`synchronized` in an edition. Robert said he would put his name 
on that. Walter said he thought `synchronized` was obsolete. 
Steve thought they would get pushback and probably hear good 
reasons why people used it. Walter said that was reasonable. 
Every time he tried to eliminate something, somebody had built 
their entire store around it.

The rough outcome was that we should look at removing 
`synchronized`, and Rikki should provide concrete examples or 
precedents from other languages if he wanted to argue for 
retaining it or enforcing restrictions around coroutine yields.

### DIP 1000

Átila brought up something he'd been investigating with DIP 1000. 
He'd looked again at his idea of making `scope` explicit and 
tried compiling the runtime with it. After about ten edits adding 
`scope` everywhere, he realized the approach was not going to 
work if the runtime itself required that much annotation, let 
alone every D project in existence.

He took a step back and returned to the original issue that had 
made him question DIP 1000: a vibe.d pull request that had 
required adding `scope` even though the code wasn't doing 
anything bad. With a modern DMD, he could no longer reproduce 
that issue. He wasn't sure what had changed in the DIP 1000 
checks, but it no longer seemed like such a big deal.

He then tested how many dub projects failed to build with DIP 
1000 turned on. There were about 2,600 dub projects. Of those, 
1,720 built with a plain `dub build`, excluding abandoned 
projects that didn't build with current DMD anyway. He had to use 
DMD 2.110 instead of 2.111 because 2.111 compiled for 40 minutes 
straight on two projects, and he filed an issue for that. Out of 
the 1,720 projects that built normally, only 84 failed with DIP 
1000 turned on. That was a tiny number.

He wondered whether we should revisit enabling DIP 1000 
deprecation messages and eventually turning it on by default.

Walter said that was good news. He didn't think we should remove 
DIP 1000 as an option because he still had hope for it. His 
`@live` analysis relied on DIP 1000 because without `scope`, it 
couldn't tell what happened to pointers passed to other functions.

Átila said the original concern had been that transitioning would 
be too much work for people. But now, only about 4.9% of the 
projects on code.dlang.org that already built failed when DIP 
1000 was turned on. Robert said vibe serialization was an 
important project, but if there were only about 84 failures, we 
could look at how easy they were to fix. The failing projects 
could also act as a guide for where DIP 1000 itself still needed 
work.

Átila said 84 was not completely insane to investigate or submit 
PRs for. Robert said this basically proved Átila's earlier point 
that sometimes not doing something for a while solved the 
problem. What had once looked like a large transition might now 
be a small one.

Walter speculated that people might already have modified their 
code to be DIP 1000-compatible. A large part of the confusion 
around DIP 1000 involved the `scope` status of the `this` 
reference in member functions. One improvement he wanted to make 
in D was to make the `this` parameter explicit. If it were 
explicit, it would be much clearer where `scope` and `return` 
belonged, instead of making people guess. He thought that would 
clear up about 70% of the confusion with DIP 1000.

Átila agreed, saying that Python had `self`, but Rust was a 
better comparison because it had attributes on `self`. Walter 
agreed and said D should do something like that. Steve didn't 
like the idea of not having an implicit `this` pointer. He found 
it reasonable that attributes applied to `this` rather than to 
some explicit parameter. Walter said copying C++ there had been a 
bad idea. Dennis thanked him. Átila said implicit `this` was fine 
if you didn't have attributes or storage classes, but not when 
you did.

Walter said making `this` explicit could also eliminate the need 
for the `static` keyword on member functions. If a member 
function didn't take an explicit `this`, then it would 
effectively be static. Steve pointed out that this would affect 
existing code that assumed an implicit `this` parameter without 
the `static` keyword. Átila said that would have to be handled in 
an edition. Walter said they should implement it fairly soon as 
an option, giving people a long adaptation period before even 
thinking about making it required.

Returning to DIP 1000, Átila asked whether anyone objected to him 
looking at the failing projects one by one, maybe submitting PRs, 
and then turning on deprecation messages again. In the past, it 
had been a massive pain, but now it didn't look that way anymore, 
probably due to a combination of DMD changes and projects 
adapting.

Walter thought that would be impractical until there was explicit 
`this` syntax. Robert suggested that before Átila started working 
through the list, he should send an email with the list of 
failing projects. Some might belong to people in the meeting, and 
they might be able to fix their own projects.

Átila said he had used Codex to help with this work. He already 
had code to pull packages from dub and build them, then had Codex 
help write an app that took the list, accepted DMD arguments, and 
ran the dub builds again. He said he didn't write one line of 
that himself, though he did have to tell it multiple times what 
he wanted. Walter joked that he loved it when people said 
something “just works.” Átila said he wasn't insane. He had tried 
it first on three projects. Two passed with DIP 1000 on, and vibe 
serialization failed, exactly as expected, so he was confident 
enough to run it across the full set.

Walter complimented Dennis for doing a lot of work to make DIP 
1000 work better and said the progress Átila was seeing might be 
a direct result of Dennis's work. Átila agreed that was probably 
true. He said he'd been confused when he could no longer 
reproduce the old problem, even after copying more context from 
the original issue. Dennis said scope inference had gotten 
better, so something that used to fail might work now.

### The bootstrap compiler

Walter said he couldn't use DIP 1000 and other newer features in 
DMD because of the bootstrap compiler. Walter asked whether there 
was any hope of moving to a more modern DMD as the bootstrap 
compiler.

Dennis asked why he couldn't use DIP 1000, since even the 
bootstrap compiler supported `scope` and `return` keywords, and 
there were already some scope annotations in DMD. There was also 
a CI check that built DMD with DIP 1000.

Walter said this wasn't only about DIP 1000. Every time he wanted 
to use a new D feature in the DMD source code, it failed because 
the bootstrap compiler didn't support it. It was frustrating to 
create shiny new features and then not be able to use them in the 
compiler.

Dennis asked whether Walter was thinking of anything besides 
bitfields. He knew Walter had talked at length about those, but 
aside from bitfields, Dennis didn't often feel the need to use 
fancy features in the compiler. He preferred the compiler code to 
stay relatively simple rather than using lots of templates, 
mixins, and fancy constructs. Walter didn't regard bitfields as 
fancy, but he couldn't immediately think of another specific 
feature.

Steve mentioned shortened methods and named parameters as 
examples of newer features he used.

### DMD on macOS ARM64

Walter said the macOS ARM64 support was taking a stupid amount of 
time, far more than he had anticipated, and he found that 
extremely frustrating. He said it was his own fault.

Dennis said he had seen Walter working a lot on varargs, which 
was a pretty niche thing, and asked whether the more basic things 
were working now. Walter said the basic stuff was working. The 
problem with varargs was that Apple had created its own version 
that it did not document. He kept running into crashes, then 
having to figure out that Apple was doing something different 
from the standard.

Exception handling was another area he hadn't yet attempted. 
Debug info and stack unwinding were also problems because Apple 
had gone its own way again and invented another undocumented 
approach to stack unwinding information. All of that was making 
it hard for him to compile DRuntime with it.

He didn't know how much time he should keep spending on it, or 
whether he should set the project aside for a bit and work on 
other DMD features, such as the explicit `this` argument for 
member functions. He said he should come up with a DIP for that 
and that it shouldn't be hard to implement. Dennis thought it 
sounded mostly like a parser change.

## Conclusion

The next monthly meeting was scheduled for December 12th. If you 
anything you'd like to bring to us in a monthly meeting, please 
let me know.



More information about the Digitalmars-d-announce mailing list