How can I hide implementation details when make a library

Daniel Kozak kozzi11 at gmail.com
Wed Sep 26 02:10:59 PDT 2012


On Tuesday, 25 September 2012 at 17:54:39 UTC, Jonathan M Davis 
wrote:
> 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


Thanks for explanation.



More information about the Digitalmars-d-learn mailing list