[swift-evolution] Proposal Idea: Use of == outside of comparisons should be treated as an error.

Dmitri Gribenko gribozavr at gmail.com
Tue Jan 12 15:11:37 CST 2016


A pull request to the standard library would be appreciated.

Dmitri

On Tue, Jan 12, 2016 at 1:01 PM, Andrew Bennett via swift-evolution <
swift-evolution at swift.org> wrote:

> I'm +1 on @warn_unused_result, does that need a proposal or is a PR
> sufficient?
>
> On Tue, Jan 12, 2016 at 7:45 AM, Joe Groff via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>>
>> On Jan 11, 2016, at 12:39 PM, Jared Sinclair via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> Consider the following:
>>
>> protocol Updatable {
>>     func update(state: Bool)
>> }
>>
>> class Thing: Updatable {
>>     private var enabled = false
>>
>>     func update(state: Bool) {
>>         self.enabled == state
>>     }
>> }
>>
>> The obvious intention is to set self.enabled to the incoming value of
>> state. However, it’s easy to accidentally type a second equals sign. The
>> effect of this typo is self.enabled is never updated, leading to a
>> run-time bug that could be difficult to diagnose.
>>
>> This typo doesn’t generate any errors or warnings. I can’t think of a
>> valid reason to use the equals function outside of comparisons. If the
>> compiler instead treated this typo as an error, the mistake would be
>> trivial to identify and fix:
>>
>> protocol Updatable {
>>     func update(state: Bool)
>> }
>>
>> class Thing: Updatable {
>>     private var enabled = false
>>
>>     func update(state: Bool) {
>>         self.enabled == state // Error: `==` may not be used outside of
>> comparisons
>>     }
>> }
>>
>>
>> If it isn't already, the implementation of `==` ought to be marked with
>> the `@warn_unused_result` attribute, which will give you a warning if the
>> result is ignored. We're discussing making warn_unused_result the default
>> behavior in another thread.
>>
>> -Joe
>>
>>
>> _______________________________________________
>> 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
>
>


-- 
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>*/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160112/04ed036f/attachment.html>


More information about the swift-evolution mailing list