> On Nov 3, 2016, at 10:04 AM, Haravikk via swift-evolution 
> <[email protected]> wrote:
> 
> To avoid hijacking the guard let x = x thread entirely I've decided to try to 
> write up a proposal on type narrowing in Swift.
> Please give your feedback on the functionality proposed, as well as the 
> clarity of the proposal/examples themselves; I've tried to keep it 
> straightforward, but I do tend towards being overly verbose, I've always 
> tried to have the examples build upon one another to show how it all stacks 
> up.

FWIW, we have specifically considered something like this proposal in the past. 
 You didn’t mention it, but the ?: operator is a specific example that 
frequently comes up.  People often expect to be able to do something like:

        … = foo is B ? foo.bMethod() : …

which is the same sort of flow sensitive type refinement as you’re proposing 
here.  This topic also came up in the design discussion around #available 
(which shipped in Swift 2, but was discussed much earlier), because unavailable 
decls could be available as optionals when not specifically checked for.

This is just MHO, but while I have been in favor of this in the (distant) past, 
I became convinced that this would be a bad idea when it comes to code 
maintenance over the long term.  With our current (intentional shadowing based) 
design, you can always jump to the definition of a value to see where it was 
defined, and definitions always specify a type.  Introducing flow senstitive 
type refinement breaks this model because the type of a decl depends not just 
on its declaration, but on a potentially arbitrary number of imperative checks 
that occur between the declaration and the use.  This can make it much more 
difficult to understand code.

-Chris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to