Exactly: I also consider synchronous dispatch a special case not worthy of 
sacrificing a better name (`dispatch`) for it. I prefer to have a single 
`dispatch` as the main function name. Here is my proposed modified signature 
based on the proposal 
<https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.md>:

class DispatchQueue : DispatchObject {
    func dispatch(synchronous: Bool, work: @convention(block) () -> Void)

    func dispatch(
        group: DispatchGroup? = nil, 
        qos: DispatchQoS = .unspecified, 
        flags: DispatchWorkItemFlags = [], 
        work: @convention(block) () -> Void)
}

queue. dispatch(group: group) {
    print("Hello World")
}

queue.dispatch(synchronous: true) {
    print("Hello World")
}

In the above synchronous variant, passing synchronous flag as false simply 
delegates to async function. This saves us from having to use a name like 
dispatchSync(). 

Actually, I currently have my own wrapper for libdispatch that works in this 
way. My wrapper also unifies more of the API under the same `dispatch` function 
with more optional parameters. For example, `apply` functions are also handled 
with `dispatch` function. It will iterate if `iterations:` optional parameter 
is specified and so on. I find it very convenient to use and the resulting code 
is very clear and readable.

I know, this goes further than importing the existing API, but concurrency API 
has such a profound impact on the overall style and readability of code that it 
is worth going even further than what proposal suggests to get a really clear 
and readable API.

Hooman 
> On May 12, 2016, at 11:16 AM, Thorsten Seitz via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> dispatch() and dispatchSync() would be my preference as asynchronous dispatch 
> is the point of GCD and synchronous dispatch is a special case and therefore 
> I think the visual asymmetry is an advantage.
> 
> -Thorsten
> 
> 
>> Am 12.05.2016 um 20:10 schrieb James Dempsey via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>>:
>> 
>> 
>>> On May 11, 2016, at 8:02 PM, Ricardo Parada <rpar...@mac.com 
>>> <mailto:rpar...@mac.com>> wrote:
>>> 
>>> 
>>> 
>>> For synchronously and asynchronously how about the adverbs before the verb:
>>> 
>>> syncDispatch()
>>> asyncDispatch()
>> 
>> 
>> I think with the abbreviation ‘sync’ it’s very easy to read ‘sync’ as a verb 
>> and dispatch as a noun.
>> 
>> i.e. I’m going to sync up with you about our plan
>> i.e. I received a dispatch from headquarters
>> 
>> I would be very fine with
>> 
>> dispatchAsync() and dispatchSync() as method names.
>> 
>> 
>> 
>>> 
>>> ?
>>> 
>>> On May 11, 2016, at 10:50 AM, James Dempsey <demp...@mac.com 
>>> <mailto:demp...@mac.com>> wrote:
>>> 
>>>>> So maybe that will conform to the API naming guideline?  Or would the 
>>>>> verb have to be in the base name of the func?
>>>> 
>>>> 
>>>> It seems from the guidelines that the intent is for the verb to be in the 
>>>> base name of the func, especially since there is another set of guidelines 
>>>> for naming function parameters.
>>>> 
>>>> In general the other methods in the proposal are verbs (perform(), 
>>>> notify(), wait(), cancel(), etc.)
>>>> 
>>>> At least for me, not including a verb makes the API read like the sentence 
>>>> “The dog quickly”.  This wasn’t so bad in the C API, because you could 
>>>> read the word ‘dispatch’ as the verb.
>>>> 
>>>> 
>>>> Looking at the current GDC API, it does seem like dispatching 
>>>> synchronously is the rare and special case.
>>>> 
>>>> Could there be just a single dispatch() method, with async as a flag with 
>>>> a default value of true?
>>>> 
>>>> It might be a little ugly because most of the other parameters of the 
>>>> proposed asynchronously() method would not apply in the sync case.
>>>> 
>>>> James
>>>> 
>>>> 
>>>> 
>>>>> On May 11, 2016, at 7:14 AM, Ricardo Parada <rpar...@mac.com 
>>>>> <mailto:rpar...@mac.com>> wrote:
>>>>> 
>>>>> Jacob Bandes-Storch suggested:
>>>>> 
>>>>> synchronously(execute work: …)
>>>>> 
>>>>> So maybe that will conform to the API naming guideline?  Or would the 
>>>>> verb have to be in the base name of the func?
>>>>> 
>>>>> Or perhaps:
>>>>> 
>>>>> synchronously(dispatch work: …)
>>>>> asynchronously(dispatch work: …)
>>>>> 
>>>>> 
>>>>> 
>>>>>> On May 11, 2016, at 9:32 AM, James Dempsey via swift-evolution 
>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>> 
>>>>>> The method names
>>>>>> 
>>>>>>  synchronously()
>>>>>>  asynchronously() 
>>>>>> 
>>>>>> are both adverbs, not noun phrases or verb phrases.
>>>>>> These methods have side effects, so each name should have a verb in it 
>>>>>> to make it a verb phrase.
>>>>>> 
>>>>>> 
>>>>>> Since these are the methods where you actually dispatch a block into a 
>>>>>> queue
>>>>>> 
>>>>>> dispatchSynchronously()
>>>>>> dispatchAsynchronously()
>>>>>> 
>>>>>> would include the verb in the name of the methods.
>>>>>> 
>>>>> 
>>>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to