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

Darren Mo darren.mo at me.com
Mon Jun 20 19:50:02 CDT 2016

SE-0088 was accepted with revisions a month ago. However, some of the APIs just don’t feel right to me. I’ve only used DispatchQueue and DispatchSource so far, so I will only comment on those.

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(_:)?

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:_:).

DispatchSource subclass names
Why is it DispatchSourceMemoryPressure instead of MemoryPressureDispatchSource? I don’t think I’ve ever seen subclass names where the superclass part is at the beginning of the name.

DispatchSource factory methods
e.g. DispatchSource.read(fileDescriptor:queue:). The API Design Guidelines mandate that factory methods begin with the prefix “make”. Indeed, DispatchSource.read might mislead people to think that a read will be performed by this method. A better name would be .makeReadSource(fileDescriptor:queue:).

And why are these factory methods on DispatchSource instead of initializers on the subclasses? ReadDispatchSource.init(fileDescriptor:queue:) would be way clearer.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160620/62274c22/attachment.html>

More information about the swift-evolution mailing list