another cool RTInfo trick - i want in runtime
Adam D. Ruppe
destructionator at gmail.com
Thu Jan 16 16:04:41 PST 2014
On Thursday, 16 January 2014 at 20:13:29 UTC, Jacob Carlborg
wrote:
> Does this only work once? Say I have two libraries that use
> this technique, would that work?
No, then you'd get complaints about the module being defined in
two files. This would be a once-per-project thing.
Libraries however could provide helper functions with
instructions for the user to call them in their project file. For
example
module my.serialization;
mixin template SerializationAdditionToTypeInfo(T) {
Whatever serialize() { ..... }
}
and then the user would open up their magic file
module core.config; // BTW this name is just because it was on my
mind from another discussion with it for enabled features
template CustomRtInfo(T) {
import my.serialization;
mixin SerializationAdditionToTypeInfo!T;
// you can also do other library's stuff here
}
hmmm Vladimir might be right that the custom info thing would be
better done as a mixin template, then we could throw all this
right in there and maybe build the whole class. I've gotta try
it, I'm not sure yet.
> No, not yet. As far as I know, the idea was to use RTInfo to
> collect and store type info for a precise GC.
Yeah, RTInfo is one of the most potentially cool things that has
sat untapped for a long time.
> I have had a different idea for a solution to this problem for
> a while. That is, add a new manifest constant to object.d,
> called rtInfo. This will act like a UDA. Any template with the
> object.rtInfo UDA attached to itself will behave just as RTInfo
> does today.
I think that would need compiler support though and might not
work as well when compiling two files separately since then part
of the rtinfo wouldn't get checked. True, here you'd have to
include the config file each time you compile a file, but at
least that bit is centralized so easier to manage.
> An idea for storing data in TypeInfo is to create an
> associative array. The keys would be the fully qualified name
> of the template, in this case
> "foo.check_virtual_methods.CheckVirtualMethods". The values
> would be whatever the template evaluates to. There's one
> problem with this, the associative array would need to be built
> at runtime due to separate compilation.
Yeah, I've played with this idea before too, it is definitely
doable today.
More information about the Digitalmars-d
mailing list