On 2012-10-03 23:51, timotheecour wrote:
In my case I can't: I don't have control over the main function (it
could be written in C for example).
If you're developing a library or similar you could have a requirement
that the user need to call "Library.initialize()" before use. But of
course, that's something anyone would like to avoid.
I guess you also want to add inside the if(): "stdinImpl.handle =
core.stdc.stdio.stdin;", etc.
Right, I missed that.
I doubt the compiler can do much optimizing here, since the if won't
always be true, but probably IO is slow enough compared to a branch so
it might not matter.
That being said, templatizing std_stdio_static_this as above would avoid
branching at every single call to writeXX functions. Would there be any
disadvantage?
I have no idea. I would guess as long as "std_stdio_static_this" or the
corresponding code is run before std.stdio is used you should be fine.
You have to be careful here about threads, you don't want to have a
thread you don't know about sneaking up behind your back and starts
using std.stdio before it's initialized.
Also, I grepped for static_this, it appears this hack is only used in 2
places:
* std.stdio (=>stdiobase)
* std.process (=>processinit)
So the same template trick could be used in those 2 places.
You can write this instead:
void std_stdio_static_this2 () ()
Note the extra pair of empty parentheses. This will force the function
to be a template. I think this look slightly better.
--
/Jacob Carlborg