27-Apr-2013 00:26, Dmitry Olshansky пишет:
Have you read the description? I gave the exact cases where regardless
of templates or no templates you do pull in the module. This is a
problem that defeat the whole goodness of generating only the code you
use (via templates). In fact I'll post about more specific problem
separately (need to gather the solid data).
Here is the example of the primary catch. Let's say you have 3 modules
a, b and the main app module m. b depends on a's constraint.
module b;
extern(C) void printf(const(char)* fmt, ...);
template canCheckIn(T)
{
enum canCheckIn = is(T : int);
}
static this()
{
printf("START b\n");
}
static ~this()
{
printf("END b\n");
}
module a;
import b;
extern(C) void printf(const(char)* fmt, ...);
void foo(T)(T value)
if(canCheckIn!T)
{
printf("FOO\n");
}
void bar()
{
printf("BAR\n!");
}
module m;
import a;
void main()
{
bar();
}
main will happily print:
START b
BAR
END b
Even though foo is not even instantiated(!) and it's the only thing in
which a depends on b (and m doesn't ever touch it).
Now multiply this be the kind of cross-import happy graph we have in
Phobos and indeed most programs are going to pull in the whole ball of mud.
--
Dmitry Olshansky