On 9/26/17 12:56 PM, bitwise wrote:
On Monday, 25 September 2017 at 15:12:57 UTC, Steven Schveighoffer wrote:
The answer to the last is that, yes, at the moment you need a custom runtime.

I really don't want to maintain a custom runtime just for this. It would be nice if there was a compiler flag to specify an RTInfo template to use. Or better yet, an attribute.

so this:

`
module source;
template MyRTInfo(T) { ... }
`
dmd source.d -rtinfo "source.MyRTInfo"


Or even better, this:

`
module reflection;
@rtinfo template RTInfo(T) { ... }

module test;
class Test{} // typeid(Test).rtinfo == reflection.RTInfo
`
dmd reflection.d test.d

I think there have been attempts to make the resulting rtinfo a combination of what druntime wants + whatever the type wants. But I'm not sure how far those got or the problems involved. I would expect that at some point we will need to flesh it out. It's more of an abstract concept than something anyone has used for meaningful work.

So of course, dmd could complain if you specified more than one RTInfo either way. If two static libraries were built with different RTInfo's, I don't think it would technically be a problem since every TypeInfo would get it's own rtinfo pointer anyways. Maybe something in the runtime could somehow warn about mismatched RTInfo types like it does about cyclic module dependencies.

I would expect that you could embed as many descriptors as you want inside the TypeInfo. We just have to come up with a way to store them in ROM and address them sensibly. Similar to a vtable.

-Steve

Reply via email to