What can be done to reduce executable size?
    Andrei Alexandrescu 
    SeeWebsiteForEmail at erdani.org
       
    Fri Dec 16 11:04:39 PST 2011
    
    
  
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
    
    
More information about the Digitalmars-d
mailing list