[swift-evolution] Make non-void functions @warn_unused_result by default
Step C
schristopher at bignerdranch.com
Wed Mar 2 09:21:36 CST 2016
> On Mar 2, 2016, at 3:24 AM, Austin Zheng via swift-evolution <swift-evolution at swift.org> wrote:
>
> Agreed. I think encouraging the "_ = returnValueIgnored()" pattern is a good way to have code disambiguate between "I don't care about the return value" and "I forgot to use it/called the wrong API method by accident". I've seen this issue in production code a couple of times.
>
I have also used and seen this pattern a bunch ("_ = ..."). It communicates powerfully to later code readers with the intention is in the code.
> Austin
>
>> On Mar 2, 2016, at 12:22 AM, David Hart via swift-evolution <swift-evolution at swift.org> wrote:
>>
>> I can’t remember ever returning a value ‘just in case’. I whole-heartidely support the @warnunusedresult by default.
>>
>>> On 02 Mar 2016, at 09:16, Dmitri Gribenko via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>> On Tue, Mar 1, 2016 at 11:50 PM, Andrey Tarantsov via swift-evolution
>>> <swift-evolution at swift.org> wrote:
>>>> Whoa. Everyone seems to be in favor of this. Don't you guys always return
>>>> something ‘just in case’, in the best traditions of C API design? I tend to
>>>> have lots of discardable results and only a few where I might legitimately
>>>> forget to use it.
>>>>
>>>> IMO, in most cases ignoring a return value is “safe”:
>>>>
>>>> a) If a method is called only for its result, forgetting to use the result
>>>> won't really introduce any new bugs — if you're not using that missing
>>>> result elsewhere, storing it into a variable won't help.
>>>>
>>>> b) If you're calling a method for its side effect, normally the result may
>>>> be discarded.
>>>>
>>>> The only case where this matters is when the method establishes a long-term
>>>> relationship (like a subscription) that needs to be stored to survive. That
>>>> seems like a rare case.
>>>>
>>>> Any other practical cases?
>>>
>>> The reason for warning on ignored "safe" returned values is that the
>>> code calls the method, but it ignores the result. Presumably, the
>>> developer wrote the method call for a reason -- they wanted their code
>>> to do something. Nobody needs a fancy no-op in their code. So while
>>> discarding "safe" return values does not compromise memory safety or
>>> introduce races or anything bad like that, there is a very high
>>> probability that the code is just wrong and does not do what the
>>> developer wanted. It does something else, in a totally "safe" way.
>>>
>>> Dmitri
>>>
>>> --
>>> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
>>> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
>>> _______________________________________________
>>> 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