On Tuesday, 28 August 2018 at 20:05:32 UTC, Russel Winder wrote:
But that is the point, this is Python specific, and yet the motivating example is a misunderstanding of how Go is used. This inconsistency seriously undermines the general argument.

I don't believe I misunderstand how Go is used.  Trying to solve
every concurrency issue with processes and channels-- were you need some data silo to manage chunks of shared state-- is not exactly friendly to
casual or novice programmers, which is an important segment of the
population.

async/await is a means to explicitly mark points of context switching in API's and code. It applies to threads, coroutines, remote processing, or anything else which may allow something else to modify system state while you're waiting.

Certainly it is a language structure to support yield to the appropriate scheduler, the question is whether a language structure is required or it can be handled with library features. I suspect language feature makes things easier of implementation.

I'm in total agreement about using a library solution if possible, and
stated that in the original post.

Important news relevant to this thread: Kotlin has announced support of structured concurrency in its standard coroutine library, citing the "Go statement considered harmful" article as inspiration.

https://medium.com/@elizarov/structured-concurrency-722d765aa952

Kotlin appears to be a good example of supporting many concurrency mechanisms via a library. From the manual:

Many asynchronous mechanisms available in other languages can be
implemented as libraries using Kotlin coroutines. This includes async/await from C# and ECMAScript, channels and select from Go, and generators/yield
from C# and Python.

Furthermore it generalizes across different ways of managing shared state. A concurrency scope can span threads, so shared state must be accessed through locks or channels; or a scope can be pinned to a single thread, allowing the programming simplicity of Trio's single-threaded model.

Reply via email to