On 06/18/12 16:41, deadalnix wrote:
> Le 18/06/2012 16:28, Artur Skawina a écrit :
>> It's fine, if you view a delegate as opaque.
>>
> 
> No it isn't. You cannot ensure transitivity anywhere. This have obvious, and 
> severe drawback for concurrent programing (implicit sharing is back) and GC 
> performances (GC can eb crazy fast when it come to transitive immutable data, 
> see OCaml's GC performances for instance).
> 
>> 'this' being const does not preclude accessing the object that 'this'
>> points to via another, mutable, reference.
>>
>> Consider the alternative - you'd have to forbid storing any delegate
>> with a non-const non-value argument inside any object.

So how would you like to handle this? And, no, allowing only the cases
that /can/ be statically checked is not ok - it would result in black
magic - delegates would be accepted or not depending on the contents
of the object (think templates and composition).

>> And "breaking" const would then _still_ be possible and trivial.
>>
> 
> No, and your example don't demonstrate that in any way. Transitivity is 
> maintained in the example below, because g isn't a member of s, and if it 
> were, then the example would break at compile time.

The word "breaking" is in quotes for a reason. Const is not an immutability
guarantee. If you treat delegates as opaque then there's no practical
difference between using them or accessing the data via another external
reference.

> purity is another beast altogether.

D's "weak pure" can help; I just don't like the redefinition of the term
"purity"; another name for "weak purity" would be better.

artur

Reply via email to