I'm not saying their implementation isn't good, it is good. And probably message-passing is the right concurrency primitive to expose at a language level for people who want to take advantage of multi-core machines running concurrent code.
I'm not downplaying anything; I'm expressing merely that with a title like "Goroutines: The concurrency model we all..." makes it sounds like go invented something new, but afaict, they're just a well-engineered implemention of already well-understood concurrency principles.
100%, as I was reading the article I was remembering the different types of concurrency mechanisms I've used and I think it's helpful to have something like goroutines as a first-class language feature but it's not new in any way.
When it comes to concurrency I think it's good to go through the curriculum:
- main loop + interrupt handler
- processes (fork)
- multi-core concerns
- threads (now is a good time to learn about mutex, semaphore, critical section)
- lightweight threads (fiber, coroutines, green threads): learn how they are different
- async/await statemachines written by the compiler
Ok, now we have the background info to make wise choices and call things by their generalized names to avoid holy wars.
I'm not downplaying anything; I'm expressing merely that with a title like "Goroutines: The concurrency model we all..." makes it sounds like go invented something new, but afaict, they're just a well-engineered implemention of already well-understood concurrency principles.