[pattern-switch] Opting into totality

Brian Goetz brian.goetz at oracle.com
Mon Aug 31 13:35:32 UTC 2020


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.”  

> On Aug 31, 2020, at 9:25 AM, Brian Goetz <brian.goetz at 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?
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200831/417f24b2/attachment.htm>


More information about the amber-spec-experts mailing list