> 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