> On Feb 20, 2017, at 10:24 AM, Michel Fortin via swift-evolution 
> <[email protected]> wrote:
> 
> Le 20 févr. 2017 à 1:19, David Sweeris <[email protected]> a écrit :
>> 
>> On Feb 19, 2017, at 21:19, Xiaodi Wu <[email protected]> wrote:
>> 
>>> This is very, very interesting. Thank you so much for the text.
>>> 
>>> If I understand your take correctly, the benefits of `pure` in Swift would 
>>> be contingent on how pervasively it can be used (as it's the composability 
>>> of pure functions that gives it exponential value). And, based on your 
>>> discussion, very few functions in Swift would be compiler-provably pure 
>>> [...]
>> 
>> I think this might, at least partly, be because we can't restrict generic 
>> parameters to be value types.
> 
> That's somewhat a problem.
> 
> But think a bit about the copy-on-write containers. Because the compiler 
> itself has no notion of copy-on-write semantics, the compiler can't prove 
> that COW types behave correctly as value types. The optimizer would have to 
> make the pessimistic assumption that dereferencing the pointer is possibly a 
> dependence on external state, making the function unoptimizable. Basically, 
> any struct with a pointer (or object reference) would need to be vouched for 
> with a "trust me" attribute, or not be vouched for if it doesn't fit value 
> semantics.

So maybe we should solve this problem before tackling pure functions.

> And, as you say, generic containers value-typeness will depend on their 
> generic arguments.
> 
> But... keep in mind that for the purpose of evaluating whether a function is 
> pure (as in strongly, optimizable pure), what matters really is not the type 
> but what you do with it. `Optional<AnyObject>` is not what you would call a 
> value type, but it does behave as a value type as long as you only compare it 
> to `nil`, since you never access the object.
> 
> D doesn't make this fine-grained distinction and is fine in most cases 
> because it has transitive immutability. Swift doesn't have that, so maybe we 
> should try something a bit different.

Are there any avenues you can forsee to improving Swift such that we could have 
a similarly robust and verified `pure` as D?  In other words, is transitive 
immutability a necessary requirement to doing this or might there be other 
mechanisms that fit better in Swift, but could accomplish the same goals with 
respect to verified purity?

> 
> 
> -- 
> Michel Fortin
> https://michelf.ca
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to