[swift-evolution] [SE-0088] Dispatch API names

Brandon Knope bknope at me.com
Tue Jun 21 15:07:14 CDT 2016

I'm not convinced that perform is clearer than async.

performAndWait *is* clearer than sync but only in context: you wouldn't know perform was async until you read it or noticed the difference with performAndWait. Nothing about *perform* on its own conveys that it's asynchronous. 


Sent from my iPad

On Jun 20, 2016, at 10:05 PM, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:

>> DispatchQueue.async(execute:) and DispatchQueue.sync(execute:)
>> --------------------------------------------------------------
>> The lack of verb in the base name bothers me. The API Design Guidelines say “methods with side-effects should read as imperative verb phrases”. You could argue that the argument label “execute” serves as the verb. However, .async and .sync are most commonly used with trailing closures where the argument label is not present.
>> This issue was brought up during the review, but I did not see it being addressed. Why not name the methods something like .executeAsync(_:) and .executeSync(_:)?
> That feels a little redundant to me. It's worth remembering that the API Guidelines are a means of creating clear APIs, not an end in themselves. It's okay to deviate a little if you get a better result.
> However, I could see us borrowing (and slightly modifying) terminology from Core Data:
>    queue.perform { … }
>    queue.performAndWait { … }
> Compared to the status quo, this is clearer, a better fit for the guidelines, and better at penalizing the disfavored API.
>> DispatchQueue.after(when:execute:)
>> ----------------------------------
>> This one simply doesn’t read grammatically. For example, `queue.after(when: .now) { … }` becomes “queue, after when now …”. Since dispatch_after is semantically just an extended version of dispatch_async (I think), we can name this .executeAsync(after:_:).
> Yeah, I gave a talk about the renaming on Saturday and somebody noted that `when` reads poorly here. Fortunately, `queue.perform(after: .now() + 0.5)` reads pretty well too. :^)
> -- 
> Brent Royal-Gordon
> Architechies
> _______________________________________________
> 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