[swift-evolution] My personal beef with leading-dot syntax

Dave Abrahams dabrahams at apple.com
Mon Apr 4 15:11:17 CDT 2016


on Mon Apr 04 2016, Joe Groff <swift-evolution at swift.org> wrote:

>> On Apr 4, 2016, at 12:51 PM, Dave Abrahams <dabrahams at apple.com> wrote:
>> 
>> 
>> on Mon Apr 04 2016, Joe Groff <jgroff-AT-apple.com> wrote:
>> 
>
>>>> On Apr 4, 2016, at 11:44 AM, Dave Abrahams <dabrahams at apple.com> wrote:
>>>> 
>>>> 
>>>> on Mon Apr 04 2016, Joe Groff <jgroff-AT-apple.com> wrote:
>>>> 
>>> 
>>>>>> On Apr 4, 2016, at 11:05 AM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>>>> 
>>>>>> 
>>>>>> on Mon Apr 04 2016, Erica Sadun <swift-evolution at swift.org> asked:
>>>>>> 
>>>>> 
>>>>>>> Can you ping me off-list or in another thread and explain what the
>>>>>>> issues are?
>>>>>> 
>>>>>> All of the following make me uncomfortable with our leading-dot thang:
>>>>>> 
>>>>>> * The rules for lookup don't seem obvious to me.  I admit this is very
>>>>>> personal/subjective.
>>>>>> 
>>>>>> * There is some evidence that people think it means something it doesn't
>>>>>> (“enum case”), as mentioned in SE-0036.  That suggests it is a
>>>>>> confusing feature.  That confusion may be fairly harmless so far, but
>>>>>> still.
>>>>>> 
>>>>>> * The dot doesn't seem to buy enough to be worth the complexity it adds
>>>>>> to the language; why not just let those names be looked up without the
>>>>>> dot?  You can always disambiguate with full qualification if you have
>>>>>> to.
>>>>> 
>>>>> Making every unqualified reference context-dependent would be
>>>>> impractical. `foo.bar(bas)` would become an exponential search to find
>>>>> a contextual type containing a `foo` which has a `bar` member that can
>>>>> accept an type containing a `bas` member.
>>>> 
>>>> I don't think I'm talking about making every unqualified reference
>>>> context-dependent.  When I have a context that demands an instance of a
>>>> particular enum type, I think it's reasonable to look up the names in
>>>> the enum without qualification, and I strongly question the value of
>>>> leading-dot syntax for general static member lookup.
>>> 
>>> Therein lies the rub—*any* context an unqualified name can appear in
>>> could potentially demand an instance of a particular enum type, until
>>> the type checker rules that out. Limiting the behavior to enums
>>> doesn't simplify the implementation.
>> 
>> I'm afraid I don't understand how that's a serious problem yet.
>
> Right now, we limit the contextual lookup to places where it's
> syntactically asked for, using the leading dot. Without the leading
> dot, we'd have to extend it to every unqualified name, which makes it
> much more likely you'll fall into problematic cases.

I don't know how to evaluate whether that likelihood is a problem in
practice, or not, though.

-- 
Dave



More information about the swift-evolution mailing list