How can I hide implementation details when make a library

Jonathan M Davis jmdavisProg at gmx.com
Tue Sep 25 09:47:25 PDT 2012


On Tuesday, September 25, 2012 13:58:00 Daniel Kozak wrote:
> Yes, it works. Thanks a lot.
> 
> However I still dont get it, why dmd generates all sources
> instead of just public symbols and functions declarations

A number of features do not work if not all of the source is available. In 
particular, functions can't be inlined if the compiler doesn't have their 
source, and any function which is used at compile time (using CTFE - compile 
time function evaluation) needs its full source and the source of every 
function that it calls. So, in general, it's pretty crippling to not have the 
full source available. Also, templates tend to be used quite heavily in D, and 
because templates aren't actually instantiated until they're used, their 
entire source must be in the .di file regardless, making it so that you _can't_ 
hide their code (C++ has exactly the same issue). So, in general, .di files 
don't make a lot of sense.

But if all that anyone is doing is calling the functions at runtime, and it 
doesn't matter that they're not inlinable, and you don't need any of them to 
be templated (or it's okay for the few that are templated to have their full 
source in the .di file), then you can strip out the function bodies in .di 
files, and that _can_ be useful if you really need that, but pretty much no 
one's going to do that unless they have to (or just don't understand what they 
lose by doing so).

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list