The Future of D Runtime
Adam Wilson
flyboynw at gmail.com
Sun Jun 9 02:38:05 UTC 2024
On Thursday, 6 June 2024 at 18:00:56 UTC, Sebastiaan Koppe wrote:
> On Wednesday, 5 June 2024 at 23:58:14 UTC, Adam Wilson wrote:
>>
>> [...]
>>
>
> I think DRT only needs to concern itself with supporting
> language features. Anything else needs to go elsewhere.
Where then?
A runtime is a collection of code that is executed, at runtime,
by applications. The compiler doesn't execute code in the DRT
while it's compiling, so it's not really a compiler support
library. The only thing that the compiler needs to know about the
runtime is that the symbols:
1. Exist.
2. Follow the compilers emitted ABI for them so that they'll link.
The compiler is only tangentially interested in the runtime
insofar as it emits well-known symbols that are contained in the
runtime. There is nothing stopping DMD from emitting Phobos
symbols, and indeed, on a few occasions, it does. (`std.math`
IIRC) So by this definition of "Runtime" all of Phobos is part of
DRT since technically any Phobos symbol is a compiler support
symbol as well.
Which, consequently, is why Phobos and DRT are built and shipped
together. That fact should be enough to end this prattle about
keeping DRT solely for the compiler. The hard reality is that the
runtime is *far* more closely associated with the standard
library than the compiler. And it *always will be*. If somebody
wanted to link in a new runtime, the compiler would not know or
care as long as the symbols it relied on were available and
mangled the same. IIRC this is what Tango's runtime did. But if
somebody wants to try to make Phobos work with that same new
runtime ... well, I guess we'll see them year or two later with a
lot less hair.
This becomes a blocker if the goal is to make Phobos
"source-only" to ease the transition to Editions, as we *must*
move code out of Phobos and into DRT since we would no longer be
able to ensure that the Phobos symbols DMD emits are actually
compiled into the binary.
I am not proposing that we get rid of DRT or it's utility in
language feature support, only that we accept it's mission for
what it is, to be the universal system interface. It's either
that or we continue to pretend that the split between DRT and
Phobos is an actual thing.
Runtimes do not serve the compiler, they serve the applications
that the compiler builds. Yes the compiler needs to be aware of
the runtime, but that's it. I think we are trying to hard to keep
DRT "small" to make porting easier, when all we've really done is
create a situation where we have three runtimes: CRT, DRT, and
Phobos.
Mission accomplished in the most uselessly restrictive and
excessive way possible. Yay for D!
TL;DR: The runtime is far more important to libraries and
applications than it ever will be to the compiler.
So, where should all of this system interface code go?
More information about the Digitalmars-d
mailing list