> On 17 Feb 2017, at 08:59, Nicolas Fezans via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> > Not only that, but even if you pass a value type as a parameter, that value 
> > type might have reference types as ivars.
> 
> I think that arguments passed to a pure function shall be checked against 
> containing such references or objects that contains such references 
> themselves: I guess that this check could be made by the compiler.
> Programmers will then have to see whether they choose a) to go to "pure 
> value-type arguments" (i.e. not containing directly nor indirectly such 
> references) and be able to declare some of their functions as pure or b) to 
> keep these references and not declare the corresponding functions as pure.

Wouldn't we need a way to declare value semantics? Array has such references 
but has value semantics so should be fine, no?

> This seems to me to be the first and relatively easy way to solve this 
> problem. Later on I could imagine even that the compiler would be clever 
> enough to check whether the contained references are used (regardless of 
> whether it is just for a read access or also to mutate some values existing 
> outside the scope of the function itself) and if they are not used the purity 
> of the function could be validated also in that case.
> 
> 
> Nicolas
> 
> 
> 
>> On Fri, Feb 17, 2017 at 8:26 AM, Charles Srstka via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> On Feb 16, 2017, at 1:27 PM, Sean Heber via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> >
>> > Doesn’t this break down if you can pass a reference as a parameter to a 
>> > pure function? If that’s not allowed, I guess I must have missed it. Also 
>> > this seems to require the function has a return value. I suppose generally 
>> > a pure function without a return value wouldn’t make much sense - unless 
>> > you pass it a reference.
>> 
>> Not only that, but even if you pass a value type as a parameter, that value 
>> type might have reference types as ivars. So since any call to any reference 
>> type can potentially mutate it, and any call to any value type could call 
>> through to a reference type which might then be mutated, it does seem that 
>> purity is quite difficult to guarantee.
>> 
>> Charles
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to