D Language Foundation August 2023 Monthly Meeting Summary
Mike Parker
aldacron at gmail.com
Tue Aug 22 12:59:12 UTC 2023
The D Language Foundation's monthly meeting for August 2023 took
place on the 11th. At just under 35 minutes, it was our shortest
monthly meeting to date.
## The attendees
The following people attended the meeting:
* Walter Bright
* Ali Çehreli
* Martin Kinkelin
* Dennis Korpel
* Mathias Lang
* Átila Neves
* Mike Parker
* Adam D. Ruppe
* Robert Schadek
* Steven Schveighoffer
## The summary
### Me
I had nothing new, other than to say that DConf planning was on
track.
### Adam
Adam had nothing for us this time.
### Robert
Robert said he was happy. Dennis asked if the compiler was fast
enough (as regular readers of these summaries may know, Robert
often says the compiler is too slow). Robert said it's still
slow. He just wanted to see LSP support in the compiler and take
all the good things.
Walter noted he'd been working on improving compilation speeds.
He'd realized that the compiler was being compiled with
exceptions, so he'd been working on making it compile without
exceptions to see what effect that had on speed. It might be a
small difference, but every little difference helps.
Adam said his library compiled in half a second. Robert said that
was still too slow. His work project didn't compile in half a
second. He said his goal was that by the time of the key-up event
after pressing 'Enter' on Ninja or whatever build tool/compiler
he's using, it should have already restarted the application.
Átila agreed that half a second was too long.
Adam brought up D1. An old game he wrote back in 2007 compiles
and links in 10 milliseconds. If you looked at a big chunk of the
difference between D1 and D2, `object.d` back then was around 600
lines. Now it was much bigger, and that adds up. Walter said that
he was a bit upset with the state of `object.d`. It was supposed
to be a minimal thing and had turned into a kind of garbage dump
somewhere along the way.
### Steve
Steve said that Dennis had been doing a fantastic job with his PR
on the compiler part of static associative array initialization.
Steve thought it was about ready to go if someone could push the
button. He didn't want to be the one to push it, because he
didn't know the compiler code very well and couldn't vouch for
its correctness. ([The PR is still
open](https://github.com/dlang/dmd/pull/15468) as I write.)
### Dennis
Dennis said he'd been working on that AA PR, but had nothing else
to report. He still had some other things to pursue, like looking
at pattern support for the deprecation (-d/-de/-dw) and obsolete
warning (-wo) switches, as well as the `standalone` attribute or
pragma for static constructors.
([In our July
monthly](https://forum.dlang.org/thread/amsduzcnbgvptaxjtlcn@forum.dlang.org), Adam proposed a means to annotate static constructors that could make them independent of cycle detection. [In a subsequent planning session](https://forum.dlang.org/thread/vccxtwaaxqxxjojgxbhj@forum.dlang.org), we agreed to implement it. Since the August meeting, [Dennis has submitted a PR](https://github.com/dlang/dmd/pull/15537) for the `@standalone` attribute, but in the PR discussion thread, Walter thinks it should be a pragma.)
### Martin
Martin said the bump to version 2.104 of the frontend went well
on the LDC side and was quite painless.
Next, he had an interesting side note inspired by [a forum post
he'd
seen](https://forum.dlang.org/thread/ofbvqasfvxylbxxpwhja@forum.dlang.org) about getting LDC to work on a 8-bit AVR platform. He'd looked into it and found it an interesting question in terms of whether and how we want to support architectures with pointer sizes less than 32 bits. Currently, the frontend has a hard-coded limit: `size_t` and `ptrdiff_t` are either 32 or 64 bits, nothing lower than that. It's a frontend check, and the definitions in DRuntime directly depend on the compiler's internal type because they use the `typeof` expression.
He had tried to make the frontend accept 16-bit and 8-bit
`size_t` and `ptrdiff_t`, but doing that bumps up against the
integer promotion rules. The promotion rules can work in some
specific cases when using a smaller `int`, but when you have
something like the length of a slice and do a little plus one or
minus one, that's a problem. You need to cast it. So either we
need to change dealing with the promotion rules in this regard,
try to mimic C++ in this regard, or hopefully do something
better. He said Adam had proposed something in a past discussion
that would handle it generically so it's still target independent.
Walter wondered if Rust supported less than 32-bit compilation
and what compromise they made for that. Martin said he wasn't
sure. He'd only checked C and C++. Robert looked it up and found
that Rust has a tiny bit of support for 16-bit MSP340, but it's a
big asterisk and everything else is 32 or 64.
Martin wasn't sure if it was even worth looking into these
architectures, because he had no idea how long they'd be around.
For low power consumption, even if you're playing a few years
ahead, he thinks it's going to be 32-bits even for those very
small and power-efficient sensors, or whatever. But he couldn't
look into the future, so he had no real idea.
Walter said when he'd designed D, he thought 16-bit architectures
were dead and everybody would be using embedded 32-bit
processors. But that was a huge simplification. There was so much
trouble in C from the ints not being a predictable size. Just
endless problems with it and suffering because of it.
### Mathias
Mathias had nothing to report.
### Ali
Ali had mentioned [in our July quarterly
meeting](https://forum.dlang.org/thread/jzlympfqmwckaiuhqoiz@forum.dlang.org) that his company (Mercedes Benz Research & Development North America) was looking for a D programming intern. He'd since contacted Mike Shah at Northeastern University. As an example of industry/academia collaboration, Mike had recommended a strong candidate, and the company had already hired him. They planned to bring on another intern who comes with a good recommendation. So the D team is increasing to three people.
Ali wanted to expand his team to be more like a tools team, like
a wildcard team working on multiple different things inside the
company. The new candidate agrees. So they were expanding and
they were working on something he couldn't yet provide details
about.
### Átila
Átila had been busy with Symmetry stuff, so had nothing to talk
about this time.
### Walter
Walter said he'd thought about Robert's observations that until
we have the compiler as a language server or a library, we're
going to be in trouble. So he'd been going through the compiler
frontend and fixing it so that it's much more amenable to having
DMD as a daemon.
He'd made quite a number of changes for that. Some of the PRs
were still sitting there, waiting to be pulled. The idea was to
look at the subsystems of D and remove their dependencies on
global state, and dependencies on the environment and the
operating system, so that they have a simple entry point where
one function takes all the parameters it needs, does its
operation, and returns data. Then the caller can decide whether
to write a file or what to do with error messages, and so on.
He said that work was kind of satisfying when he got a piece set
up like that. The error sink had been his first attempt in that
direction. The lexer and parser were now capable of being
divorced from the rest of the compiler and are restartable. It
also means the LSP daemon or whatever will be able to be
multi-threaded, because you can be doing multiple compiles at the
same time with this setup. He's still got a ways to go, but it's
proceeding.
He was also looking at redefining the interface to the glue code,
so that should make Iain's and Martin's lives a little easier.
Martin said he wasn't so sure. He thought the interface in its
current state was absolutely fine.
Walter said he'd submitted numerous PRs to remove all of the
external dependencies from the documentation generator, and that
was getting close to being done. He had separated out the macro
processor so that it was now standalone. That's the sort of thing
he'd been working on.
He saw this as a sort of existential thing for D. He had come
around to Robert's point of view and felt it was important to get
this moving. Razvan wasn't in the meeting, but Walter was curious
about his thoughts about all of this since he'd been working on
DMD as a library. He asked Robert if the work needed for both DMD
as a library and the LSP server was the same.
Robert said DMD as a library is a big building block to build the
LSP, but there was more to it in terms of building a server that
takes commands, runs the compiler, and returns the information as
JSON. The compiler library is a big part of that. His fingers
were crossed that the rest was just glue. He thanked Walter for
working on this. Walter said Robert should be thanked for making
the observation that gave him the impetus to get this done and
realize its importance.
We then fell into a bit of side chat for a few minutes about
GitHub handles vs. real names and how confusing it can be when
they differ, and how the programming world had changed in terms
of new programmer expectations.
Then Walter thanked Steve and Dennis for working on the static AA
initialization. For a long time, he'd thought it was completely
impractical. Steve had convinced him it could be done reasonably.
It was a nice improvement that didn't need anything different
because it was just turning on something that hadn't worked.
Steve said there was a note in the spec saying this was an
intended feature that wasn't implemented, so we could finally
remove that. He said that Dennis was doing a great job. He
sometimes felt that every time he brings up something that's
wrong, Dennis has a PR to fix it a day later.
Finally, Walter had a question for Mathias about `-preview=in`.
He remembered that we had discussed in a meeting that the feature
should always pass by reference, but when he looked at the
implementation, he found that it hadn't been changed. It was
still taking the original approach of passing by value or by
reference depending on the case. Mathias remembered this
conversation and that we'd agreed to change it, but he had just
never gotten it done. He said he remembered Martin saying he'd
keep the current behavior for LDC. Walter asked if Mathias wanted
him to make the change. Mathias said he'd do it, and he'd do it
in a way that didn't prevent LDC from doing what they want.
Walter recommended Martin make the change for LDC, as there was a
solid reason for the change. Martin said they'd have to disagree
on this point. It was a feature he would have loved to see 10
years ago, and he was very happy Mathias had implemented it. He
wasn't going to dump it, but he would probably put it behind a
switch to enable or disable it. It wasn't ideal, but he liked
this feature very, very much.
Walter said it was a reliability issue. If it's always by
reference, it's predictable behavior. He thought it was extremely
important to have predictable and portable behavior. Martin
reminded him they'd had this discussion quite some time ago. He
was still of the strong opinion that once you regard every such
occurrence as a reference, or treated it like it should work for
a reference, too, but don't depend on its identity, you're fine.
And that's 99.99% of all code. And it was a very nice performance
thing. He didn't know of any other language having such a
feature. For LDC, it was going to be well-defined. Not
implementation-defined, but target-dependent.
Mathias said that he agreed with Martin. However, it was fine to
just make DMD always pass `in` parameters by reference. That was
the best compromise we could come up with when we last discussed
it.
Ali wanted to confirm that this feature solved the problem with
rvalue references. If you want to accept rvalues, you just use
`in`. Mathias said it did.
Mathias said he'd seen that the only thing preventing preview
`in` from being finished was [a bug in the
frontend](https://issues.dlang.org/show_bug.cgi?id=23785) that is
tied to another bug that is unrelated to preview `in`. It wasn't
an easy one. It was something to do with CTFE, but he hadn't had
the time to dig into it. So it was still blocked on that. He said
it was well-defined, he just needed someone to unwind the issues.
Dennis said he would look into it.
Martin thought that issue was blocking one of his old PRs. He
couldn't remember which PR, but he was sure it was the same CTFE
issue. The problem was that temporaries in statements in CTFE
don't get destructed at all. There was a chorus of "That's bad".
Mathias said that getting the same destruction behavior as
runtime is not trivial.
Walter said he could see that was going to be a tricky one. The
CTFE engine was a horrible mess.
Dennis wondered if this would break code once destructors started
running in CTFE. A lot of destructors just call `free`. Martin
noted that any destructor calling `free` would be calling it on
something that had to be malloced first. And that wasn't doable
at CTFE either. The current behavior of just silently skipping
all of the destructors was as wrong as it could get. It couldn't
be any more wrong.
Steve said that if you were going to run `free` in a destructor
in a type that's going to be used at CTFE, you'd already have an
`if(__ctfe)` branch to account for that where you call `malloc`.
You'd have the same in the destructor. This is nothing new.
## The next meeting
As we wrapped up, I asked if we should have a planning session on
the 18th. It was our only real opportunity to have one before
DConf. But given that most of us had stuff going on preparing for
DConf, or were already traveling, I suggested we not do it. But I
left it to the group to decide, and we decided not to do it. In a
previous planning session, we'd decided to hold a session at
DConf to start talking about long-term plans, so that's our next
one.
Our next monthly meeting is going to be on either September 8th
or 15th. We'll figure that out at DConf next week.
More information about the Digitalmars-d-announce
mailing list