“Any sufficiently complicated concurrent program in another language contains an ad hoc informally-specified bug-ridden slow implementation of half of Erlang.” – Virding’s first rule of programming
Interesting. When you give a third-party access to your GitHub repositories, you also have to trust that the third-party implements all of GitHub’s security policies. This must be very hard to actually assume.
Unfortunately that’s the case because large US-based companies can leverage their existing global sales / marketing / governance setup to rationalize very high exit valuations. In the EU we don’t have the large software shops that can do that. So for an EU based startup - it’s exit to a US-based company or go all the way to an IPO / profitability.
Copenhagen’s sewage system was built in the 1850s and it was indeed considered to build a two-pronged solution. There was much resistance against this because it would eliminate a whole industry of “night men” (poop collectors), as well as people drying and trading it as fertilizer. So they build a single-pronged solution that was initially only allowed to be used for rain water.
Coroutines are great in a single threaded environment. But if you mix them with threads - even behind the scenes - there will be dragons. Erlang solves that problem with proper light weight isolated processes.
In a modern JIT with dynamic decompilation you can do these things in place, because the compiler essentially has global knowledge. The only real issue is to define the semantics (and then implement it of course). Objective-C is AOT compiled so the runtime checks are needed all the time.
It’s easier when you write your application in Elixir or Erlang. Those are practically DSLs for state machines that also double as general purpose programming languages.