new DIP47: Outlining member functions of aggregates
Jacob Carlborg
doob at me.com
Tue Sep 10 05:12:22 PDT 2013
On 2013-09-10 10:49, Joseph Rushton Wakeling wrote:
> Can you explain a bit more about how that works?
The "object" module, part of druntime defines a template with the name
"RTInfo". That template will be instantiated with each user defined type.
Currently RTInfo doesn't do anything:
template RTInfo(T)
{
enum RTInfo = cast(void*)0x12345678;
}
https://github.com/D-Programming-Language/druntime/blob/master/src/object.di#L575
If you replace that template with something like:
template RTInfo(T)
{
enum RTInfo = verifyDeclarations!(T);
}
verifyDeclarations would look something like this, in pseudo code:
void* verifyDeclarations (T) ()
{
static if (is(T == class))
{
foreach (member ; methods!(T))
{
static if (!hasDefinition!(member))
static assert (false, "The member '"
fullyQualifiedName!(T) ~ "." ~ member.stringof ~ "' doesn't have a
definition");
}
}
return null;
}
> As long as it can provide a guarantee that everything declared has a
> definition, and everything defined has a declaration -- and that they
> match! -- then I think this is probably the solution required.
>
> What I mean is -- it needs to ensure that the issue identified in a
> couple of my earlier posts will be flagged and prevented:
> http://forum.dlang.org/post/mailman.1104.1378795749.1719.digitalmars-d@puremagic.com
>
>
> However, I'm suspicious of anything that would require the programmer to
> be "virtuous" and manually ensure that those checks take place, rather
> than the checks simply being a natural part of the compilation process.
The idea is then you build a tool that "compiles" all your files which
uses druntime with the above implementation of RTInfo.
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list