I didn’t even know the compiler still supported these implicit conversions. So, 
+1, I guess.

Charles

> On Mar 23, 2017, at 12:35 AM, Robert Widmann via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Good evening all,
> 
> Attached is the proposal text that came out of a short discussion on Twitter 
> <https://twitter.com/dgregor79/status/844760063663259651> about squashing one 
> more case of implicit conversions in the language.  This proposal seeks to 
> remove the implicit nature of toll-free bridging in favor of an explicit 
> as-cast.  The proposal can also be read as a gist 
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f>, and the 
> most up-to-date copy may be found on swift-evolution itself 
> <https://github.com/apple/swift-evolution/pull/655>.
> 
> Cheers,
> 
> ~Robert Widmann
> 
> Explicit Toll-Free Conversions
> 
> Proposal: SE-NNNN <https://gist.github.com/CodaFi/NNNN-filename.md>
> Authors: Robert Widmann <https://github.com/codafi>
> Review Manager: TBD
> Status: Awaiting review
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#introduction>Introduction
> 
> To continue removing further implicit conversions from the language, implicit 
> toll-free bridging should be deprecated in Swift 3 and removed in Swift 4.0.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#motivation>Motivation
> 
> Swift currently allows implicit conversions between CF types and their 
> toll-free-bridged Objective-C counterparts. This was meant to maintain parity 
> with the feature in Objective-C. However, the presence of implicit 
> conversions is no longer in-line with the expectations of Swift's type 
> system. In addition, advancements in the Clang importer have made interaction 
> with imported CF and Foundation types nearly seamless - obviating the need 
> for this feature in general. For the sake of safety, and in the spirit of 
> continuing the work of SE-0072 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0072-eliminate-implicit-bridging-conversions.md>
>  and facilitating SE-0083 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0083-remove-bridging-from-dynamic-casts.md>,
>  we propose the deprecation and removal of this implicit conversion in favor 
> of an explicit as cast.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#proposed-solution>Proposed
>  solution
> 
> The implicit conversion between toll-free-bridged types shall be removed. In 
> its place, the user should use explicit ascasts to convert bewteen bridged CF 
> and Objective-C types.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#detailed-design>Detailed
>  Design
> 
> When in Swift 3 mode, the compiler shall warn when it encounters the need to 
> perform an implicit conversion. At the warning site, it can offer the 
> explicit as cast to the user as a fix-it.
> 
> func nsToCF(_ ns: NSString) -> CFString {  
>   return ns // warning: 'NSString' is not implicitly convertible to 
> 'CFString'; did you mean to use 'as' to explicitly convert?
> }
> 
> func cfToNS(_ cf: CFString) -> NSString { 
>   return cf // warning: 'CFString' is not implicitly convertible to 
> 'NSString'; did you mean to use 'as' to explicitly convert?
> }
> When in Swift 4 mode, the compiler shall no longer perform the implicit 
> conversion and relying on this behavior will be a hard error.
> 
> func nsToCF(_ ns: NSString) -> CFString {  
>   return ns // error: cannot convert return expression of type 'NSString' to 
> return type 'CFString'
> }
> 
> func cfToNS(_ cf: CFString) -> NSString { 
>   return cf // error: cannot convert return expression of type 'CFString' to 
> return type 'NSString'
> }
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#source-compatibility>Source
>  compatibility
> 
> This introduces a source-breaking change that affects consumers of APIs that 
> are explicitly taking or vending instances of bridged CF or Objective-C 
> types. However, recent importer advances have made APIs like this far less 
> numerous. In practice, we expect the source breakage to eludicate places 
> where implicit conversions were accidentally being performed behind the 
> user's back.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#effect-on-abi-stability>Effect
>  on ABI stability
> 
> This proposal has no effect on the Swift ABI.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#effect-on-api-resilience>Effect
>  on API resilience
> 
> This proposal has no effect on API resilience.
> 
>  
> <https://gist.github.com/CodaFi/fc6fa3aac64c4b1deffd1434a37e295f#alternatives-considered>Alternatives
>  considered
> 
> Do nothing and continue to accept this implicit conversion.
> _______________________________________________
> 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