assume, assert, enforce, @safe

Kagamin via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 3 02:44:36 PDT 2014


On Friday, 1 August 2014 at 16:04:21 UTC, Daniel Murphy wrote:
> "Johannes Pfau"  wrote in message 
> news:lrgar7$1vrr$1 at digitalmars.com...
>
>> Do you know if linkers actually guarantee that behaviour? 
>> AFAICS dmd
>> doesn't do anything special, it always emits weak symbols and 
>> just calls
>> gcc to link. The linker usually uses the first symbol it sees, 
>> but I
>> have not seen any guarantees for that.
>
> Yes, they do.  Or at least, it's the classic linker behaviour 
> and I expect they all implement it.  It's relied upon for 
> nofloat and a few other things. It's one of the reasons linkers 
> are hard to parallelize.

Though your linker specification is not the same as Johannes said.

>> Also what happens if your main application doesn't use the 
>> template,
>> but two libraries use the same template. Then which instances 
>> are
>> actually used? I'd guess those from the 'first' library?
>
> Well, the first one that it encounters after getting the 
> undefined reference.

That's just how ld ended up working, and it's known to be pretty 
stupid in comparison with other linkers. And it's used rather 
stupidly, e.g. gcc just repeats libs several times to ensure ld 
sees all symbols it needs.

> eg
> module application
> {
> undef x
> ...
> }
>
>
> lib1:
> module a
> {
> undef tmpl
> def a
> }
> module tmpl
> {
> def tmpl
> }
>
> lib2:
> module x
> {
> undef tmpl
> def x
> }
> module tmpl
> {
> def tmpl
> }
>
> Here nothing that the application references will cause the 
> tmpl in lib1 to get pulled in, but when it processes lib2 it 
> will pull in x, and then tmpl.

lib2:
module x
{
undef tmpl
def x
}

phobos:
module tmpl
{
def tmpl
}

Then tmpl is picked from phobos instead of your code. Template 
emission optimization is a simple tool: if you realistically link 
against a module, which already has an instantiated template, 
template emission can be skipped and the linker will reasonably 
link whatever it finds.


More information about the Digitalmars-d mailing list