Possible way to achieve lazy loading with const objects

Timon Gehr timon.gehr at gmx.ch
Sat Sep 24 10:53:15 PDT 2011


On 09/24/2011 07:21 PM, Peter Alexander wrote:
> On 24/09/11 12:47 PM, Jonathan M Davis wrote:
>> On Saturday, September 24, 2011 12:19:33 Peter Alexander wrote:
>>> Lazy loading and caching are the same thing.
>>
>> No. Caching is more general. Lazy loading is explicitly one load and has
>> different characteristics, whereas is caching can have multiple loads.
>
> Yes, you are right. Sorry.
>
>> The problem with this is that with a single load, you can guarantee
>> constness,
>> but once you have multiple, you can't. Unless you can find a mechism
>> which
>> _guarantees_ logical constness while changing the variable multiple
>> times,
>> then you can't guarantee constness, and it doesn't work. Also,
>> whatever the
>> mechanism is, it _has_ to work in the face of immutable, which may or
>> may not
>> be harder with a more general caching mechanism.
>>
>> This particular solution jsn't even _trying_ to solve the caching
>> problem. I
>> seriously question that that's at all solvable without breaking const.
>> The
>> whole reason that this could work is because it does the load only
>> once, which
>> therefore guarantees that the value never changes and therefore never
>> breaks
>> const. This is only attempting to solve the lazy-loading issue, not the
>> general caching issue.
>>
>> If you can come up with a way to do general caching without breaking
>> const,
>> then that's great. But all I've been able to come up with is a
>> potential means
>> of doing lazy loading.
>>
>> But really, my real question here is whether this scheme is really
>> feasible or
>> whether I've missed something. If it's feasible, then _maybe_ it's
>> possible to
>> build on it somehow to come up with a general caching mechanism (though I
>> doubt it), but if it's _not_, then obviously this sort of approach
>> isn't going
>> to be able to do a single lazy load, let alone be expanded somehow to
>> make
>> general caching possible.
>>
>> - Jonathan M Davis
>
> I think your approach to lazy loading works.
>
> However, I'm not sure I see the point of just allowing one kind of
> enforced logical const. Logical const can't be enforced in general, and
> I think in this case a partial attempt is as good as no attempt.

I disagree. Lazy values are useful for many purposes.





More information about the Digitalmars-d mailing list