Add -Weverything and you can ensure you are switching exhaustively ;).

Sent from my iPhone

> On 8 Jan 2018, at 19:02, Javier Soto via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> This is very much an issue in Obj-C today. If you have an NS_ENUM defined 
> with cases A, B, and C, this switch is correct:
> 
> int foo;
> swith (e) { 
> case A: foo = 0; break;
> case B: foo = 1; break;
> case C: foo = 2; break;
> }
> 
> (Note the lack of a default case)
> 
> If that enum is defined in a framework and it changes after the app is 
> compiled (like it's the case with Apple frameworks), then that code produces 
> no warning, yet the foo variable will have a garbage value (undefined 
> behavior, but as far as the compiler can tell at compile time your code is 
> fine)
> 
> Adding a default clause to that switch has the downside of not getting 
> warnings for new added cases, like has been discussed before, which is very 
> useful.
>> On Fri, Jan 5, 2018 at 7:11 PM Jon Shier via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> At this point I think it might be useful to outline how binary compatibility 
>> works for Objective-C on Apple platforms right now. As an app developer I’m 
>> not intimately familiar with what happens when you run an app compiled with 
>> the iOS 10 SDK on iOS 11. Are there just runtime checks to call old code 
>> paths or something else? The more this thread goes on the more confused I 
>> get about why Swift would have this issue while it doesn’t appear to be one 
>> for Obj-C. If an enum adds a case now, I don’t have to care until I 
>> recompile using the new SDK. Is the intention for Swift to be different in 
>> this regard?
>> 
>> 
>> 
>> Jon Shier
>> 
>>> On Jan 5, 2018, at 6:41 PM, Jordan Rose via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> 
>>> 
>>>> On Jan 3, 2018, at 00:54, Jason Merchant via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> Is it hard to imagine that most everyone can get what they want and keep 
>>>> the syntax clean and streamlined at the same time? Without any "@" signs 
>>>> or other compiler hints?
>>> 
>>> For what it's worth, the original version of the proposal started with a 
>>> modifier (a context-sensitive keyword, like 'final'), but the core team 
>>> felt that there were a lot of modifiers in the language already, and this 
>>> didn't meet the bar.
>>> 
>>> 
>>>>> "Rather, we are how to enable the vendor of a nonexhaustive enum to add 
>>>>> new cases without breaking binaries compiled against previous versions"
>>>> 
>>>> When an enum changes, and the change causes the code to break, the user 
>>>> can be presented with migration options from an automated IDE tool. In 
>>>> what specific way does this not solve the issue about having to upgrade 
>>>> your code when using someone else's code library? This very notion implies 
>>>> your disgruntled about doing work when things are upgraded, is that really 
>>>> what this fuss is all about?
>>>> 
>>>> A well written language interpreter and auto-tooling IDE would not need 
>>>> hints embedded in the code syntax itself. Migration hints from version to 
>>>> version should not be a part of either the past or future version of the 
>>>> code library.
>>> 
>>> Thanks for bringing this up! Unfortunately, it falls down in practice, 
>>> because if there's a new enum case, it's unclear what you want to do with 
>>> it. If you're handling errors, it's not obvious that the way you've handled 
>>> any of the other errors is appropriate. In the (admittedly controversial) 
>>> SKPaymentTransactionState case, none of the existing code would be 
>>> appropriate to handle the newly-introduced "deferred" case, and nor could 
>>> StoreKit provide "template" code that would be appropriate to the client 
>>> app.
>>> 
>>> 
>>> In any case, though, the key point on this particular quoted sentence is 
>>> "without breaking binaries". Any such change must be valid without 
>>> recompilation, and indeed without any intervention from the developer or an 
>>> IDE, because that's what happens when the user updates their OS.
>>> 
>>> Jordan
>>> 
>>> 
>>> 
>>>> 
>>>> ...
>>>> 
>>>> I don't expect the community to agree on language grammar, but the common 
>>>> sense here on how to achieve the intended goals seems to be out of wack.
>>>> 
>>>> If someone can present a clear logical statement as to how an automated 
>>>> migration tool behind the scenes in the IDE to handle all your versioning 
>>>> worries, does not make this whole discussion about adding more convoluted 
>>>> syntax additions irrelevant, I'd love to hear it.
>>>> 
>>>> ___________________
>>>> 
>>>> Sincerely,
>>>> Jason
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On Tue, Jan 2, 2018 at 12:36 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote:
>>>>>> On Tue, Jan 2, 2018 at 12:11 PM, Jason Merchant via swift-evolution 
>>>>>> <swift-evolution@swift.org> wrote:
>>>>> 
>>>>>> I think this whole thing has been unnecessarily convoluted. As a result, 
>>>>>> the majority of the replies are rabbit holes.
>>>>>> 
>>>>>> In my opinion, the true root of the concept in question is as follows:
>>>>>> 
>>>>>> A list of something is desired:
>>>>>> 1 - Pancake
>>>>>> 2 - Waffle
>>>>>> 3 - Juice
>>>>>> 
>>>>>> Developer wishes to be able to:
>>>>>> A) Add new things to the list of choices in the future as they come up 
>>>>>> with new ideas
>>>>>> B) Sometimes select one of the choices to be chosen as the normal choice 
>>>>>> if no choice is made by the user
>>>>>> 
>>>>>> A and B are separate desires. In some circumstances a developer may want 
>>>>>> to add a new choice and make it the normal choice when there was no 
>>>>>> normal choice was clarified before.
>>>>> 
>>>>> I don't think this is an accurate summary of the problem being tackled 
>>>>> here. Rather, we are how to enable the vendor of a nonexhaustive enum to 
>>>>> add new cases without breaking binaries compiled against previous 
>>>>> versions. There is little here to do with what a "default" should be. 
>>>>> Indeed, it is an explicit design decision of Swift not to support types 
>>>>> having an implicit default value.
>>>>>  
>>>>>> ____________________
>>>>>> 
>>>>>> Part 2:
>>>>>> 
>>>>>> After this simple desire is clear, there should be two discussions:
>>>>>> A) In a text only coding language, what would we like the syntax to look 
>>>>>> like? (Without regard to past-bias. What should it really be, forget 
>>>>>> what mistaken design choices were made in Swift in the past)
>>>>>> B) How do we approach making this happen behind the scenes?
>>>>>> 
>>>>>> Bonus: Given that some of us have changed our approach to programming 
>>>>>> significantly beyond text based coding, and into more dynamic mediums of 
>>>>>> programming in other niches, and even here and there in Xcode - I would 
>>>>>> recommend considering how the IDE would show a modern version of this 
>>>>>> concept. I feel too often that Swift design syntax has a lack of 
>>>>>> awareness between the distinctions of what the IDE should do, as opposed 
>>>>>> to what the syntax of the language should be, and what should be handled 
>>>>>> behind the scenes by automated tooling.
>>>>>> 
>>>>>> _____________________
>>>>>> 
>>>>>> My opinion, in answering the above questions is in preference to a 
>>>>>> simple easy to read and write syntax, something like the following:
>>>>>> 
>>>>>> choices Breakfast {
>>>>>>     Pancake, Waffle, Juice
>>>>>> }
>>>>>> 
>>>>>> If a "default" choice is desired, it is obvious to me that I would 
>>>>>> select the choice from the IDE, and it would be visually indicated that 
>>>>>> it was the default.
>>>>>> 
>>>>>> When changes occur, whether new choices are added, old ones are removed 
>>>>>> or changed, or a default is added, changed, or removed - a behind the 
>>>>>> scenes automated tool analyzes the changes and presents migration 
>>>>>> options through the IDE.
>>>>>> 
>>>>>> _____________________
>>>>>> 
>>>>>> Sincerely,
>>>>>> Jason
>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> swift-evolution mailing list
>>>>>> swift-evolution@swift.org
>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>>> 
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> -- 
> Javier Soto
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> 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