[swift-evolution] When to use argument labels, part DEUX
Dave Abrahams
dabrahams at apple.com
Sun Feb 7 23:37:12 CST 2016
on Sun Feb 07 2016, plx <swift-evolution at swift.org> wrote:
>> On Feb 6, 2016, at 11:31 PM, Dave Abrahams via swift-evolution
>> <swift-evolution at swift.org> wrote:
>>
>>
>> on Sat Feb 06 2016, plx <swift-evolution at swift.org> wrote:
>>
>>> I do find some of the rules worded in ways that are hard to apply in
>>> the presence of trailing nouns; I’m not sure the guidelines are strong
>>> enough here to force the “right” outcome.
>>>
>>> Consider this example:
>>>
>>> // not-intended:
>>> a.tracksWithMediaCharacteristic(b, composer: c)
>>>
>>> …applying our guidelines:
>>>
>>> - `tracks with media characteristic b` is a grammatical phrase
>>
>> I went through a series of thoughts on this:
>>
>> 1. I'm not sure it is grammatical (I'll have to consult with a
>> linguist).
>>
>> 2. I understand why it sounds natural: this is the somewhat misleading
>> result of using a single-character identifier in the example. It's like
>> talking about a hypothetical "person A" and "person B". You wouldn't think
>> "Person Joe" was grammatical.
>>
>> 3. Yeah, but "umbrellas with color yellow" is perfectly fine, if
>> slightly unnatural, and it has the same grammatical structure. My
>> wife points out that it's like something you would say in poetry to
>> make rhyme or meter work.
>>
>> 4. Again I need to consult with a linguist, but I now have hope that it
>> actually is grammatical, meaning the whole “skipping trailing nouns
>> on the base name” wrinkle can be eliminated from the guidelines.
>> Thanks!
>
> It’s a good example of “grammaticality vs acceptability” issues; for
> another other example, “The Color Purple”. Even “Person Joe” is ok in
> the right context, but as it’s unusual and tricky to parse it
> seemingly requires a pause (or a comma when written), e.g. consider
> “The person, Joe, bit the dog, Fido”.
Yep; great points.
> For the above example, I think there’s a strong sense that the
> phrasing is unusual, and the lack of articles isn’t helping; I’d order
> the acceptability like this:
>
> tracks with the “legible” media-characteristic // <- most-natural/least-unusual
> tracks with the media-characteristic “legible”
> tracks with media-characteristic “legible”
> tracks with “legible” media-characteristic // <- worst due to interpretational ambiguity
Well, and the lack of quotation marks in the name doesn't help either.
But when you s/legible/X/ I'd say the third one is perfectly natural and
the other ones are all a bit strange.
> …and I think the the perceived acceptability improves
> substantially—and seemingly uniformly—with some more context:
>
> let t = (all of a's) tracks with the “legible” media-characteristic
> let t = (all of a's) tracks with the media-characteristic “legible”
> let t = (all of a's) tracks with media-characteristic “legible”
> let t = (all of a's) tracks with “legible” media-characteristic // <- still the worst, for the same reason
>
> …which sort of situation was why I thought it was risky to put too
> much weight on grammatical rules in the guidelines: I suspect that a
> lot of what needs to be “ungrammatical” for the guidelines will in
> practice be closer to “questionable”,
Can you explain what you mean by "needs to be “ungrammatical” for the
guidelines?"
> and it can be difficult to keep one’s sense of the “questionable”
> calibrated; this is especially true if you spend a lot of time exposed
> to “odd" language, e.g. English-like source code.
Heh, indeed. That's why I think it's better to have a solid criterion
like “is it grammatical?” than to use something like “is it questionable?”
> Given the perceived oddness of the trailing-noun usage, the best
> rule-adjustment might be “is it a complete phrase? If there’s a
> trailing noun, you may *either* ignore the trailing noun *or* ignore
> the argument—but not both—when making that decision,” except pithier.
I wonder if “use single-letter identifiers to evaluate grammaticality at
a hypothetical use-site” is an approach that would work without any
“ignoring?”
I think we might also want to consider it legitimate to evaluate calls
taking enum parameters using actual enum case names, as they can account
for a lot of words and can be controlled to make calls read
grammatically.
--
-Dave
More information about the swift-evolution
mailing list