|
|
|
|
|
by lobster_johnson
3696 days ago
|
|
Go (which I think you're alluding to) has language-level concurrency because its syntax is extremely rigid. Swift's syntax is flexible enough that this isn't needed. Specifically: * Support for annotations; the compiler/runtime can be informed about safety and marshaling concerns.
* Anonymous function bodies. You can implement Go's "go func() { ... }()" pattern yourself, and a concurrency runtime can implement it. Rust uses the exact same pattern.
* Generic iterators/streams. No need for channels as language primitive since you can write a generic channel implementation. Go is nice, but its language-level concurrency is very much a side-effect of its intentionally impoverished type system. For example, the built-in "chan" type exists because otherwise a generic channel implementation would have to use interface{}, which is not type-safe and would be hell to work with. Here's what's lining up to become Swift 4.0's concurrency support (all the concurrency models!): https://github.com/apple/swift/blob/master/docs/proposals/Co.... |
|
Some enum and extension magic easily lets you write things like: