> De: "Brian Goetz" <brian.go...@oracle.com>
> À: "amber-spec-experts" <amber-spec-experts@openjdk.java.net>
> Envoyé: Lundi 31 Août 2020 15:35:32
> Objet: Re: [pattern-switch] Opting into totality

> Totality is a term that language designers like, but may not be all that
> evocative to users. So switch-total might not exactly turn on the light bulb
> for them. In this manner, “sealed” has a useful connotation that has nothing 
> to
> do with sealed types: non-leakiness: a sealed switch doesn’t leak any
> unprocessed values!

> Test driving ...

> sealed switch (x) { … }
> sealed-switch (x) { … }
> switch-sealed (x) { … }

> “A switch may be sealed with the sealed modifier; expression switches are
> implicitly sealed. The set of case patterns for a sealed switch must be total
> with some remainder; synthetic throwing cases are inserted for the remainder.”

Given that if there is a default it's already a sealed switch and that i can 
add a default to make it a sealed switch, 
i struggle to see where to use a classical statement switch and where to use a 
sealed switch ? 

Rémi 

>> On Aug 31, 2020, at 9:25 AM, Brian Goetz < [ mailto:brian.go...@oracle.com |
>> brian.go...@oracle.com ] > wrote:

>> I think this is the main open question at this point.

>> We now have a deeper understanding of what this means, and the shape of the
>> remainder. Totality means not only “spot check me that I’m right”, but also 
>> “I
>> know there might be some remainder, please deal with it.” So totality is not
>> merely about type checking, but about affirmative handling of the remainder.

>> Expression switches automatically get this treatment, and opting _out_ of 
>> that
>> makes no sense for expression switches (expressions must be total), but
>> statement switches make sense both ways (just like unbalanced and balanced
>> if-else.) Unfortunately the default has to be partial, so the main question 
>> is,
>> how do we indicate the desire for totality in a way that is properly 
>> evocative
>> for the user?

>> We’ve talked about modifying switch (sealed switch), a hyphenated keyword
>> (total-switch), a trailing modifier (switch case), and synthetic cases
>> (“default: unreachable”). Of course at this point it’s “just syntax”, but I
>> think our goal should be picking something that makes it obvious to users 
>> that
>> what’s going on is not merely an assertion of totality, but also a desire to
>> handle the remainder.

>>> - How does a switch opt into totality, other than by being an expression 
>>> switch?

Reply via email to