On Mon, 02 Nov 2009 22:48:59 +0300, grauzone <[email protected]> wrote:

Andrei Alexandrescu wrote:
This question may actually belong in .learn.
What's exactly eliminated from the header generated with -H? I tried it just now and was surprised to see that the generated .di file includes the function bodies of regular (non-template) functions and methods. I was under the impression that generated headers exclude function bodies, and found documentation to support that viewpoint:
 http://www.digitalmars.com/d/2.0/dmd-windows.html#interface_files
 says:
 ============
A D interface file contains only what an import of the module needs, rather than the whole implementation of that module. The advantages of using a D interface file for imports rather than a D source file are: * D interface files are often significantly smaller and much faster to process than the corresponding D source file. * They can be used to hide the source code, for example, one can ship an object code library along with D interface files rather than the complete source code.
============
This strongly suggests that function bodies are eliminated. But what I'm seeing is that pretty much all function bodies are kept (exception: static this() functions are not), and only comments are removed.
 So what's -H really doing?

Quoting from the same link:
"[...] they are not part of the D language. They are a feature of the compiler, and serve only as an optimization of the build process."

A compiler specific hack that speeds up the build process. Especially notice how it includes inlineable functions by design, which make it relatively useless as "library headers".

 Andrei

.d and .di files are meant to be interchangeable without any impact on produced binary. I do think that -H-strip-all (including private methods etc) would be nice, though.

Reply via email to