> On Jan 25, 2017, at 1:48 PM, Xiaodi Wu <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