[swift-evolution] Take 2: Stdlib closure argument labels and parameter names
Dave Abrahams
dabrahams at apple.com
Wed Jun 29 13:23:00 CDT 2016
Could we please take all the discussion of aliasing and the future
extensions bit of this PR into a different thread? I'd like to keep
this discussion focused.
Thanks,
Dave
on Wed Jun 29 2016, Matthew Johnson <matthew-AT-anandabits.com> wrote:
>> On Jun 29, 2016, at 10:13 AM, Erica Sadun via swift-evolution <swift-evolution at swift.org> wrote:
>>
>>
>>> On Jun 29, 2016, at 12:39 AM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>
>>>
>>> I've updated my pull request with a much more conservative set of
>>> changes that preserves/restores label-free-ness for all “term of art”
>>> functional methods such as filter and reduce.
>>>
>>> https://github.com/apple/swift/pull/2981
>>>
>>> My current thoughts are that many of the `by:` labels are awkward and
>>> not adding much. Perhaps they all ought to be omitted.
>>
>>
>> I'd be happy to see `by` labels go away, whether first or trailing. I'm not sure why Swift 3 wants
>> to have so many extra labels when a very simple phrase is understandable on its own
>> (e.g. max, min, sort, sorted).
>>
>> Is it possible under the Swift umbrella to do the same for split since it has the rarely used
>> maxSplits, and omittingEmptySubsequences params? It would give you `split({$0 == " "})`
>> and `split(atWhitespace)`.
>>
>> Speaking of isAllWhitespace, would this be a prebuilt enumeration or is it a placeholder?
>> If the former, I have opinions (new lines, new lines and whitespace)
>>
>> The managed buffer, are you "makingValueWith" instead of "makingHeaderWith" intentionally?
>> If so, no worries. If not, helpful ping.
>>
>> Future Extensions:
>>
>> * reduce(_:, combine:) // way simpler
>>
>> * "The argument against changing other names to be more consistent with API guidelines
>> is weakened. "
>>
>> I think Sean Heber's `@termOfArt(name)` is a great way to have both worlds, where
>> `select(where:)` or `where()` is the Swifty name and `@termOfArt(filter)` offers
>> a substitutable alias for fp aficionados.
>> This approach is not anything I've ever seen previously in a programming language but
>> its something that jumps out as a way to satisfy two distinct audiences of users
>> that would have limited impact but a decided advantage.
>
> Aliasing methods is pretty common in Ruby. The advantage is that you
> can select the alias that reads best at a specific call site. The
> disadvantage is that everyone has to learn more than one name for the
> same thing.
>
> If we’re going to allow aliases I think it should be in support of
> clarity at specific call sites. I think the hurdle for this is pretty
> high and I’m not sure we would find the benefits to outweigh the
> drawbacks, but it is a discussion we could have. I would want to see
> concrete examples (which could be drawn from Ruby code).
>
> I don’t think we should do this just to support term-of-art aliases
> where we believe we have a different name that fits Swift better.
> This creates “dialects” which I believe is a stated anti-goal of
> Swift.
>
> It may turn out that existing terms of art provide enhanced clarity in
> some contexts and more Swifty names in others, in which case the alias
> may make sense. But it if we add them it should be done on the
> grounds of clarity and be accompanied by guidelines regarding which
> name to choose.
>
> But my hunch is that this introduces more complexity than value.
>
>>
>> That said, I don't like `mapping` and `flattened`. If they're going to be Swiftized, go with
>> names that aren't standing in the "term of art" rubble: transform, squeeze, whatever.
>>
>> -- E
>>
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
--
Dave
More information about the swift-evolution
mailing list