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