> On Feb 22, 2017, at 11:27 AM, John McCall via swift-evolution > <swift-evolution@swift.org> wrote: > >> On Feb 21, 2017, at 4:43 AM, Daniel Duan via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> My apologies for misunderstanding. >> >> Would it be better to add the anonymous case feature in a separate proposal? >> It stands alone as a new addition to enum. The intent for this proposal is >> bringing enum's syntax closure to other part of Swift. > > The core team met and talked about SE-0155 today, even though we're not quite > done with the review period, and here's where we stand. > > SE-0155 is being returned for revision. Consensus appears to be strongly in > favor of requiring argument labels (if provided) to be enforced on "call" > sites.
Does this mean pattern matches as well? That adds a lot of verbosity for no gain. Russ > However, the core team feels that the proposal needs revision in the > following ways: > - Are internal argument names syntactically allowed in a case declaration? > - Can cases with the same base name be overloaded by argument label? If > so, is a pattern match using just the bare name ambiguous or does it match > both cases? > - Can cases with the same name (using the same rule as above) be overloaded > by argument type? If so, how are they disambiguated in pattern matches? > - Do pattern matches require argument labels to be given along with value > patterns, e.g. "case .valid(value: let value)", or is there some way to > shorten this? If the latter, what are the rules for that? > - Are you proposing anonymous cases, and if so, what are the language rules > for them? > - The proposal makes a claim about layout efficiency; please either discuss > this claim or remove it. > > John. > >> >> Daniel Duan >> Sent from my iPhone >> >> On Feb 21, 2017, at 1:15 AM, Dave Abrahams via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >>> I had not intended for _ to be an ordinary identifier, but as a way of >>> spelling the empty case name. Ambiguous cases, not distinguished by either >>> full name or payload type, would be errors. How to construct anonymous >>> cases? I guess it would be MyEnum(expression) >>> >>> Sent from my moss-covered three-handled family gradunza >>> >>> On Feb 19, 2017, at 2:52 PM, Daniel Duan <dan...@duan.org >>> <mailto:dan...@duan.org>> wrote: >>> >>>> >>>>> On Feb 19, 2017, at 11:49 AM, Matthew Johnson via swift-evolution >>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>>>> >>>>>> >>>>>> On Feb 18, 2017, at 10:49 PM, Dave Abrahams via swift-evolution >>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>>>>> >>>>>> I'm on vacation and don't have time for a full review right now, but I >>>>>> am concerned that wild this proposal would make enums more general and >>>>>> uniform with the rest of the language , they also would become much more >>>>>> awkward for common use cases. I have recently been very pleased that I >>>>>> didn't have to supply labels in switch statements where the label name >>>>>> would simply have matched the name of the variable to be bound. This >>>>>> looks needlessly verbose: >>>>>> >>>>>> case .valid(value: let value, resumptionPoint: let resumptionPoint): >>>>>> >>>>>> I cannot imagine a real life use case where one would have labels in the >>>>>> case and desire to bind associated values to variables having different >>>>>> names than the labels. >>>>> >>>>> I agree with this, but I think it’s an issue we can solve (perhaps as an >>>>> amendment to this proposal). >>>>> >>>>> First, I think Brent’s idea of introducing an argument label that can be >>>>> distinct from the “property” name of the case is a good one. I think we >>>>> should do this. It takes the parallel with function signatures even >>>>> further. >>>>> >>>>> Second, we should allow the “property” name to be `_`. This would mean >>>>> no label can be used when matching: >>>>> >>>>> case valid(value _: ValueType, resumptionPoint _: PointType) >>>>> >>>>> Third, I think we should also allow suers to elide the label if they >>>>> either discard the value with `_` or bind a name that is identical to the >>>>> label, so we might have: >>>>> >>>>> // declaration: >>>>> case valid(externalCasConstructorLabel value: ValueType, >>>>> externalCaseConstructorLabel resumptionPoint: PointType) >>>>> >>>>> // match ok: >>>>> case .valid(let value, let resumptionPoint): >>>>> >>>>> // error, names do not match: >>>>> case .valid(let foo, let bar): >>>>> >>>>> // ok, label is used: >>>>> case .valid(value: let foo, resumptionPoint: let bar): >>>>> >>>>> This follows the behavior of function signatures very closely. The >>>>> external label is used to provide context for the argument at the call >>>>> site (of the case constructor). The internal name is used to bind a name >>>>> to the value that is used by code that works with the value. >>>>> >>>>> The only exception here is that because the usage site is distant from >>>>> the case declaration it may wish to use a different name. We allow that, >>>>> but only if the “internal name” is also used in the pattern. This >>>>> preserves the ability of a reader of the code to see the name / meaning >>>>> of the associated value as it was declared by the enum in addition to the >>>>> name that might make more sense for use in the local context. >>>>> >>>>>> >>>>>> Secondly, I can't imagine a case where one would want to use the same >>>>>> case basename and different labels. The very common use case where the >>>>>> types of associated values completely distinguish the case and one would >>>>>> rather not have to supply a case name at all is completely unaddressed. >>>>>> If my quick read is not mistaken, this proposal makes it legal for cases >>>>>> to have different complete names (including base name and labels), but >>>>>> doesn't make it legal to have the same full name (which I would love to >>>>>> be "_" or missing in some cases) with different associated value types. >>>>>> If we were truly following the precedent set by function signatures, >>>>>> wouldn't that be possible too? >>>>> >>>>> +1. I think this makes a lot of sense. It completes the parallel of >>>>> cases with overloaded functions. >>>>> >>>>> I think anonymous cases are a really good idea. I discuss those quite a >>>>> bit in the value subtyping manifesto I shared last week (I’d love to hear >>>>> your thoughts on it if / when you have time to take a look). >>>>> >>>>> How would you propose that values of anonymous cases be constructed and >>>>> matched? My solution is to allow them to be constructed by implicit >>>>> conversion from the associated value type to the enum type and matched by >>>>> a cast pattern. Is that what you have in mind? I would *really* love to >>>>> see this someday... >>>> >>>> I can’t speak for Dave obviously. But I think he was merely proposing >>>> “overloaded” form of enum options, in which multiple options may share the >>>> compound name but with differently associated types. The name “_” would >>>> just be a normal identifier in such scenario. So it would also be the >>>> contractor’s function name. >>>> >>>>>> >>>>>> Sent from my moss-covered three-handled family gradunza >>>>>> >>>>>> On Feb 17, 2017, at 5:26 PM, John McCall <rjmcc...@apple.com >>>>>> <mailto:rjmcc...@apple.com>> wrote: >>>>>> >>>>>>> Hello Swift community, >>>>>>> >>>>>>> The review of "SE-0155: Normalize Enum Case Representation" begins now >>>>>>> and runs through next Friday, February 26th. The proposal is available >>>>>>> here: >>>>>>> >>>>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md >>>>>>> >>>>>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md> >>>>>>> >>>>>>> Reviews are an important part of the Swift evolution process. All >>>>>>> reviews should be sent to the swift-evolution mailing list at >>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >>>>>>> or, if you would like to keep your feedback private, directly to the >>>>>>> review manager. When replying, please try to keep the proposal link at >>>>>>> the top of the message: >>>>>>> >>>>>>> Proposal link: >>>>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md >>>>>>> >>>>>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md> >>>>>>> >>>>>>> Reply text >>>>>>> >>>>>>> Other replies >>>>>>> >>>>>>> What goes into a review? >>>>>>> >>>>>>> The goal of the review process is to improve the proposal under review >>>>>>> through constructive criticism and, eventually, determine the direction >>>>>>> of Swift. When writing your review, here are some questions you might >>>>>>> want to answer in your review: >>>>>>> >>>>>>> • What is your evaluation of the proposal? >>>>>>> • Is the problem being addressed significant enough to warrant >>>>>>> a change to Swift? >>>>>>> • Does this proposal fit well with the feel and direction of >>>>>>> Swift? >>>>>>> • If you have used other languages or libraries with a similar >>>>>>> feature, how do you feel that this proposal compares to those? >>>>>>> • How much effort did you put into your review? A glance, a >>>>>>> quick reading, or an in-depth study? >>>>>>> >>>>>>> More information about the Swift evolution process is available at >>>>>>> https://github.com/apple/swift-evolution/blob/master/process.md >>>>>>> <https://github.com/apple/swift-evolution/blob/master/process.md> >>>>>>> >>>>>>> Thank you, >>>>>>> >>>>>>> John McCall >>>>>>> Review Manager >>>>>>> _______________________________________________ >>>>>>> swift-evolution-announce mailing list >>>>>>> swift-evolution-annou...@swift.org >>>>>>> <mailto:swift-evolution-annou...@swift.org> >>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution-announce >>>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution-announce> >>>>>> _______________________________________________ >>>>>> swift-evolution mailing list >>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >>>>> >>>>> _______________________________________________ >>>>> swift-evolution mailing list >>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >>> _______________________________________________ >>> swift-evolution mailing list >>> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto: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