On 12/16/11 12:40 PM, Jonathan M Davis wrote:
On Friday, December 16, 2011 11:45:42 Andrei Alexandrescu wrote:
I am pretty sure they don't need static this(). Only last night I
removed static this() from core.time.
I don't know how you could do that in core.time, since ticksPerSec and
appOrigin are immutable and have to be set at runtime. How on earth can you do
that without a static constructor?
std.datetime has the same problem with the added fun of having to avoid
breaking purity, because the functions for getting the singletons are pure.
This goes back to the issue of lazy initialization. Today you need a
cast to do that. Here's my code:
static @trusted @property long ticksPerSec() pure nothrow
{
return (cast(immutable(long) function() pure nothrow)
&ticksPerSecImpl)();
}
static @property immutable(long) ticksPerSecImpl() nothrow
{
static long result;
if (result)
{
return result;
}
... initialization ...
return result;
}
The presence of the cast is unsightly but the code does something
unusual (modifies what looks from the outside like a constant) so it is
justifiable, particularly since we're talking about the language's core
library.
Andrei