Import files contains implementation

Jonathan M Davis jmdavisProg at gmx.com
Fri Aug 12 01:11:19 PDT 2011


On Friday, August 12, 2011 09:59:05 simendsjo wrote:
> Why does the di files contain implementation?
> Is it to allow CTFE from calling modules?
> 
> l.d
> ===
> module l;
> int f() { return 1; }
> 
> l.di
> ====
> // D import file generated from 'l.d'
> module l;
> int f()
> {
> return 1;
> }
> 
> The documentation for this says "They can be used to hide the source
> code", but this is a bit misleading.
> http://www.d-programming-language.org/dmd-windows.html#interface_files

In order for CTFE to work, you have to have the source of the function. Also, 
if you want inlining to work, you need the source of the function. You also 
have to have the source if it's a template.

In this case, my guess is that the compiler automatically puts the source in 
the .di file if its small enough that it expects to inline it, but I don't 
know.

Regardless, the web page isn't really misleading. You're free to get rid of 
the source if you want to. So, you can use it to hide the source code as much 
as you want (except for templates, which _have_ to have their source in the 
.di file). It's just that apparently the compiler doesn't automatically hide 
all of the source that it could. You can edit them by hand if you want to hide 
more. But if it hid everything that it could by default, that would negatively 
impart performance.

It's essentially the same situation as C++ header files. You _can_ hide 
function bodies in the cpp file if you want to (except for templates), but then 
you don't get inlining. So, you choose what you do and don't put in the header 
file. It's just that in the case of .di files, there's a tool to automatically 
generate them instead of forcing you to write the whole thing by hand.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list