On 10/03/2016 07:19 PM, Chalix wrote:
If I "import foo;" in my project, it will be compiled alongside.

Not necessarily. dmd won't compile foo unless you tell it to by putting foo.d on the command line. If foo is only imported, dmd parses the file but it doesn't compile it.

So
there is no need for an extra library.

You don't *need* the library. You can just compile the file together with the rest of your program, yes.

When you do precompile to a library, you can skip the compilation later. That can save time.

And you can shorten the distributed D source files to just the function signatures, like with header files in C. For this, the compiler recognizes the .di filename extension. This can be used to somewhat protect closed source code.

And then there are shared libraries, which are loaded at run time. Their code is not included in the executable, so you get a smaller file. Makes sense with popular libraries that are used by many programs.

Same should be for wrapfoo.d. If
I "import wrapfoo;", I should just need the C-library "foo", and no
D-library "food" right?

If wrapfoo is really just a binding, i.e. it provides only function signatures and no implementation, then there's no point in compiling it to a library.

Otherwise, if wrapfoo actually implements something of its own, it can make sense to compile it to a library. Just like with every other piece of code.

To have a more practical example, I looked up the "header" of the GtkD
gtk/Main.d file. There are functions exactly like you described:

public static void init(ref string[] argv)
    {
        int argc = cast(int)argv.length;
        char** outargv = Str.toStringzArray(argv);

        gtk_init(&argc, &outargv);

        argv = Str.toStringArray(outargv, argc);
    }

This function wraps the C-like gtk_init function to a D init function.
The gtk_init function is the function from the GTK+ library, which is
loaded in the gtkc/gtk.d file:
Linker.link(gtk_init, "gtk_init", LIBRARY.GTK);
Linker and link are defined in the gtkc/Loader.d

So, why is it not enough just to "import gtk.Main"? What kind of code is
inside the gtkd-3 library?

If the GtkD files contain all the implementations (not just signatures), then you don't have to build/use the library. You can just compile the GtkD source files along with your program, and link with the C library.

Reply via email to