[swift-evolution] [Review] SE-0023 API Design Guidelines

Erica Sadun erica at ericasadun.com
Fri Jan 22 18:12:12 CST 2016


> On Jan 22, 2016, at 4:24 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> on Fri Jan 22 2016, Erica Sadun <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>> _______________________________________________ swift-evolution mailing list swift-evolution at swift.org <mailto:swift-evolution at swift.org> 
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> Current:
>> 
>>  * Use imperative verb phrases for mutating methods: x.reverse(), x.sort(), x.tweak()
>>  * Use noun phrases for non-mutating methods: x.distanceTo(...), idx.successor()
>> 
>> Proposed:
>> 
>>  * Use verb phrases to declare procedural methods, whether or not they mutate an instance or just produce side
>>    effects: x.reverse(), x.sort(), x.tweak(), x.perform(), x.dispatch(), x.send()
>>  * Use noun phrases to describe values returned by a functional method: x.distanceTo(y), index.successor() (This
>>    admittedly leaves further issues around other functional methods, for example, seq.separatedBySequence(seq) and
>>     int.strideTo(other: Self, step:Self.Stride), etc. )
>> 
>> I suggest that mutating methods are just a procedural method (side effect, no return value) vs functional.
> 
> Hi Erica,
> 
> When you propose a change, could you please explain why you think your
> change is an improvement?  
> 
> Thanks,
> Dave

I believe the current distinction is misguided in focusing on mutating and non-mutating implementations when the
differentiation can be viewed from a more general level. There are two ways to distinguish these:

* Does this method or function have side effects (which is what the current API approach intends to address); and
* Is this method or function inherently functional or procedural in nature, returning a value or not.

For example, contrast sort() and sortInPlace().  Even with the current approach they lack a natural clarity. You could easily swap 
them without anything "breaking" in understanding because your solution is conventional, not based on any underlying principle.

With noun/verb naming, the function name reflects the functional/procedural underlying differentiation. 
* A function produces something: f(x) -> y. 
* A procedure does something: g(x) -> Void

Under my proposed change, the procedural variation would be sort, sortInPlace, etc. Optional adverbs and near-adverbs
could distinguish similar versions sortQuickly, sortBalanced, etc.

The functional would be sortedVersion or with a slight rule tweak that infers the subject of the action, sorted. The adjective modifies a noun, and 
therefore implies the presence of a noun that is not explicitly added to the name.

I find my approach more principled and more obvious for use to non-native speakers.

Hopefully this clarifies.

-- E, finishing dinner and about to go on family time. I'll be around a little longer but not much longer



> 
>> -- E
>> 
>>    On Jan 22, 2016, at 2:02 PM, Douglas Gregor via swift-evolution <
>>    swift-evolution at swift.org> wrote:
>> 
>>    Hello Swift community,
>> 
>>    The review of SE-0023"API Design Guidelines" begins now and runs through January 31, 2016. The proposal is
>>    available here:
>> 
>>        https://github.com/apple/swift-evolution/blob/master/proposals/0023-api-guidelines.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
>> 
>>    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/0023-api-guidelines.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
>> 
>>    Thank you,
>> 
>>    -Doug Gregor
>> 
>>    Review Manager
>> 
>>    _______________________________________________
>>    swift-evolution mailing list
>>    swift-evolution at swift.org
>>    https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> Current: Use imperative verb phrases for mutating methods: x.reverse(), x.sort(), x.tweak() Use noun phrases for
>> non-mutating methods: x.distanceTo(...), idx.successor() Proposed: Use verb phrases to declare procedural methods,
>> whether or not they mutate an instance or just produce side effects: x.reverse(), x.sort(), x.tweak(), x.perform(),
>> x.dispatch(), x.send() Use noun phrases to describe values returned by a functional method: x.distanceTo(y),
>> index.successor() (This admittedly leaves further issues around other functional methods, for example,
>> seq.separatedBySequence(seq) and int.strideTo(other: Self, step:Self.Stride), etc. ) I suggest that mutating
>> methods are just a procedural method (side effect, no return value) vs functional. -- E > On Jan 22, 2016, at 2:02
>> PM, Douglas Gregor via swift-evolution wrote: > > Hello Swift community, > > The review of SE-0023"API Design
>> Guidelines" begins now and runs through January 31, 2016. The proposal is available here: > > 
>> https://github.com/apple/swift-evolution/blob/master/proposals/0023-api-guidelines.md <https://github.com/apple/swift-evolution/blob/master/proposals/0023-api-guidelines.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/0023-api-guidelines.md <https://github.com/apple/swift-evolution/blob/master/proposals/0023-api-guidelines.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, > > -Doug Gregor > > Review
>> Manager > > _______________________________________________ > swift-evolution mailing list >
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org> > https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
> 
> -- 
> -Dave
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160122/9c1cd471/attachment.html>


More information about the swift-evolution mailing list