output minimal .di files?
Adam Wilson
flyboynw at gmail.com
Mon Jan 16 00:14:02 PST 2012
On Sun, 15 Jan 2012 03:53:05 -0800, F i L <witte2008 at gmail.com> wrote:
> Given the code, test.d:
>
> import std.stdio;
>
> export void test()
> {
> writeln("Test");
> }
>
> compiled with: # dmd -lib -H test.d
> I end up with test.lib (good so far), and test.di:
>
> import std.stdio;
>
> export void test()
> {
> writeln("Test");
> }
>
> wtf? why is test() fully represented? I thought interface files where
> suppose to be minimal, interface only structures (like C .h files). When
> I manually cut everything down to: "export void test();" everything
> still works fine, so why is DMD spitting out the implementation?
I'm assuming that your goal is to build either or static or dynamic
libraries?
If that is the case than you can assume that CTFE and inlining will not
work anyways. This is an inherent limitation of libraries and not D. What
D currently does is assume that you want everything to work, and spits out
your implementation code symbol-for-symbol. The only thing I've found that
D ever strips out of DI files is unittests. I have written a patch for DMD
that strips out non-template class/function implementations with the
understanding that CTFE and inlining will no longer work. Templated
functions and classes retain their implementations, this is in line with
the way C++ operates. Unfortunately my patch isn't well tested yet so I
haven't opened the pull required to get it included into the main line DMD
code. But it's a available from my Git account
[https://LightBender@github.com/LightBender/dmd.git] if you don't mind
building DMD yourself.
--
Adam Wilson
Project Coordinator
The Horizon Project
http://www.thehorizonproject.org/
More information about the Digitalmars-d-learn
mailing list