> On Sep 6, 2016, at 5:11 PM, Douglas Gregor <dgre...@apple.com> wrote: > >> >> On Sep 6, 2016, at 4:50 PM, Joe Groff <jgr...@apple.com> wrote: >> >> >>> On Sep 2, 2016, at 5:17 PM, Charles Srstka via swift-evolution >>> <swift-evolution@swift.org> wrote: >>> >>>> On Sep 2, 2016, at 5:50 PM, Douglas Gregor via swift-evolution >>>> <swift-evolution@swift.org> wrote: >>>> >>>> The goal of the review process is to improve the proposal under review >>>> through constructive criticism and, eventually, determine the direction of >>>> Swift. When writing your review, here are some questions you might want to >>>> answer in your review: >>>> >>>> • What is your evaluation of the proposal? >>> Strong -1 as is. >>> >>>> • Is the problem being addressed significant enough to warrant a change >>>> to Swift? >>> Not only do I not believe the problem is significant, but I believe that >>> the proposal *introduces* a new problem which *is* significant, which is >>> the accidental passage of optional arrays to Objective-C. With the existing >>> behavior, such mistakes are immediately obvious as Objective-C receives an >>> opaque object that it cannot use (and probably soon crashes), so they are >>> unlikely to make it past QA testing. For many other cases, particularly >>> when nil is encountered in an array only rarely, this is likely to cause >>> strange and hard-to-debug problems at runtime when NSNull pops up where >>> code wasn’t expecting it (which I would expect to be most Objective-C >>> code), and it might not be detected until after the product ships. In this >>> way, this proposal creates a problem very similar to the problem that Swift >>> was trying to solve with optionals in the first place. >> >> This is a fundamental problem with `Any` in Swift and `id` in Objective-C. >> There's no way to statically prevent misuse of such APIs. We can, and IMO >> should, provide warnings when Optionals are used in unconstrained contexts >> without either being unwrapped or explicitly annotated somehow. That doesn't >> conflict with this proposal, though. > > I *think* Charles is saying something slightly different here, and it’s a > viewpoint I hadn’t considered before. > > We agree that there should be some kind of diagnostic when putting an > optional into an Any, because it’s probably not what the user intended. And > we know it can happen in ways we cannot diagnose statically, so the > diagnostic won’t be perfect. I think Charles is saying that, when this > happens, we don’t *want* our Objective-C code to be able to query the value > in that optional: in other words, it’s effectively a programmer error to > treat such objects as anything more than completely-opaque objects that get > passed around any perhaps dealt with properly in Swift code itself.
I'm not sure I agree with this sentiment. It feels contrary to what you get when you put an Optional in an Any in Swift, since we consider Optional to dynamically be a supertype of its payload: let x1: Int? = 1 let x2: Any = x1 print(x2 as! Int) // prints 1 -Joe _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution