any tool to at least partially convert C++ to D (htod for source
Michel Fortin
michel.fortin at michelf.com
Thu Mar 11 05:54:30 PST 2010
On 2010-03-11 05:22:38 -0500, Eldar Insafutdinov
<e.insafutdinov at gmail.com> said:
> Walter Bright Wrote:
>
>> Eldar Insafutdinov wrote:
>>> The issue is that we need it in a performance critical part of QtD.
>>> The library mixes in static constructors to initialise user-defined
>>> classes. This means that we can't use it when user code is in cyclic
>>> dependency. static constructors are very useful, but giving a
>>> possibility to override it's current behaviour would make them
>>> applicable to more use-cases(if you look into that bug report,
>>> another person was trying to use them exactly as we do, and faced the
>>> same problems).
>>
>> I hear you. I'll try to come up with a better solution.
>
> Thank you very much.
Yes, thank you.
I'd like to point out that the trick of creating a separate module to
initialize another one is not much safer than C++ static initialization.
Take for instance std.stdio which it is initialized by std.stdiobase's
static constructor. If your module import std.stdio and attempt to use
the standard input/output/error streams in a static constructor, there
is no guaranty that std.stdiobase static constructor will have been
called before yours (unless you also import std.stdiobase). It might
end up crashing depending on link order.
So it's a clever trick allowing you to bypass the safety checks, but
it's still dangerous, and it's not usable for templates and mixins.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list