<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">i've had a bit of fun with stackless, and it's nice, but the GIL is a problem, ouch<br><br>Terracotta is interesting too!<br>......<br><br>there's a nice presentation here.<br><br>http://blip.tv/file/2232410<br><br>Nice post Rick, concise at at the point... straight from the horses mouth.<br><br>I like it! :-) <br><br><br><br>--- On <b>Wed, 18/11/09, Rick Moynihan <i>&lt;rick.moynihan@gmail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Rick Moynihan &lt;rick.moynihan@gmail.com&gt;<br>Subject: Re: [dundee] Concurrent Programming on Linux<br>To: "Tayside Linux User Group" &lt;dundee@lists.lug.org.uk&gt;<br>Date: Wednesday, 18 November, 2009, 10:04<br><br><div class="plainMail">2009/11/17 Gary Short &lt;<a ymailto="mailto:gary@garyshort.org"
 href="/mc/compose?to=gary@garyshort.org">gary@garyshort.org</a>&gt;:<br>&gt; All,<br>&gt;<br>&gt; Which is the best programming language to use for concurrent programming on<br>&gt; Linux? By best I also mean one that has a rich library for handling JSON and<br>&gt; XML input too – I don’t want to go back to the RegEx stone age. J<br><br>Hey Gary,<br><br>Good question, and as is always the case it depends specifically upon<br>the details of the problem, and what you think is important.&nbsp; What do<br>you mean by best?&nbsp; How important are:<br><br>- Speed of sequential execution<br>- Scaling up across cores<br>- Scaling out across machines<br>- Expresivity, familiarity, interop, programming paradigm etc<br><br>Regardless here's some suggestions:<br><br>- Clojure<br><br>&nbsp; + JVM based (best library support of any platform - seamless Java interop)<br>&nbsp; + Functional language, immutable data<br>&nbsp; + All reference types have strong
 concurrency semantics<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Atoms, CAS style atomic updates on single values<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Refs, Built in Software Transactional Memory (STM) for<br>co-ordinated, synchronized change...<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Agents, for uncoordinated, unsynchronised change<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Vars, for thread-local bindings<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Assumes local concurrency model (i.e. you can safely peek at<br>values without blocking or freezing the world)<br>&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;- Terracotta (distributed JVM) can be used for distribution<br>&nbsp; + Fast (maybe 3-4x quicker than python) in the general sequential case<br>&nbsp; + Lisp (great metaprogramming... macros, parentheses etc...)<br>&nbsp; + Dynamically Typed<br>&nbsp; + Lots of good XML/JSON parsers available<br>&nbsp; + Multi-methods<br><br><a href="http://delicious/InkyHarmonics/clojure+video"
 target="_blank">http://delicious/InkyHarmonics/clojure+video</a><br><br>- Erlang<br><br>&nbsp; + Very good at parallelism, multi-core and scaling out<br>&nbsp; + Functional language, immutable data<br>&nbsp; + Actor model<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Message Passing<br>&nbsp; &nbsp;&nbsp;&nbsp;+ Concurrency model is ALWAYS distributed (even when its local) -<br>imposed complexity<br>&nbsp; + Robust &amp; fault tolerant<br>&nbsp; + XML/JSON parsers<br>&nbsp; + Clunky string processing<br>&nbsp; + Dynamically Typed<br>&nbsp; + Pattern Matching<br>&nbsp; + Excellent error handling... crash, burn and restart philosophy...<br>&nbsp; + OTP - framework for building HA systems<br><br><a href="http://delicious/InkyHarmonics/erlang+video" target="_blank">http://delicious/InkyHarmonics/erlang+video</a><br><br>Of the above Clojure is my favourite, and is more suited to general<br>purpose workloads than Erlang...&nbsp; Rich Hickey, the creator of Clojure<br>has
 proven to be an excellent ambassador of the language, providing<br>lots of good tech talks on clojure (all recorded).<br><br>If I was writing mission critical High Availability stuff, Erlang<br>would be my first choice.&nbsp; Other languages that you might consider<br>(but I know less about include):<br><br>- Objective Caml<br><br>&nbsp; + Incredibly fast....<br>&nbsp; + powerful ML static type system<br>&nbsp; + Immutable Data<br><br>- Haskell<br><br>&nbsp; + Purely functional, immutable data<br>&nbsp; + Very Strongly typed<br>&nbsp; + Fast<br>&nbsp; + lazy evaluation<br>&nbsp; + Very academic but has XML/JSON parsers and is used in the real world.<br>&nbsp; + STM, lots of concurrency stuff...<br><br>- Scala<br><br>&nbsp; + JVM Based (awesome library support via Java... pretty good java interop)<br>&nbsp; + Actors<br>&nbsp; + multi-paradigm<br>&nbsp; + Strongly typed<br>&nbsp; + Mostly just "a better Java/C#"<br>&nbsp; + As it doesn't favour
 immutability it's IMHO less suited to<br>handling concurrency problems.<br><br>Alternatively if you don't actually care too much about language level<br>support for parallelism you can get it (at the expense of lots of<br>memory) by pushing it to the O/S.... i.e. by making use of Unix system<br>calls for IPC, e.g. fork, pipe, kill, select etc... you can start a<br>bunch of separate O/S processes... This has been done recently with<br>great success in Unicorn (an almost pure Ruby HTTP Server), and is an<br>approach that can be adopted in most languages.<br><br>There is also stackless python, which might be of interest as it<br>simulates LOTS of parallelism with coroutines/continuations etc...<br>However the Global Interpreter Lock (GIL) means that you'll never be<br>able to take advantage of multiple cores... meaning its main use is if<br>you spend a lot of time waiting on I/O.<br><br>All of these languages work excellently on Linux... they probably
 also<br>work well on Windows too.<br><br>No doubt see you soon mate,<br><br>R.<br><br>_______________________________________________<br>dundee GNU/Linux Users Group mailing list<br><a ymailto="mailto:dundee@lists.lug.org.uk" href="/mc/compose?to=dundee@lists.lug.org.uk">dundee@lists.lug.org.uk</a>&nbsp; <a href="http://dundeelug.org.uk" target="_blank">http://dundeelug.org.uk</a><br><a href="https://mailman.lug.org.uk/mailman/listinfo/dundee" target="_blank">https://mailman.lug.org.uk/mailman/listinfo/dundee</a><br>Chat on IRC, #tlug on irc.lug.org.uk<br></div></blockquote></td></tr></table><br>