> On Jan 25, 2017, at 2:37 PM, Jacob Bandes-Storch <jtban...@gmail.com> wrote:
> If no uses are found (which I suspect will be the case), it becomes hard to 
> also find evidence of harm other than in contrived scenarios. Perhaps 
> contrived will be all we can find.

Well, if there's no harm, having a weird corner case that doesn't hurt anybody 
is fine.  I certainly suspect that there are use cases for using a non-simple 
assignment operator there, so calling out = as a special case is a bit weird.

John.

> Anyway, this is a bit off-topic for this thread...
> On Wed, Jan 25, 2017 at 11:24 AM John McCall <rjmcc...@apple.com 
> <mailto:rjmcc...@apple.com>> wrote:
>> On Jan 25, 2017, at 1:48 PM, Xiaodi Wu <xiaodi...@gmail.com 
>> <mailto:xiaodi...@gmail.com>> wrote:
>> Given lack of evidence of harm, is it really important to make such a 
>> source-breaking change?
> 
> My first instinct is that, no, it's not important.  However, we haven't 
> actually *tried* to find any evidence of harm, so it's a bit conclusory.  If 
> someone wants to make an evidence-based argument that it's harmful and that 
> almost nobody is using it (intentionally/correctly), the balance could swing 
> the other way.  That's for someone else to prove, though, since yes, at this 
> point the bias has to be towards leaving things be.
> 
> John.
> 
>> 
>> On Wed, Jan 25, 2017 at 12:45 John McCall via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> On Jan 25, 2017, at 1:35 PM, Jacob Bandes-Storch <jtban...@gmail.com 
>>> <mailto:jtban...@gmail.com>> wrote:
>>> 
>>> Agreed, IMO it would be quite dangerous for "a ??= b" to mean anything 
>>> other than "a = a ?? b".
>>> 
>>> On another note, I don't see the value of "a? = b". I had never realized 
>>> before that this works. Is this feature actually used in the wild? Should 
>>> we consider removing it? (I could perhaps see some value if the assignment 
>>> operator were overloadable, but it's not.)
>> 
>> The core semantics (that ? on an l-value still produces an l-value) fall out 
>> from the ability to call a mutating method with a?.foo().  Once you have 
>> that, you have to decide what it means to put such an l-value to the left of 
>> an assignment operator, and we decided to make it Just Work™.  I agree that 
>> it is not a particularly useful operation in idiomatic Swift, especially 
>> with simple assignment (=), and we could consider just disallowing it.
>> 
>> It also comes up with optional properties, I think, which is something we 
>> weren't always certain we were going to ban in native Swift (as opposed to 
>> imported ObjC code, where they're a fact of life).
>> 
>> John.
>> 
>>> 
>>> Jacob
>>> 
>>> On Wed, Jan 25, 2017 at 10:28 AM, John McCall <rjmcc...@apple.com 
>>> <mailto:rjmcc...@apple.com>> wrote:
>>>> On Jan 25, 2017, at 12:47 PM, Jacob Bandes-Storch via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> Really? My observation from a quick test is that "a? = b" assigns b to a 
>>>> if a already has a value, or does nothing if it's nil. This is sort of the 
>>>> opposite of what's being proposed, which is that "a ?= b" should assign to 
>>>> a only if it does NOT have a value.
>>> 
>>> Right.  On the other hand, this does seem like a poor spelling for the 
>>> operator, given the ease of confusion.
>>> 
>>> Also, I'm finding it hard to imagine a use for this where the equivalent ?? 
>>> invocation wouldn't be *much* clearer.  It just feels like you must be 
>>> doing something backwards — "I've filled in a default value for this 
>>> variable, now overwrite it if this other value exists".  Wouldn't the 
>>> reverse generally be better?
>>> 
>>> John.
>>> 
>>>> On Wed, Jan 25, 2017 at 9:33 AM Joe Groff via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>> > On Jan 25, 2017, at 8:40 AM, Nichi Shin via swift-evolution 
>>>> > <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> >
>>>> > I’d like to propose a new operator for optional assignment in Swift.
>>>> >
>>>> > The idea is that by using this operator (e.g. by doing a ?= b), the 
>>>> > optional on the right would be assigned to the variable on the left only 
>>>> > when it has something to assign (i.e. when it's not nil).
>>>> 
>>>> `a? = b` already does this. Maybe we need a fixit to make that more 
>>>> apparent, though.
>>>> 
>>>> -Joe
>>>> 
>>>> >
>>>> > The implementation could be something as follows:
>>>> >
>>>> > /// Optional Assignment Operator
>>>> > infix operator ?=: AssignmentPrecedence
>>>> >
>>>> > func ?=<T>(left: inout T, right: T?) {
>>>> >     if right != nil {
>>>> >         left = right!
>>>> >     }
>>>> > }
>>>> >
>>>> > func ?=<T>(left: inout T?, right: T?) {
>>>> >     if right != nil {
>>>> >         left = right
>>>> >     }
>>>> > }
>>>> >
>>>> > I hope you will consider adding this on a future release of this great 
>>>> > programming language.
>>>> >
>>>> > Kind regards,
>>>> > N. S.
>>>> > _______________________________________________
>>>> > swift-evolution mailing list
>>>> > swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> > https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <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