> On Mar 16, 2017, at 3:27 PM, Tony Parker <anthony.par...@apple.com> wrote:
> 
> 
>> On Mar 16, 2017, at 1:24 PM, Matthew Johnson via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>>> 
>>> On Mar 16, 2017, at 2:58 PM, David Hart via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> 
>>>> On 16 Mar 2017, at 19:34, Zach Waldowski via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>> On Thu, Mar 16, 2017, at 02:23 PM, Matthew Johnson via swift-evolution 
>>>> wrote:
>>>>> I don’t have an example but I don’t see a problem either.  There are two 
>>>>> options for specifying the return type manually.  We can use the 
>>>>> signature you used above and use `as` to specify the expected type:
>>>>> 
>>>>> let i = decode(.myKey) as Int
>>>> 
>>>> The awkwardness of this syntax is exactly what I'm referring to. Would a 
>>>> beginner know to use "as Int" or ": Int"? Why would they? The "prettiness" 
>>>> of the simple case doesn't make up for how difficult it is to understand 
>>>> and fix its failure cases.
>>>> 
>>>> Any official Swift or Foundation API shouldn't, or shouldn't need to, make 
>>>> use of "tricky" syntax.
>>> 
>>> Two arguments:
>>> 
>>> 1) Most of the time, you will be setting the return value of decode into a 
>>> typed property and will not need ‘as’.
>>> 2) Even when you do need it, its not tricky syntax: it’s the official way 
>>> to direct the type inference engine in Swift.
>> 
>> +1 to both of David’s points.  Needing to explicitly resolve ambiguity 
>> during decoding is pretty rare.  When necessary the syntax is perfectly 
>> reasonable.  Swift users who don’t understand single statement inference 
>> works and how to guide the inference engine should learn about these topics 
>> sooner or later.  It won’t be a hard topic to search if a user runs into 
>> trouble either.  
>> 
>> Nevertheless, if the Foundation team is strongly opposed to this many of us 
>> will just write our own wrappers.  This isn’t hard but it makes Swift code 
>> less consistent throughout the community.  Supporting consistent usage 
>> throughout the community seems like a reasonable goal to me.  IMO that means 
>> not leaving obvious expressivity gaps that are easy to fill.  In this case, 
>> there is a very good reason why we prefer subscripts and return type 
>> inference.  It makes our code much more clear by omitting a bunch of 
>> needless and noisy words (which is one of the principles of the API Design 
>> Guidelines).
>> 
> 
> Hi Matthew,
> 
> While fully acknowledging that the proposed API adds some “wordiness", I 
> would also like to point out that the Swift API guidelines also explicitly 
> state a goal to avoid overloading on return type:
> 
> "Lastly, avoid “overloading on return type” because it causes ambiguities in 
> the presence of type inference.”

Fair enough.  I think that’s *usually* a great guideline.  However, in this 
specific use case I strongly support return type inference as a design that 
increases clarity while ambiguity is very rare in practice.  In any case, it 
sounds like the Foundation team has a pretty firm opinion on this topic.  I’ve 
offered my two cents and will let it drop now. :)

> 
> - Tony
> 
>>> David.
>>> 
>>>>> If we don’t support this in Foundation we will continue to see 3rd party 
>>>>> libraries that do this.
>>>> 
>>>> The proposal's been out for less than 24 hours, is it really productive to 
>>>> already be taking our ball and go home over such a minor thing?
>>>> 
>>>> Zach Waldowski
>>>> z...@waldowski.me <mailto:z...@waldowski.me>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> 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

Reply via email to