swiftlang / swift-corelibs-libdispatch

The libdispatch Project, (a.k.a. Grand Central Dispatch), for concurrency on multicore hardware
swift.org
Apache License 2.0
2.47k stars 459 forks source link

[SR-5725] DispatchQueue.apply is unavailable #683

Open sharplet opened 7 years ago

sharplet commented 7 years ago
Previous ID SR-5725
Radar rdar://problem/34162804
Original Reporter @sharplet
Type Improvement
Environment Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42) Target: x86_64-apple-macosx10.9
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | libdispatch | |Labels | Improvement | |Assignee | ktopley-apple (JIRA) | |Priority | Medium | md5: 2bebab35e0011d92df8ef134f2df0ba5

Issue Description:

The diagnostics for the imported version of dispatch_apply(3) are contradictory:

  1> import Dispatch
  2> dispatch_apply
error: repl.swift:2:1: error: 'dispatch_apply' has been replaced by 'DispatchQueue.apply(attributes:iterations:execute:)'
dispatch_apply
^~~~~~~~~~~~~~
DispatchQueue.apply

  2> DispatchQueue.main.apply
error: repl.swift:2:15: error: value of type 'DispatchQueue' has no member 'apply'
DispatchQueue.main.apply
~~~~~~~~~~~~~~^~~~ ~~~~~

  2> DispatchQueue.apply
error: repl.swift:2:1: error: type 'DispatchQueue' has no member 'apply'
DispatchQueue.apply
^~~~~~~~~~~~~ ~~~~~

  2> DispatchQueue(label: "").apply
error: repl.swift:2:1: error: value of type 'DispatchQueue' has no member 'apply'
DispatchQueue(label: "").apply
^~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

The DispatchQueue.concurrentPerform() API provides an alternative, but doesn't allow controlling the queue that work will be executed on.

swift-ci commented 7 years ago

Comment by Pierre Habouzit (JIRA)

Controlling the queue to execute work on is a misfeature of dispatch_apply(), there are almost no valid use for it, which is why it was never made available to swift, and there's no plan to change this at this time.

We should fix the diagnostics so that dispatch_apply() redirects to concurrentPErform.

swift-ci commented 7 years ago

Comment by Kim Topley (JIRA)

Filed [rdar://problem/34162804] for this.

benrimmington commented 6 years ago

It looks like this was fixed in apple/swift#11777 for the SDK overlay.

Does the Private.swift file in swift-corelibs-libdispatch also need to be updated?