Linker-hacking out the D runtime
Mike via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Dec 20 03:24:02 PST 2016
On Monday, 19 December 2016 at 19:53:06 UTC, Iain Buclaw wrote:
> The compiler doesn't actually generate any code that peeks
> inside TypeInfo. It only generates the reference to the right
> typeinfo to pass to library runtime functions - or on request
> via typeid(). It doesn't actually care about the data stored
> inside. And that's the angle I've taken when laying out the
> actual data - if you provide the fields we want to populate,
> then we'll populate them. If you omit a few, then the compiler
> won't bother with them. Because at the end of the day, it's
> druntime library that uses and makes sense of the TypeInfo data
> provided. The compile just says: "Well, this is as much as I'm
> willing to tell you about the type."
Ok, that's interesting, but what if you don't want TypeInfo at
all? Can you omit the TypeInfo structure entirely from object.d?
Or perhaps you still need to declare it in object.d, but since
the compiler doesn't find any fields to populate, it results in
an empty struct? I'd really hate to have to add empty
TypeInfo_XXX classes to my object.d though.
I'm still wondering about what the programmer would see if they
tried to do a dyamic cast (for example) and there was no (or an
incomplete) TypeInfo in the runtime.
You see, when I started with D, I had a grand plan that I could
create a product like Arduino. I would provide a PCB and an
accompanying API/SDK to my customers, and they would do the
programming. I would have wanted them to have a polished
experience when programming my product, so if they were doing
something that wasn't supported by the platform, they would
receive a friendly compiler message telling them so.
I thought that this would be possible if the compiler resolved
druntime symbols at compile-time in the same way it does any
other library: by reading .di header files. If a symbol was not
found, they would get a compiler error telling them so. I could
also add templates, static-ifs, and static asserts to the .di
files for, not only generating highly optimized code, but also to
notify the programmer with more helpful and precise compile-time
messages.
I also envisioned products with very high resource constraints
(like ARM Cortex-M0) without threading, but for high performance
microcontrollers (like ARM Cortex-M4/7) I could leverage D's
built-in understanding of thead as my RTOS. Each product would,
therefore, have very different druntime implementations.
I think what you're proposing here by tagging fields is certainly
better than what we currently have, and would be desirable for
other D users (especially those of late), but does it scale well
if I want to deliver a polished programming experience (with
optimized code generation) to my customers when my platform only
has a subset of D's rich feature set?
Mike
More information about the Digitalmars-d-announce
mailing list