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