D Language Foundation March 2025 Monthly Meeting Summary

Mike Parker aldacron at gmail.com
Wed Jun 11 13:52:14 UTC 2025


The D Language Foundation's March 2025 monthly meeting took place 
on Friday the 14th and lasted about an hour and twenty minutes.

## The Attendees

The following people attended:

* Walter Bright
* Rikki Cattermole
* Jonathan M. Davis
* Martin Kinkelin
* Dennis Korpel
* Razvan Nitu
* Mike Parker
* Robert Schadek

## The Summary

### Data Flow Analysis requirements

Rikki had put together [a document describing features he would 
expect enhanced 
DFA](https://gist.github.com/rikkimax/e99b60ca6c739acdddbf0de7d4d0a134) in D could enable and the problems it could solve. Because I had missed his email with the agenda items, no one had the opportunity to read it before the meeting. Rikki suggested Walter take some time to read it in the coming weeks. He needed to know what to do next. Once he heard something from Walter, he'd make the document public.

Walter said Rikki could go ahead and make it public now. There 
was nothing secret about it. Rikki said he just wanted it to go 
through Walter first before he released the final version.

I asked Rikki if he wanted to talk about it or move on to the 
next item. He was okay with moving on.

(__UPDATE__: Walter has since reviewed the document. As I noted 
[in the January 
summary](https://forum.dlang.org/post/ohspwyjwkccolhroqdjy@forum.dlang.org), he's skeptical it can be done without a negative impact on compile times and/or memory consumption. Rikki is working on an implementation to find out.)

### PR for external import path switch

Rikki had [a PR to add a new compiler 
switch](https://github.com/dlang/dmd/pull/20899). He said Martin 
might want to review it and let him know if it needed any 
changes. Otherwise, it was green and could be merged.

Martin said he'd glanced at it and it didn't look too interesting 
to him because it was just adding the switch. He hadn't thought 
about the field Rikki had added. He did command line handling 
specifically for LDC, so it had more LDC options rather than the 
homegrown DMD options. He wouldn't be able to use everything 
Rikki was adding for that.

He noted Rikki had done some stuff in the glue layer, in 
`e2ir.d`. Martin said he couldn't use that part. He'd have to 
implement it separately for LDC. The problem was time. At the 
moment, he was mainly focused on several interesting things 
happening to the LDC repositories. For example, getting D 2.111 
merged after six months of work, and reviewing contributions like 
some PowerPC stuff and some Windows ARM64 stuff from Rainer 
Schütze, who needed to get VisualD working on a native ARM64 
Visual Studio.

He said Rikki shouldn't wait on him. Rainer had done the `e2ir` 
stuff, so he would be the ideal person to review those changes. 
Rikki thought Martin should look at it since he would have to 
bring it to LDC anyway.

Martin said the problem was getting his priorities right. This 
feature didn't have any priority for him because Rikki was the 
only one asking for it. He thought it was a good idea, but he had 
so many other things that were more important to him at the 
moment that he couldn't promise when he'd get to it.

Rikki said that because he'd added a struct for import path 
information, Martin was going to have to update his command-line 
handling code anyway. Martin said he'd done that a couple of days 
ago. But as for this PR, he'd only had a glance. It looked okay, 
but he hadn't looked at the tests or done a proper review.

Rikki said he just needed to know the next step if Martin wasn't 
giving the thumbs up on it. Martin said he couldn't say much 
about it yet. It depended on him implementing and testing it in 
LDC. He asked if the feature was tested. Rikki said that it 
created a `.di` file for one of the existing tests so that it 
became external and he could test it with the switch. That worked.

Martin said that didn't sound too bad. Since it was targeting 
master, it was something for D 2.212. He asked if Rikki was 
personally blocked by this. Rikki said he was building a build 
manager for it.

Martin was surprised to hear that: "A build manager? So now we 
have dub, reggae, redub, and another solution?" He said he would 
have a real look at the tests and the changes outside of `e2ir.d` 
and if it all looked good, we could merge it.

### Bitfields sanity check

Rikki had [implemented a simple bitfields sanity 
check](https://github.com/dlang/dmd/pull/20848) because [Walter's 
attempt had 
failed](https://github.com/dlang/dmd/pull/20840#issuecomment-2647233181). He offered to turn bitfields on if it was merged.

Walter noted that he'd already commented a lot in that thread. He 
still felt all this fear about bitfields was unjustified. All the 
effort to flag things that may not be portable was just a 
nuisance. He was sorry that Rikki had spent the time on it. 
Nobody was going to want to add those annotations to make it pass 
a sanity check because it wasn't insane.

Rikki said we should prove that. Removing the check after it was 
added wouldn't break anything. Walter said it would make 
bitfields ugly for no useful purpose. Rikki argued we'd be 
proving Walter's point, and we could remove it later in that case 
without breaking code. But if we didn't add it and later found 
that we needed it, then we'd break code.

Martin said he wasn't sure he understood. He'd just had a glance 
at it. It looked like it just added new errors in case the 
bitfields might not be portable. For example, if the offsets 
diverged across platforms. He asked what the point was.

He saw it the same as Walter did. He'd been against extra checks 
like that from the beginning. They didn't buy us anything. If 
there was anything to prove, just look at C. They used bitfields 
with their compilers and platforms without any extra checks like 
this, and it all was fine.

Walter said C had been around for 40 years and no one had ever 
proposed a fix for this issue. He'd searched extensively and the 
only thing he could find about it was Linus Torvalds replying to 
complaints about it by saying it wasn't a problem.

If anyone did encounter a problem with it, they could just use 
explicit shifts and masks for that particular case. It was a 
theoretical problem, not one that was worth bothering with. It 
made the language uglier to add all these errors for perfectly 
good code. The use cases where a problem might arise were fairly 
unusual. He didn't want to make the language uglier with spurious 
errors for those rare cases.

Martin added that we already had a solution for portable 
bitfields in Phobos. It was ugly, but if you cared about portable 
bitfields, use that one.

Walter agreed. The solutions were obvious. If you didn't like the 
bitfields, you didn't have to use them. They were an optional 
feature. But when you did use them, they could make your code 
significantly nicer and more readable. But if you were afraid of 
those rare issues, just use `std.bitmanip` or shifting and 
masking.

There really was no downside to this. He reminded everyone again 
that struct field alignment changed between C compilers. Who was 
complaining about that? Nobody. D did the same thing and there 
wasn't a single complaint about it.

Rikki noted we supported adjusting alignments for packing struct 
fields. D's bitfield implementation didn't support that.

Walter emphasized he was talking about non-bitfield fields. The 
layout wasn't portable for the same reasons and nobody cared. 
Rikki said the programmer could set the alignment and get it 
packed to whatever they wanted.

Martin said it wasn't about packing. He said that the alignment 
of `double` on 32-bit Windows was 8. That was the only 32-bit 
platform using 8 rather than 4. Nobody was complaining about any 
portability issues across 32-bit Windows, Linux, and Mac.

Walter said bitfields would clean up the DMD source code quite a 
bit once we were able to use them. The code would look a lot 
nicer. One of the main ideas behind D was to be able to write 
nice-looking code. They were already there in the compiler and 
they worked. Just turn them on.

Dennis said the implementation currently worked with C, but it 
didn't always work with all D features. Field initializers 
weren't supported. `const` fields weren't supported. Binding it 
to a reference wouldn't mask it, so that was a bug. It also 
didn't yet generate correct debug information. So there were 
still a lot of holes in the implementation.

Walter said you couldn't make `const` bitfields. They weren't 
allowed in C. The reason was that the implementation had to write 
to the field, and if the field was `const`, it couldn't.

Dennis said that was the point of `const`, you could read it but 
not write to it. Walter asked how you could create it then. You 
couldn't initialize it because it was `const`. Jonathan said you 
could initialize one bit in there, but the rest of it was screwed.

Walter said `const` bitfields couldn't work. As for debug info, 
he hadn't put any time into it yet because he couldn't get anyone 
to merge the PR. Martin said that people could explicitly opt-in 
to bitfields now with the preview switch. Walter said that meant 
nobody was using it.

Martin felt it didn't have to be a perfect solution to be merged 
or to be usable for most use cases. First, he didn't expect many 
people to use it. Second, as long as it worked for the trivial 
cases, that was fine. Ideally, we'd have some pretty good 
coverage mimicking how we expected it to be used in practice. He 
didn't know anything about the existing tests, so maybe they were 
fine.

Walter said the existing tests were pretty thorough. They had 
uncovered bugs in the initial implementation. He'd fixed them and 
thought we were in good shape.

Walter said that people had told him they'd approve the pull 
request to take bitfields out of preview if he added this or 
that, so he'd added this or that and it didn't get approved. It 
kept coming back to the same old complaint about differences 
between C compiler bitfield implementations.

Dennis thought there had been a decision made at the last 
meeting. Walter said no one had approved the pull request. Dennis 
recalled the deal was that Walter would add checks for when 
people did stupid things. Walter said yes, but after looking into 
it, he changed his mind because it would be too ugly.

Dennis asked if we were then going to decide to let it go without 
the checks. Once we committed to that, then we should fix all the 
bugs and make it proper for release. He understood why Walter 
didn't want to do the work to cover all the bases if no one 
wanted to pull it, but if we agreed to move it forward, then we 
should fix all the remaining issues.

Walter was unaware of any issues other than the missing debug 
info. He'd fix it, but he didn't think it was a high priority. 
Dennis said it was a high priority. He added that there was [a 
bug in the issue 
tracker](https://github.com/dlang/dmd/issues/20365) showing that 
you could pass them to ref variables and it would just pass the 
unmasked, full bitfields field. It should probably be an error 
because you couldn't take a pointer to a bitfield. Walter said he 
hadn't been aware of that issue.

Rikki said that Átila should be looped in, as he'd had some 
thoughts about it in the last meeting. Walter said Átila had 
wanted the checks. Jonathan reminded us that Átila had thought 
the checks were a good idea because he'd had colleagues in Cisco 
who'd done stupid things with bitfields.

Jonathan thought the checks were a good idea in principle, but 
the more he looked at it, the more he thought that if people were 
going to be stupid with it, then they were going to be stupid 
with it and you couldn't really stop them.

Martin agreed. As he saw it, you wouldn't be able to compile any 
C code with ImportC.

Jonathan reminded us that the idea was to enable the checks in 
normal D code such that you got a compilation error if you did 
something stupid with the layout of a bitfield. You could then 
use `extern(C)` to turn off the error. ImportC would still work 
then, as it could just make the bitfields `extern(C)`. As he 
understood it, Walter ran into an issue with putting `extern(C):` 
at the top of the file. It couldn't work with struct fields, 
which meant you could only get it to work by putting the 
`extern(C)` directly on the bitfield.

I recalled it [had been a semantic 
issue](https://github.com/dlang/dmd/pull/20840#issuecomment-2647233181) in that you didn't have the `extern(C)` information when you needed it. Walter said that in order to know if `extern(C)` was in effect, you needed to have semantic information. The issue was that you needed to know if it was in effect before the semantic pass was run.

Rikki said his PR did the checks in Semantic 3, and it was pretty 
simple. Was this the offset we expected? If so, great. If not, 
that was an error.

Walter said that wasn't quite what he'd been thinking originally. 
His idea was to give the error if the layout differed between an 
`extern(D)` and an `extern(C)` bitfield. He didn't think Rikki's 
patch predicted all the cases where they might differ.

Rikki said it wasn't meant to predict. It was target-specific, so 
it sometimes worked. Walter agreed it would sometimes work, but 
it overlooked other cases, so it didn't thoroughly solve the 
problem. Rikki said it did if you threw CI at it, which was what 
we should be recommending anyway.

Jonathan said that if that was the sort of thing required for 
this to do what it needed to, then it wasn't going to do its job. 
The whole problem was people who didn't understand this well 
enough, who would be using bitfields with a specific layout and 
not understanding that it wouldn't work in reality. People like 
that wouldn't be doing the checks they needed to do in CI and 
would just shoot themselves in the foot.

Unless the checks were straightforward and clearly caught all the 
stuff they needed to, he didn't think they would help in 
practice. If they required the user to be diligent to make them 
work properly, then they wouldn't be catching anything anyway.

Rikki said we should table this discussion until Átila was here. 
Anything we could do to mitigate this, including D-Scanner, 
wasn't going to work, so it was kind of a now-or-never thing. 
Walter said D-Scanner didn't do semantic analysis, so it couldn't 
work anyway. Rikki said it could be doing it soon. He'd recently 
submitted a PR to fix an issue that was blocking the replacement 
of libdparse with DMD as a library in D-Scanner.

Walter said if someone wanted to write a linting tool that did 
this or added it to D-Scanner, that was fine with him. Rikki said 
it was fine with him, too, except he didn't think it was going to 
work at that level.

This took us into a discussion about linters and how people 
either turned them off or made unnecessary code changes just to 
get them to shut up. Then we talked about DMD warnings, how 
Walter had never wanted them but we'd ended up with them anyway, 
how Dennis thought Iain had removed a bunch of them, and how 
Jonathan would like to get rid of them entirely.

At this point, I asked if the decision on Rikki's PR for adding 
bitfield checks in Semantic 3 was a thumbs down. Walter said he 
was sorry about that, as he hated to say no when Rikki had put 
the work into it.

I said if this ever did make it in, it was going to be the most 
thoroughly discussed, kicked, and beaten feature we'd had yet. 
Jonathan said that was funny, as he thought very few people would 
even use it.

(__UPDATE__: The Bitfields DIP [has since been submitted and 
approved](https://forum.dlang.org/post/wstbhxovohvwokldbdeo@forum.dlang.org).

### BetterC switch splitting

Rikki said he'd started splitting the BetterC switch into its 
constituent flags. Not at the CLI level, but internally.

The first one was [allowing `ModuleInfo` to be 
disabled](https://github.com/dlang/dmd/pull/20947) on a 
per-module basis. The idea was you'd have a preview switch that 
would allow you to disable it for an import path or individual 
modules. It allowed you to interplay between libraries more 
cleanly without linker errors.

He said that if you wanted to see why he thought this was 
necessary, all you had to do was look at any of the dub recipes 
of any of the BindBC libraries. They had to use a BetterC 
configuration and a full D one. Why was that? BetterC was just a 
subset of D. All it was missing was some code generation features 
that it never used. It was obnoxious that we had to do that. 
Having a way to tell the compiler not to emit references to stuff 
would be useful.

Dennis asked how this would allow the configurations to change. 
Rikki said that you just wouldn't have them. You'd just enable 
BetterC and you'd be done. The build manager would give you the 
prefix switch before all your files and import paths.

Walter said he was looking at the PR and couldn't see any 
description of how it worked or what the user needed to know to 
use it properly. Rikki said there weren't any switches currently, 
just some refactoring under the hood. So nothing should be 
breaking.

Walter asked how it was based on import paths. What would the 
user see with this? Rikki explained that this would allow you to 
tell the compiler a module didn't have a `ModuleInfo` instance 
even if it did.

Martin said this feature already exited in LDC and had for a long 
time in the form of a pragma, so you didn't need to tamper with 
any command-line options for any dependent projects, because it 
was directly in the module. That meant if the module was 
compiled, it wouldn't generate the `ModuleInfo`. If it was just 
imported, then it didn't mean that the reference was skipped 
because the reference was lazy anyway. It depended on whether 
there were any module constructor cycles or ordering issues.

Martin had assumed Rikki was going to talk about adopting what 
LDC and GDC had done. GDC had started this. It still had the 
BetterC switch, but it also had four or five individual switches 
for `ModuleInfo`, `TypeInfo`, that sort of thing, so that you 
could use it for regular D code as well. Just skipping the 
`TypeInfo` or whatever in specific cases. LDC adopted it not too 
long ago.

That's what Martin had thought this was going to be about. But 
Rikki's PR was just adding extra fields to stuff. We already had 
the checks for the type information. So there was at least one 
internal flag already for emitting `TypeInfo`s. We did check if 
there was a `TypeInfo` symbol in `core.object` and didn't emit 
anything if that check was missing. So he didn't think we needed 
to have any extra flags in the AST to make this work.

Ideally, we should start with these command-line switches in 
order to get rid of the blunt `-betterC` option. At least give it 
the option to make it more fine-grained. Then maybe Rikki could 
come up with solutions to solve this specific problem he had.

Rikki said there was [a bug report in the LDC issue 
tracker](https://github.com/ldc-developers/ldc/issues/4779) about 
C++ classes needing `TypeInfo`. Martin said the C++ classes only 
needed the `TypeInfo` when they were being called from D code. 
That had nothing to do with what we were talking about here. 
Rikki said it actually did because it should be nulled out if it 
didn't have `TypeInfo`, which was what the prefix switch he was 
going to add would do.

Walter said if LDC had a simple solution for this, then we should 
look at that. Martin said the point was that nobody really used 
it. There was one occurrence where it was needed in LDC DRuntime. 
In other cases, it was just a minor optimization. It avoided 
polluting your object file with `ModuleInfo`s when you didn't 
need them because you had no unit tests or module constructors or 
destructors, so the compiler could skip them. But nobody was 
using it. It was just for very advanced cases internally, like 
for LDC or LDC DRuntime.

He thought there was another option in the form of a pragma for 
no `TypeInfo`s for all aggregates in a specific module which, 
again, was hardly used. Either way, he expected there would be 
little demand for this stuff. It was all specifically for crappy 
BetterC stuff.

I said that I couldn't remember why I'd originally added those 
`BetterC` configurations to BindBC. I couldn't recall if there'd 
been an actual problem. Rikki said there definitely was. Without 
them, the compiler was going to emit those references to 
`ModuleInfo` and `TypeInfo` that didn't exist in a BetterC 
program.

I thought that if the configuration wasn't there and the library 
wasn't using any DRuntime features, then it shouldn't matter if 
you were using it in a full D or BetterC program. If you were 
using DUB to compile your BetterC program, didn't the switch get 
applied to your dependencies?

Jonathan didn't think it worked that way because then the 
client's flags would override the library's flags. I said that 
may have been why I'd added the configurations. The `ModuleInfo` 
would be generated without the BetterC flag.

Martin said that was the heart of the issue. He thought we were 
slowly getting somewhere. It was about where these symbols were 
referenced from and when they were needed.

He took us back to the `TypeInfo` problem and gave us an example 
scenario when compiling a D project that depended on a BetterC 
library. The library would obviously have been compiled without 
any `TypeInfo`. If the D project used one of the library types in 
a situation that required the `TypeInfo`, like putting something 
into an associative array, LDC would emit the `TypeInfo` on the 
fly whenever it was needed.

DMD worked differently. It would try to reuse the `TypeInfo` that 
it would expect to find compiled into the library. But in this 
case, since the library was BetterC, there would be no 
`TypeInfo`. It was similar for `ModuleInfo`, but a bit more 
complicated.

Walter said that since we already had a working approach in LDC, 
someone should make a pull request to implement it in DMD. Rikki 
said LDC wasn't working for him. That was the problem. Walter 
didn't understand why it wasn't and asked Martin if he understood.

Martin said that if he recalled correctly, the issue was 
specifically about `TypeInfo` not being lazily generated for 
`extern(C++)` classes. `TypeInfo` was lazily generated for 
structs, but not for classes. You normally needed the `TypeInfo` 
for D classes anyway. It wasn't optional, it needed to be there. 
And there was no special case for `extern(C++)` classes. So 
again, this was only an issue when using libraries compiled with 
BetterC or extra switches in a full D program in situations where 
you were doing something that needed the `TypeInfo`, like putting 
a class in an associative array or something.

Jonathan said that sounded like it ideally should be fixed up in 
LDC so that it was consistent and then DMD could be changed to do 
the same thing. Martin said it wasn't as simple as it sounded. 
Jonathan said that could be the case, but ideally whatever we 
ended up with would be the same across the board.

Walter said he hadn't anticipated mixing BetterC code with D 
code. Jonathan noted that a lot of people used BetterC in ways it 
had never been intended to be used. He didn't think many people 
were using it to incrementally port C code to D. Many were 
instead using it because they just didn't like the GC. I added 
that some were using it because they liked C and they just 
genuinely wanted a better C.

Rikki said that from his perspective, it was all about a 
pay-as-you-go runtime. If you didn't need something, you could 
turn it off. When you did need it, you could turn it on again and 
it would work. Needing separate configurations as we did now was 
obnoxious. If he wasn't the one to fix it, that was fine, but 
someone should work on it.

Martin said this was a DUB problem. We had similar conflicts 
because of the inheritance of flags. For example, if you needed 
to enable DIP 1008 in your program, it needed to be inherited in 
your dependencies to work properly, otherwise, you'd see weird 
errors when importing a module. But in this case, the BetterC 
problem in the BindBC example, if you just had a way to say, 
"Compile the library with BetterC, but don't pass any other flags 
down", then we wouldn't have this problem.

Walter said it sounded like LDC's approach of emitting `TypeInfo` 
only when needed was the way to go. Martin explained a bit about 
the `pragma` to skip emitting `TypeInfo` or `ModuleInfo` for a 
specific module, and a bit of history on why lazy emission was 
implemented.

I thought Átila should be present for any final decision we made 
on this, as he was a big proponent of a pay-as-you-go DRuntime. 
Jonathan thought we had a general agreement on that, just not on 
the details of how to do it. I thought Átila should be part of 
that discussion.

Walter said he'd love to see a PR from Martin to implement lazy 
emission for DMD. Martin shook his head "no". I speculated that 
it could be a SAOC project. Walter said that could be 
interesting. I suggested that someone who understood the details 
could write it up.

Walter asked if Martin could submit a bug report that linked to 
the bits of LDC that implemented it. Martin gave a rundown of the 
implementation details. He said he could probably come up with a 
simple description, but that we shouldn't expect too many 
pointers to LDC code, as that was quite specific to LDC. He'd put 
it on his TODO list. Walter thanked him.

### A couple of DIPs

I noted that we were finished with the agenda items and had only 
just gone past an hour. I said that Rikki had wanted everyone to 
know he had [a PR for his coroutines 
DIP](https://github.com/dlang/DIPs/pull/251) and was ready to 
move it forward. (Also see [the DIP Development 
thread](https://forum.dlang.org/post/asbfsajrtasfqewzbsce@forum.dlang.org)).

(__UPDATE__: I merged the PR on April 2nd and assigned it the 
number 1050. I started working with Rikki to revise it but ended 
up putting it aside for a while. We'll pick it up again and 
submit it to Walter and Átila before the end of this month.)

Walter asked if I'd had a response to his feedback about Quirin 
Schroll's [Primary Type Syntax 
DIP](https://github.com/dlang/DIPs/blob/master/DIPs/DIP1049.md). 
I said I had sent Walter an email asking for some clarifications 
before I forwarded the feedback to Quirin.

Dennis asked if this was the DIP we had discussed in previous 
meetings and if it was going to be accepted. I said it was the 
same DIP and that Walter and Átila had conditionally accepted it. 
The current email discussion with Quirin was about the changes 
they requested and whether he was willing to accept them. Walter 
explained he was primarily concerned with Quirin's approach in 
the parser to disambiguating types vs. identifiers within 
parentheses and some potential issues that arose from that.

I told Walter I expected he and Quirin would need to have a chat 
to get onto the same page.

(__UPDATE__: I scheduled a meeting where Walter and Quirin hashed 
it all out. Quirin agreed to implement Walter's suggested 
disambiguation approach in the parser and see how it worked out. 
He said it would probably be a while before he could get back to 
us with the results.)

### Miscellaneous

__DConf registrations__

I said I was waiting for word from Weka about my funding request. 
Part of it would be allocated to DConf. Everything was more 
costly this year. Even though Symmetry had given us a generous 
budget, we'd be unable to avoid going just a little bit over. 
That meant there was no room in the budget for speaker 
reimbursements.

If we got what we needed from Weka, we'd be in a better position 
to cover all the reimbursements, and I'd be able to reduce the 
registration rate.

(__UPDATE__: Weka did approve the funding level we needed and [I 
was able to launch 
registrations](https://forum.dlang.org/post/mcqialzvnlianturflqz@forum.dlang.org) at a lower rate this year.)

__DMD ARM64 backend__

Walter said he was making progress on the AArch64 code generator. 
He was having fun going through the test suite. It would die 
there, he'd look at it, fix it, and then it would start 
successfully compiling a whole new section of code.

He knew the initial version was going to generate rather poor 
code. His emphasis was on generating code that worked, not on 
optimizing it. At some point, he'd need to spin up a CI for an 
AArch64 for DMD. He thought Dennis would know how to do that. 
Dennis said he had no idea.

Martin said it was easy. GitHub Actions had supported it for a 
month or so. We would have an easy solution for Linux AArch64 as 
a native machine for running CI tests. For a start, we could use 
LDC to generate a native working AArch64 compiler and then run 
the DMD test suite and everything with it. It should be doable in 
five YAML lines. He could take care of it.

Walter thanked Martin. He hoped to have a working compiler by the 
summer.

__GSOC applications generated with AI__

I said that although Dennis wasn't old enough yet to have Old Man 
Rants, he'd had one in an email about the AI-generated 
applications we were receiving for GSOC. I wondered if we had a 
policy for that.

There'd been a discussion about it on the GSOC organizations 
mailing list. Some organizations were setting policies for it. In 
some cases, they were choosing to reject anything that was 
obviously written by AI. There had been a flood of them.

Robert said we should reject them. If you had to use an AI to 
dumb down your fluff into a bullet point thing you could have 
written in 10 minutes, then what was the point? He wouldn't even 
ask them to rewrite it. He'd done that in other contexts, telling 
people he wanted to hear from them and not AI. But in this case, 
we should just reject them.

Walter thought that if someone was too lazy to write up a 
proposal, then they weren't going to implement anything anyway.

Razvan didn't think this was something we should care about. He 
had been surprised by the amount of interest we'd had. He'd 
personally received around 20 emails from different people about 
our proposed projects. Some had also contacted him on Discord. 
One guy had flooded the zone with an email, a forum post that 
mentioned Razvan's name, and a DM on Discord.

He hadn't thought too much about whether they were written with 
AI or not. The important thing was that we wanted the students to 
do some work before accepting them. Typically, the way GSOC 
worked was that you accepted students from whom you'd had prior 
engagement.

So if they put in some PRs and we could see that they knew how to 
get the code base compiled and actually do stuff, then we could 
select them that way. If they were using AI to apply, maybe it 
was because they weren't confident with their English ability and 
were using it to polish their writing. He didn't see a problem 
with that.

Walter said he'd leave it up to Razvan and Dennis. They were 
running it, so they could decide how they wanted to do it.

I said someone had emailed me and I sent them on to Razvan. I'd 
also noticed an uptick in Discord activity. Rikki said there'd 
been quite a bit of active moderation on Discord. He'd even had 
to disable one of the spam protections.

Jonathan said that most of the people coming into Discord for the 
GSOC stuff were just saying, "Hey, I'm interested, where do I 
go?". He didn't think they were really engaging with anything in 
D at the moment.

I said I'd noticed at least one on Discord who had been working 
on the templated hook stuff. Jonathan hadn't realized that was 
one of the GSOC people. I said I'd also recently received an 
email out of the blue from someone wanting to apply for the 
Community Relations Assistant role that Max had filled for a 
year. I'd replied that he was a few years too late.

__GitHub changelog generator__

Dennis asked Robert if the GitHub changelog generator was usable 
yet (there had been some problems with it after we migrated our 
issues database from Bugzilla to GitHub). He'd seen that it 
failed CI, but it may have been the CI being unreliable as it 
often was.

Robert thought it was. He was only aware of one thing that was 
missing. There were two macros defined that turned an ID into a 
GitHub URL similar to the one on Bugzilla. Because there were 
different issue trackers for different projects, there needed to 
be multiple macros. He wasn't sure where to place them, but they 
should be trivial one-liners.

Jonathan said most of the Ddoc macros lived in the dlang.org 
repository. He'd have to dig into it to see where. Robert said 
he'd looked into it and asked Iain about the location, but he 
didn't recall if Iain had replied yet.

One other thing to be aware of was that the GitHub API didn't 
distinguish between issues and pull requests. He wasn't sure if 
it was the right way to fix it, but the generator now checked the 
JSON for something that only existed on pull requests to filter 
them out. If that wasn't working, someone should scream at him.

__Publishing a paper__

Razvan reported that Teodor Dutu needed some publications for his 
PhD. The two of them were actively working on a paper in which 
Teo would present the work he'd been doing on templating 
DRuntime. The narrative was that it was enabling the use of a 
more modern language on embedded systems.

There was a test suite that was being used on embedded systems. 
Razvan and Teo were going to use a GC that was based on `malloc`. 
It meant manually freeing, but you'd still have a runtime that 
was smaller than 16MB, the typical size of DRuntime. They should 
be able to save more space with the hooks.

They were getting a student to port the code from C to D. If that 
worked out and they got some good results, they might be able to 
publish the paper at a good conference.

__Compiler daemon__

Robert reminded us how in the past he'd pushed Walter about 
running the compiler as a server that ran in the background, 
storing the AST and intermediate results. He said the TypeScript 
people were now doing something very similar. He linked to a 
specific timecode in [a video of an interview with Anders 
Hejlsberg on YouTube](https://youtu.be/10qowKUW82U?t=2691). He 
suggested that Walter watch it.

He said the interesting thing was that now with basically 
infinite amounts of RAM, you could cache quite a few bits that 
became interesting not just for increasing compiler speed, but 
for code completion.

### Conclusion

This brought us to the end of the meeting. Our next one was a 
quarterly that we held on April 4th. Our next monthly was on 
April 11th.

If you have something you'd like to discuss with us in one of our 
monthly meetings, feel free to reach out and let me know.



More information about the Digitalmars-d-announce mailing list