[swift-evolution] Revisiting SE-0110

Chris Lattner sabre at nondot.org
Thu Jun 15 11:15:49 CDT 2017


Let me clarify: I'm only talking about removing tuple element names from the *pattern* grammar.  They would still be allowed on tuple types, which is what you are using.

-Chris

> On Jun 14, 2017, at 9:45 PM, Charlie Monroe <charlie at charliemonroe.net> wrote:
> 
> 
>> On Jun 15, 2017, at 6:01 AM, Chris Lattner via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> 
>>> On Jun 12, 2017, at 10:07 PM, Paul Cantrell <cantrell at pobox.com> wrote:
>>> 
>>> What’s the status of this Chris’s double parens idea below? It garnered some positive responses, but the discussion seems to have fizzled out. Is there something needed to help nudge this along?
>>> 
>>> What’s the likelihood of getting this fixed before Swift 4 goes live, and the great wave of readability regressions hits?
>> 
>> We discussed this in the core team meeting today.  Consensus seems to be that a change needs to be made to regain syntactic convenience here.  Discussion was leaning towards allowing (at least) the parenthesized form, but more discussion is needed.
>> 
>> 
>> One (tangential) thing that came up is that tuple element names in tuple *patterns* should probably be deprecated and removed at some point.  Without looking, what variables does this declare?:
>> 
>>    let (a : Int, b : Float) = foo()
> 
> Personally, I use this often as "anonymous structs" (which tuples IMHO are). Often, there is a return type used in 1-2 methods and in such case, I feel that declaring a struct MyMethorReturnStruct is unnecessary and I use tuples with named elements, so that the call site can easily access the information it needs, which is particularly convenient if both tuple member are of the same type:
> 
> func parseName() -> (firstName: String, lastName: String)
> 
> Instead of deprecating this, would it be possible to make this a syntax for generating a truly anonymous structure? It can internally have a name that mangles together the element *names and types*, so:
> 
> let name = (firstName: "John", lastName: "Doe")
> 
> type(of: name) == _firstName_String_lastName_String_
> 
> Hence you would be able to pass this structure wherever it's declared exactly the same, but:
> 
> func passName() -> (name1: String, name2: String) {
>    return parseName() // see above for declaration
> }
> 
> will result in error as (firstName: String, lastName: String) cannot be converted to (name1: String, name2: String).
> 
> 
>> 
>> ?
>> 
>> -Chris
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 


More information about the swift-evolution mailing list