dub: how to reference a compiled package
mahdi via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 25 19:19:26 PST 2016
On Friday, 26 February 2016 at 02:49:20 UTC, Mike Parker wrote:
> On Thursday, 25 February 2016 at 21:06:59 UTC, mahdi wrote:
>> On Thursday, 25 February 2016 at 16:45:46 UTC, Chris Wright
>
>> Thanks. Is there a way to use a D library without having
>> access to it's source code? I tried `dmd -lib abcd.d` which
>> creates a static library. But still I need to specify path to
>> library's source files using -I option when compiling the code
>> that uses that library.
>>
>> So if we have just access to the library file, is it possible
>> to use it in the code?
>
> The compiler needs to know what symbols are available from any
> imports you use in your source. .di files exist to allow closed
> source projects to be distributed as binary. They are analagous
> to C or C++ header files. You could create them by hand like so:
>
> // foo.d
> struct S { int x, y; }
> void addTwo(S s) { s.x += 2; s.y += 2; }
>
> // foo.di
> struct S { int x, y; }
> void addTwo(S s);
>
> The compiler needs to know about S and its types, and it needs
> to know the signature of addTwo. The .di file allows you to
> provide that while keeping the implementation of addTwo closed.
> When foo is imported in client code, the compiler will find
> foo.di and use that instead of foo.d.
>
> However, the compiler must have the source for templates, as
> they are instantiated when they are used, not when the library
> is compiled. The same is true for any functions you want
> inlined. In the example above, addTwo can only be inlined when
> foo.d is used, since the compiler will not have the
> implementation with foo.di.
Great! Thanks.
I was looking for a feature like `jar` files in Java or
`assemblies` in C# where all compiled code and metadata/symbols
are stored together inside a single binary file.
I think same can be implemented for D language and it won't break
any code because it is not touching the language itself, but the
compiler.
Anyway, thanks.
More information about the Digitalmars-d-learn
mailing list