> On May 10, 2016, at 11:52 PM, Jacob Bandes-Storch via swift-evolution 
> <[email protected]> wrote:
> 
> 
>         * What is your evaluation of the proposal?
> 
> I'm generally in favor of a modernized API overlay like this (and I've 
> written something like it myself, albeit much simpler), but I'm hoping this 
> proposal can go through another round or two of 
> discussion/bikeshedding/revision before approval.
> 
> (Small note: I'm really happy about the strong-typed-ness of the Source 
> subclasses, e.g. how mergeData is only available for Add/Or.)
> 
> In no particular order, here are some things on which I'm unclear, or 
> not-so-+1:
> 
> - synchronously()'s block parameter should be @noescape. Perhaps more 
> arguably, it should have a generic return type and rethrows, like 
> autoreleasepool now does.

Both of these are present in the changes I have for this proposal. The former 
point is a mistake in my proposal text, the latter is an unfortunate oversight 
on my part in putting together the proposal document.

> - The names asynchronously(execute:) and synchronously(execute:) don't seem 
> to fit with any API guidelines I'm aware of. Did you consider including the 
> verb in the method name?  

We did. Of the number of names that we discussed, none of them were perfect. 
sync/async are common in other languages but don’t fit the general direction of 
the Swift 3 naming conventions. Using `dispatchAsynchronously` is an extremely 
long method name, even more so than `asynchronously`. `perform` does not 
capture the sync/async nature of the calls particularly well, compared to 
DispatchWorkItem where `perform` immediately executes the block.

> (And I'm guessing that "func synchronously(work:...)" is meant to be "func 
> synchronously(execute work:...)”?)

Right.

> As another bikeshed-item, I'd vote for "Data.init(withoutCopying:...)" rather 
> than "(bytesNoCopy:...)", and perhaps whenDone() instead of notify().

Here the init() functions closely mirror Data from Foundation, the Objective-C 
class is toll-free bridged to NSData and we desired a close match to the 
Foundation Swift API. `notify` is Dispatch-only API though, I’ll go think over 
that one.

> - Are DispatchWorkItemFlags meant to overlay dispatch_block_flags? It would 
> be nice to explicitly list these in the proposal.

The dispatch_block_* API is completely superseded by DispatchWorkItem in the 
proposal. DispatchWorkItemFlags is the equivalent to dispatch_block_flags.

> - Are functions like dispatch_barrier_sync totally gone in favor of passing a 
> .barrier flag? It would be nice to explicitly state this in the proposal.

Yes, you can supply .barrier to either `synchronously` or `asynchronously`, or 
create a DispatchWorkItem as a barrier item. Where possible the multiple 
variants of a class (dispatch_async, dispatch_barrier_async, etc) are collapsed 
into a single method with default arguments.

> - I echo Austin's concerns about subclassability. I think it would be 
> dangerously misleading if the classes were subclassable from user code, even 
> if it didn't work properly.

Building at compile time will fail. So you wouldn’t get very far trying to use 
them, I plan to investigate adding `final` here (it’s only absent for technical 
reasons, as the classes originate from Objective-C).

> - What of the APIs provided on Semaphore and Group objects? I'd like to see 
> these before I vote for the proposal.

These would be transformed similarly, I will include them when updating the 
proposal.

class DispatchSemaphore : DispatchObject {                                      
                                                                           

  init(value: Int)

  func wait(timeout: DispatchTime = default) -> Int

  func wait(walltime timeout: DispatchWalltime) -> Int

  func signal() -> Int

}

class DispatchGroup : DispatchObject {

  init()                                                                        
                                        

  func wait(timeout: DispatchTime = default) -> Int

  func wait(walltime timeout: DispatchWalltime) -> Int

  func notify(queue: DispatchQueue, block: () -> Void)

  func enter()

  func leave()

}


> - What will dispatch_set_target_queue's replacement look like look like?

extension DispatchObject {                                                      
                                                                           

  func setTargetQueue(queue: DispatchQueue?)

}

> 
> - What about dispatch_once?

Removed. Swift already has lazy initialisation at the language level, 
dispatch_once is neither needed nor safe in Swift.

> - Why use class funcs for the Source initializers, rather than an init on 
> each individual subclass?

Implementation limitations. The “subclasses" are protocols would be introduced 
in order to attain a level of type safety around DispatchSource. We felt this 
was a significant enough improvement that it was worth including even with this 
implementation wart.

> 
> - Since DispatchSpecificKey is an object now, is there any concern with the 
> object being allocated at the same address as an old, since-deallocated, 
> object? (This might cause user confusion if both were used as "different" 
> keys.)

The intention, though something that cannot be enforced, is that 
DispatchSpecificKey would be a global static object. I’d be interested if 
anyone has a pattern that more throughly enforces the allocation pattern 
required by the underlying API.

> 
> 
>         * Is the problem being addressed significant enough to warrant a 
> change to Swift?
> 
> Yes.
> 
>         * Does this proposal fit well with the feel and direction of Swift?
> 
> Getting there.
> 
>         * How much effort did you put into your review? A glance, a quick 
> reading, or an in-depth study?
> 
> Medium-quick reading of this proposal. I've thought about this issue a good 
> deal in the past, though.
> 
> Jacob
> 
> On Tue, May 10, 2016 at 9:39 PM, Chris Lattner via swift-evolution 
> <[email protected]> wrote:
> Hello Swift community,
> 
> The review of "SE-0088: Modernize libdispatch for Swift 3 naming conventions" 
> begins now and runs through May 17. The proposal is available here:
> 
>         
> https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.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.
> 
> What goes into a review?
> 
> The goal of the review process is to improve the proposal under review 
> through constructive criticism and contribute to the direction of Swift. When 
> writing your review, here are some questions you might want to answer in your 
> review:
> 
> 
> More information about the Swift evolution process is available at
> 
>         https://github.com/apple/swift-evolution/blob/master/process.md
> 
> Thank you,
> 
> -Chris Lattner
> Review Manager
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to