Speaking from a position of total ignorance here, but I’ll do it anyway :-)

How is the implicit dynamic bridging any different from implicit static 
bridging? If I have an Objective-C method like

- (NSArray<SuctionBall>)getAllSuctionBalls

It would get translated into

func getAllSuctionBalls() -> [SuctionBall]

Since such an implicit conversion exists anyway, what’s the harm in it 
happening when you do 

let

> On Mar 3, 2017, at 10:18 AM, Joe Groff via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On Mar 3, 2017, at 9:56 AM, Tony Parker <anthony.par...@apple.com> wrote:
>> 
>> I’m concerned about the large source compatibility impact this change would 
>> have. Even if we claim that it’s only for Swift 4, migration would be 
>> difficult. Even if it were just a warning, that could be extremely noisy for 
>> large projects.
>> 
>> What do you propose to mitigate that problem?
>> 
>> I also think that before proceed with this change any further, we should 
>> have a lot more data about the impact that it has on real world applications 
>> in general. How many places use as for bridging now? What alternative 
>> approach would they use? We should see a diff of some of that real world 
>> code and see if we actually like the result.
> 
> I plan to take a look at some existing mixed-source projects to see what the 
> impact of these changes would be, using an instrumented compiler and runtime 
> to see where bridging casts occur. I'm definitely concerned about the source 
> compatibility impact, which is part of why I want to break the problem down 
> into compile-time-only and runtime-only problems. `as` is purely a 
> compile-time construct, so it's possible to recognize bridging uses of `as` 
> and map them to equivalent initializer calls as fixits, which are the most 
> reliable migration mechanism we have. Changing the runtime behavior is more 
> problematic; like Doug's recent proposal to reduce @objc inference, we're 
> going to need data to see what the impact is before moving forward with these 
> ideas.
> 
>> I’m not convinced that it is wrong, semantically, to use an as cast to 
>> indicate the conversion of a reference type to a value type. As is used to 
>> indicate type conversion. Bridging is a side effect, yes, but warning on 
>> this change may just feel pedantic without actually improving the situation.
> 
> `as` isn't generally for type conversion, it's for type *coercion*, giving 
> the type checker additional information it can't infer. If not for the legacy 
> of inducing bridging conversions, `as` wouldn't ever have any effect on its 
> own. Having `as` sometimes be semantically neutral and sometimes introduce 
> behavior compromises that meaning, since you can't trust that `as` doesn't 
> have other side effects. Aside from the bridging conversions, all other 
> conversion operations in the library are handled by initializers, so it would 
> be more consistent to do the same for explicit bridging operations. Ideally, 
> over time, the native Swift data types will be powerful enough, and the Clang 
> importer and overlays comprehensive enough, to reach the point where explicit 
> bridging conversions are rarely necessary to begin with.
> 
> -Joe
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> 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