Am Thu, 30 May 2013 10:42:17 +0100 schrieb Iain Buclaw <ibuc...@ubuntu.com>:
> > This is more of a lazy init that won't affect start-up speed. Note: > this idea is based off what C++ (g++) does for say - static A a = new > A(); > I see. > > I don't think it would have much slow down. Albeit the first > initialisation would jump through the druntime library twice, but > there after it's a single/two instruction test. Pretty negligible - > but I'm not a speeeeeeeeed demon or freak who wants everything > compiled with -fOMG-fast. =) I'm more worried about adding many roots to the GC. The code which checks the guard variable is probably neglectable. > > > >> Though this should not be required if we have a proper TLS GC in > >> place. > > > > Do you mean Martin Nowak's shared library/TLS work? That indeed > > sounds like the proper solution. > > > > It should certainly mean that we don't have to worry about removing > roots once they've been added. AFAIK he also changed how TLS sections are looked up for the main executable. _tlsstart and _tlsend are not used anymore. Instead some mainly undocumented obscure glibc interface is used to ask the runtime linker for the start and end of the TLS section. https://github.com/D-Programming-Language/druntime/blob/master/src/rt/sections_linux.d#L122 https://github.com/D-Programming-Language/druntime/blob/master/src/rt/sections_linux.d#L164 https://github.com/D-Programming-Language/dmd/commit/313132b6e20c119fa64c6164574818421cb522ce > > > (And maybe the D community should develop a sane standard interface > > to the runtime linker to access sections. Then go lobbying all > > major libcs out there...) > > You mean binutils? :-) > > See binutils/ld/scripttempl for the ldscripts used to lay out the tls > data sections. (Note, only a few actually have a TLS section - and > only winpe defines a _tls_start__ and _tls_end__ symbol). Well the start/end symbols could be introduced in binutils linker scripts. But the elf format already has all the information about section size and the runtime linker (ld.so) knows where every section starts and it also knows its size. There's just no standard interface to receive that information. (I had a quick look at the FreeBSD runtime linker some time ago. With some C libraries you can even get the elf header, but it's all non-standard and undocumented)