<story><title>Fearless Concurrency: Clojure, Rust, Pony, Erlang and Dart</title><url>https://sites.google.com/a/athaydes.com/renato-athaydes/posts/fearlessconcurrencyhowclojurerustponyerlanganddartletyouachievethat</url></story><parent_chain></parent_chain><comment><author>tombert</author><text>I&amp;#x27;m a bit surprised that there didn&amp;#x27;t appear to be any mention of Clojure&amp;#x27;s built-in concurrency support outside of basic immutability.  core.async gives a nice channel-based system, agents give an actor-ish system, and STM&amp;#x2F;atoms let you mutate the variable safely, without having to manually work with locks.&lt;p&gt;This is definitely a good high-level article, just something I was surprised by, since core.async is what drove me (and several other people I know) to start using Clojure.&lt;p&gt;EDIT: Just a note that I know core.async isn&amp;#x27;t built in, that was a mistake.  It &lt;i&gt;is&lt;/i&gt; a first-party library, however.</text></comment>
<story><title>Fearless Concurrency: Clojure, Rust, Pony, Erlang and Dart</title><url>https://sites.google.com/a/athaydes.com/renato-athaydes/posts/fearlessconcurrencyhowclojurerustponyerlanganddartletyouachievethat</url></story><parent_chain></parent_chain><comment><author>antirez</author><text>What&amp;#x27;s great about the actor model is that you can kinda apply it in languages not having such native support. Even if it will not be a strict model, with some education from the programmer it can do wonders and can be backed by lock free queues. What I see as a problem is always they for a thread to wait on new items a syscall must be executed which is costly. But one could use a spinlock a few cycles and later degradate to syscall.</text></comment>