[swift-evolution] Move placement of 'throws' statement
Jeremy Pereira
jeremy.j.pereira at googlemail.com
Thu Jan 5 04:01:17 CST 2017
> On 4 Jan 2017, at 20:39, thislooksfun <thislooksfun at repbot.org> wrote:
>
> I still personally prefer the `throwing` prefix, but the way it currently is also works just fine, I'll just have to adjust.
Yes, if error throwing had come up on Swift Evolution before it was implemented, I would have been in that camp too, mainly because of my Objective-C and Java background - it would have seemed “logical" to me to put the “denotes can throw” keyword at the opposite end of the declaration to the return type. However, I am now used to the way it is and I think it works fine.
>
> -thislooksfun (tlf)
>
>> On Jan 4, 2017, at 6:10 AM, Jeremy Pereira via swift-evolution <swift-evolution at swift.org> wrote:
>>
>>>
>>> On 3 Jan 2017, at 16:29, John McCall via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>>
>>>
>>> I'm sorry if people dislike the placement of "throws", but that ship has sailed,
>>> and any attempt to "fix" it at this point is just going to cause problems for
>>> negligible benefit.
>>>
>>> As I see it, the current syntax has one mild deficiency, called out previously
>>> in this thread: a reader has to recognize that "throws -> X" does not mean
>>> that the function throws an X, but instead that it either throws or returns an X.
>>> It's always nice when something is immediately obvious and doesn't have to
>>> be explicitly learned, and I appreciate and mourn that my design may have
>>> fallen short of that standard here. However, overall I still do think the syntax
>>> is much cleaner than the alternatives, especially as return types grow more
>>> complicated, and that this small rule is not at all difficult to master.
>>
>> I’m going to stand up for the way it is now. I do not think the design falls short or is deficient. Bearing in mind that “->” actually means “returns”, I honestly can’t see why anybody would think
>>
>> func foo() throws -> Int
>>
>> could possibly be a function that throws an Int, especially if they have any knowledge of how the throw mechanism works in Swift (or any other language, for that matter).
>>
>> If it had been decided to put throws at the end, we’d probably be having an argument now that
>>
>> func foo() -> Int throws
>>
>> appears to return an Int that throws, an argument with much more validity, as pointed out upthread, because
>>
>> func foo() -> () -> Int throws
>>
>> really is ambiguous.
>>
>>
>>>
>>> For what it's worth, this visual ambiguity is precisely why I would insist that
>>> any typed-throws addition be spelled "throws(X)" instead of "throws X".
>>>
>>> John.
>>>
>>>
>>>>
>>>>> which work inconsistently and surprisingly in some cases.
>>>>>
>>>>> Here is a different way of looking at this: The predictable case is
>>>>> the one we already have now (and we wouldn’t take it away). Is your
>>>>> beef with the current syntax so great that you think it is worth
>>>>> adding complexity to the language to privilege some special cases?
>>>>
>>>> Not really, no.
>>>>
>>>> --
>>>> -Dave
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
More information about the swift-evolution
mailing list