D Language Foundation April Quarterly Meeting and Server Meeting Summaries

Mike Parker aldacron at gmail.com
Wed May 4 16:21:19 UTC 2022


## Quarterly Meeting Summary
The quarterly meeting for April, 2022, took place on April 8 at 
14:00 UTC. Quarterly meetings include representatives from 
companies using D in production.

__D Language Foundation__
* Iain Buclaw (GDC)
* Ali Çehreli
* Max Haughton
* Martin Kinkelin (LDC)
* Dennis Korpel
* Átila Neves
* Razvan Nitu
* Mike Parker

__Industry Reps__
* Mario Kröplin -- Funkwerk
* Robert Schadek -- Symmetry
* Bastiaan Veelo -- SARC
* Joseph Wakeling -- Frequenz

Our quarterly meetings are normally rather long (2.5 to 3 hours 
is not uncommon), but this time we finished in a little under an 
hour. And that's following on a *three-hour* monthly meeting from 
March (those are usually 1.5 to 2 hours).

### Me
I opened the meeting with a request of the foundation people that 
we schedule another meeting in April to decide on how to approach 
transferring management of several of the D ecosystem services to 
the D Language Foundation. I let them know that I had received 
resource requirements from the maintainers of several services. 
Those present agreed.

I subsequently contacted several interested parties and we set up 
the meeting for April 29, at 14:00 UTC. You'll find a brief 
summary of that meeting at the bottom of this post.

### Mario
Mario informed us that Funkwerk had released a new open-source 
tool [that they call cōgitō](https://github.com/funkwerk/cogito). 
It "analyzes D code and calculates its cognitive complexity." 
This is a measure of how difficult your code is to understand. He 
explicitly mentioned that they are using the D frontend for this. 
They've been using libdparse in their ecosystem, and this is the 
first time they've used the D frontend in a project. It's 
possible it will replace libdparse so that they don't have to 
keep up parallel maintenance.

I noted that Razvan has two students working on defining an 
interface for dmd as a library to replace libdparse. Razvan said 
he would be interested in any issues they faced during the 
development of the tool, as it could help him better define the 
interface. Mario said he could connect Razvan with the developer 
so that they can discuss it.

Mario also mentioned that Mathis Beer is having "the usual 
problems" in his work because he is always "in the dark areas of 
the D compiler", but they have nothing causing them any major 
issues that need immediate attention.

### Bastiaan
Bastiaan wanted to make sure we don't forget the dub 
documentation site at dub.pm in the server meeting.

He said his company has no major issues at the moment. They are 
making good progress with their Extended Pascal to D 
transpilation project (if you haven't heard of that yet, please 
check out his DConf 2017 talk, [Extending Pegged to Parse Another 
Programming Language](https://youtu.be/NoAJziYZ4qs), and his 
DConf 2019 talk, [Transcompilation into 
D](https://youtu.be/HvunD0ZJqiA)). He noted that they are using 
both dub and the `-i` dmd compiler option as part of their build 
process. They aren't quite sure what the best build options are 
for their project, and plan to experiment to figure it out.

### Joe
Joe said the D code on his company's project is running fine; 
it's the Python they're having problems with.

### Robert
The persistent problem with Symmetry's codebase is slow 
compilation, but Robert had no new problems to report. He said he 
had recently found time to work on the Bugzilla to GitHub 
migration script. And he closed by saying, "Other than that, D is 
the best language. Period."

### Martin
Martin had released LDC 1.29.0 (based on D 2.099.1; the beta was 
based on D 2.099.0) just a few hours before and it was looking 
good. He said that D 2.099.1 is very minor compared to previous 
minor version releases of D, so he didn't expect too much trouble 
from that.

He said that for Symmetry he had run the main project and its 
test suite with the latest LDC and DMD on Linux and Windows, and 
it was looking good so far. Everything was green.

### Iain
Iain had been waylaid by covid for most of the preceding month, 
so he didn't get much done in terms of development, but he did 
get quite a few things done on the admin side.

One thing he did was to update 
[docarchives.dlang.io](https://docarchives.dlang.io/). It hadn't 
been updated since version 2.081. He rebuilt every release from 
to 2.082 to 2.098. He then reached out to Seb Wilzbach to take 
over administration of the server (and on a related note, Seb has 
since transferred the management of the dlang.io domain name to 
the D Language Foundation; thanks Seb!). As I was preparing to 
publish this, the site still hadn't been updated. The last piece 
was for Iain to gain write access to the docarchives.dlang.io 
repository. And now that's done, so the site should be updated 
not long after I publish this post.

Iain went through the release process with Martin Nowak so that 
he could learn how it's done. He didn't yet have the secrets to 
upload to the S3 servers, but he was planning to upload the 
2.100.0 beta once he got them (and [that was announced on April 
22](https://forum.dlang.org/thread/ayztzvqvpcbknbshpflv@forum.dlang.org)).

GDC was in sync with the most recent master merge of 2.099.1 at 
the time of our meeting. The branching of GCC 12 was imminent. 
His plan was to switch to the stable D frontend branch in time 
for the GCC 12 release. He has subsequently announced in our #gdc 
Slack channel that the sync is done and GCC 12 is expected on 
Friday. So this weekend you should be able to use a version of 
GDC that is current with the latest D language version. (Please 
give a big, big "thank you" to Iain for the effort he put in 
these past months and years to make that happen.)

He had been working on ImportC with Walter. A big focus was what 
to do about the preprocessor. Walter was all-in on forking 
(calling out to the "system" preprocessor, e.g., cpp on Linux), 
but Iain wasn't convinced that's the best approach. He has so 
many different toolchains set up that if the D compiler calls out 
to cpp, it won't be the correct preprocessor for a given 
toolchain he's targeting. The preprocessor is actually linked 
into GDC as a library, although it isn't being used. It might be 
an idea for GDC to try to use that, but that's something for the 
future.

Iain had also implemented all the functions in the `core.int128` 
module as intrinsics. On x86, he gets the exact same codegen as 
per native. He was planning to do more testing before putting 
that in.

### Razvan
As noted in [my summary from our meeting in 
March](https://forum.dlang.org/thread/zfmkiqwkkexeaohjsuru@forum.dlang.org), Razvan had recently been looking into reviving the "metadata" (mutable) DIP (see [his forum discussion titled "Rebooting the `__metadata`/`__mutable` discussion"](https://forum.dlang.org/thread/cmtdqpfmnodcciivlfzl@forum.dlang.org). He had been reading a lot of material and was getting pretty close to submitting a new version of the DIP. He gave us a summary of the original and why it stalled. His forum post links in turn to [another discussion from 2019](https://forum.dlang.org/thread/3f1f9263-88d8-fbf7-a8c5-b3a2a5224ce0@erdani.org) where the original DIP was discussed. Anyone interested in the details can get them there, but the gist of it is that at the time it wasn't clear how to overcome Timon's objections about the interaction of `__metadata` with function purity.

He was looking for input on his recent thoughts on overcoming the 
problem with purity. There was a bit of discussion about compiler 
optimizations for strongly pure functions (DMD used to do some, 
but Dennis had disabled them due to a bug; Iain couldn't recall 
if GDC does; Martin said LDC does not, as LLVM provides no 
mechanism for it), and some discussion about how the monitor 
field of immutable class instances is already considered mutable. 
I'll leave it to Razvan to explain his idea and what, if 
anything, he took from the discussion.

### Dennis
Dennis brought up a PR to add a reusable bitfield utility to dmd 
and use it to replace the 'FunctionFlag' enum with a `BitFields` 
struct. This was prompted by the built-in vs. library bitfields 
discussion in our March meeting, in which Andrei suggested Walter 
try a library solution and see how it pans out. It was 
subsequently merged.

He said the most egregious DIP 1000 bugs had been fixed. There 
were still some "iffy" things with nested functions, but there 
should be nothing like the miscompilation of pure functions that 
corrupt memory. He noted that Átila had resumed work on making 
DIP 1000 the default by issuing deprecation warnings. He 
mentioned one problem that had recently come up in a forum 
discussion and PR thread in the form of transitive scope. He 
didn't know the plan for that and would like to discuss that and 
other DIP 1000 design decisions with Walter. Walter was absent 
from the meeting, but Átila said the meeting wasn't the place to 
discuss it anyway. He was planning to call Walter to discuss it 
anyway and suggested Dennis join the call. I know they have since 
been in contact (if not all at the same time) to discuss this, 
but I don't know if anything has been resolved yet.

He said that the dmd test suite is pretty slow, and sometimes it 
randomly fails. He finds it frustrating and hopes someone can do 
something about it.

Finally, he wanted to make sure everyone (in the meeting and 
outside) remembers that he and Razvan are here to fix bugs. 
Looking through issues by himself, it's hard to tell which are 
most important to people. So if anyone has an issue that they 
need or want to be fixed, let Dennis and/or Razvan know. If they 
can't fix it themselves, they'll do their best to find someone 
who can.

(On a related note, please remember #dbugfix here in the forums 
and on Twitter.)

### Ali
At work, Ali hasn't had time to code in D lately. Instead, he's 
been required to assist a couple of people who developed a tool 
in Rust. That led to a couple of observations.

His first observation was that Rust has a "tuple window" thing 
that is equivalent in functionality to `std.range.slide`. A big 
difference is that in Rust, the generator function is only called 
once and its results are cached. In D, the generator is called 
multiple times and there is no caching. This led him to 
experiment with implementing a cached range algorithm that would 
allow you to do something like `map.cached.slide`, but he was 
unable to get it to work efficiently. On the plus side, the tuple 
window cache in Rust is limited to 4 elements (though it's 
scheduled to be increased to 12), which in turn limits the size 
of the window. `slide` in D is not limited in this way.

Ali had to work next to a Rust programmer for this. Ali uses 
Emacs, but he noticed his coworker was heavily reliant on 
tooling, particularly Visual Studio with rust-analyzer installed, 
and was unproductive without it. This led Ali to make a New 
Year's Resolution to start working with Visual Studio Code with D.

### Max
Max reported he had [opened a PR with some preliminary 
work](https://github.com/dlang/dmd/pull/13964) for calling out to 
the preprocessor in ImportC. This is an alternative to Walter's 
approach that calls out to a specific preprocessor. Max's 
approach is to look through a list of available preprocessors and 
rank them based on their ability to support the target. So, for 
example, if you're on Linux and want to compile for BSD but don't 
have a cross-compiler set up, it will tell you rather than 
failing blindly.

Max also reported he had [opened a PR to 
merge](https://github.com/dlang/dmd/pull/13965) LDC's time trace 
into DMD. Dennis said he finds LDC's time trace very useful. It 
had already helped him find some problem code in DMD that was 
exponentially slow. He expects that having it in DMD will help 
find other bottlenecks and may prove particularly useful in 
solving the slow compile times in template-heavy code like 
Symmetry's. Martin has analyzed Symmetry's code with time trace 
in LDC and found some wins. He also said the biggest problem with 
Symmetry's code isn't that dmd is slow, but parallelizability. 
Moving to Reggae for builds has helped with that.

Max had also rebased the branch where he was working on 
implementing named arguments. He said it's working for normal 
functions, but he's had trouble getting it working right with 
templates.

He also has [a PR that implements with 
expressions](https://github.com/dlang/dmd/pull/13947). He said he 
put it behind a preview flag, but he doesn't mind waiting to push 
a DIP through for it.

Finally, Max bumped the version of lld that ships with DMD, as 
the shipped version was about five releases behind the latest.

### Átila
Átila is on a mission to "clean house" and "make all these things 
that were supposed to be temporary go away."

One such thing is DIP 1000. He's been trying to get to a point 
where we can make it the default. Before that happens, people 
should pay attention to deprecation messages and fix up their 
code.

Another thing on his list is making `-preview=nosharedaccess` the 
default, but [it's blocked on Issue 
#22626](https://issues.dlang.org/show_bug.cgi?id=22626). He 
doesn't know how to fix that and isn't sure who does.

He also wants to get allocators and the logger out of 
`std.experimental`, as they've been there long enough.

He would rather be working on figuring out how we can make 
breaking changes without breaking anything, but these "temporary" 
things are annoying and need to be fixed first.

## Server Meeting Summary
The server meeting took place on April 29 at 14:00 UTC. The 
following people attended:

__D Language Foundation__
* Walter Bright
* Iain Buclaw
* Ali Çehreli
* Max Haughton
* Dennis Korpel
* Átila Neves
* Razvan Nitu
* Mike Parker

__Community__
* Jan Jurzitza
* Petar Kirov
* Jan Knepper
* Mathias Lang
* Vladimir Panteleev

In this meeting, we covered the requirements of several D 
services and discussed options for hosting and management. The 
goal is to establish a system in which multiple admins can be 
available to respond to outages and other problems, but only a 
handful are able to modify the servers; one into which we can 
migrate services one at a time and scale out as needed. In the 
end, we settled on an approach using Terraform, Cloudflare, and a 
VPS provider.

Vladimir and Petar volunteered to oversee the effort. They'll 
pick a VPS provider, determine which services to focus on first, 
and basically take the seed of a plan we agreed on in the meeting 
and grow it into an action plan that we can follow. I asked them 
to give us three options in terms of budget: the ideal, the bare 
minimum, and a middle road. We will have a baseline of $150/month 
available to pay for hosting. I don't know just yet how much 
we'll have beyond that initially, but I expect it will be a 
little more.

They have set themselves a deadline of one month (so the end of 
this month) to get their plans together, at which time they'll 
come back to a meeting and we'll pick the path we'll follow. At 
that point, it should just be a matter of making it happen.

## The Next Meeting
Our next meeting is a monthly DLF meeting. It's happening on May 
6 at 14:00 UTC. I currently do not have anything major on the 
agenda. If there's something you'd like to bring to the 
foundation and you can attend the meeting, please let me know and 
I'll make room for you.



More information about the Digitalmars-d-announce mailing list