Why do we have transitive const, again?

Mehrdad wfunction at hotmail.com
Fri Sep 23 19:58:41 PDT 2011


On 9/23/2011 7:09 PM, Jonathan M Davis wrote:
> Then the lack of logical const is really your issue, not the 
> transivity. Granted, logical const would be less of an issue if const 
> weren't transitive, but ultimately, it's the fact that there is no way 
> to alter a const variable without subverting the type system that's 
> your problem.
Yeah, so we both seem to agree that the *cause* of the problem 
(inability to have logical const, or whatever you want to call it, I 
don't really care what it's called) is the presence of transitive const. 
I'm not talking about the problem, but the cause.

> If you don't care about purity, it _is_ possible to have caching and 
> lazy loading, but it's a bit ugly IMHO.
Yeah, that's why I think we should remove the transitivity. Then this 
would be a non-issue.

> ...
No idea what you were saying since I don't know what "AA" stands for, 
sorry. :(

> So, is the fact that D's const does not allow for any kind of caching 
> or lazy loading the only issue that you're really seeing with const 
> (beyond implementation issues)?
Actually, it IS an implementation issue, not a performance/optimization 
issue.
i.e. this class reads from a terminal, and it's not like I can make it 
read at a different time, since doing so at the wrong time would cause 
it to deadlock. So I have to grab the input on the first fetch, and it's 
not like I'm doing this to optimize anything... the code simply _won't 
function_ if I don't do this.

> It _is_ an issue, and the transivity does make it worse, since more 
> stuff is const than would be otherwise, but are there other issues 
> beyond that?
See above. It's a real issue, not a performance issue.

> I think that it would be great if we could find a solution to lazy 
> loading and caching so that it works with const, but I fear that at 
> this point, that that is relegated to D3 unless someone can come up 
> with a very clever solution that is backwards compatible.
I guess that means D might not really catch on until D3? Problems like 
this come up often enough to make D kind of annoying to use...


More information about the Digitalmars-d mailing list