Why using wrappers for D?

Chalix via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Oct 3 11:05:47 PDT 2016


On Monday, 3 October 2016 at 17:45:55 UTC, Jonathan M Davis wrote:
> The import statement just tells the D compiler to pull in 
> declarations for the symbols that it needs from those modules. 
> It doesn't actually compile those modules. You still have to 
> give them to the compiler (either all together or separately to 
> generate .o/.obj files) in order to actually compile them. And 
> anything that's not D (like a C/C++ library) still needs to be 
> linked in just like it would be in C/C++.
>
> In C/C++, #including is not enough to compile everything into 
> your code unless everything is in the header files (which it 
> rarely is). For the files in your project, you have to compile 
> every .c/.cpp file to generate the .o or .obj files that the 
> linker then links into your program, and for the 3rd party 
> stuff that's in a library you need to link in the library. 
> Simply #including doesn't actually bring something like curl or 
> gtk into your program. You also have to link it when generating 
> your executable.
>
> It's basically the same thing with D. Every .d file in your 
> project needs to be compiled so that it gets linked into your 
> executable, and if you want to use 3rd party stuff, you have to 
> link in the libraries just like you would with C/C++. The 
> separation is perhaps a bit less clear in D, because you 
> usually just use .d files for everything, whereas C/C++ have .h 
> and .c/.cpp as separate files. D does have .di files for the 
> cases where you need to hide your code, but they don't get used 
> often. But when you do use a .di file, that's what gets 
> imported rather than the .d file which contains the actual 
> definitions, so in that case, the separation is clearer.


Ah great, now I understand it :)
I thought, import and include would work the same way (taking all 
the code in the .h or .d file and pasting it into the other file).
But if import extracts only the definitions, it is clear, that 
you have to link against the library, or to add all the .d files 
to your source code.



A big thank-you to all repliers for making things clear :D




More information about the Digitalmars-d-learn mailing list