012bb7448e202f5c147dee5599a23e03a820091f
[wiki.git] / tmarble / posts / 10000_Processes_in_Om.mdwn
1 # 10,000 Processes in Om
2
3 I have just published [om-processes][om-processes] which
4 is a port of David Nolen's [10,000 Processes][swannodette-10k]
5 in [Clojurescript][clojurescript] to [Om][om].
6
7 Clojurescript is a port of [Clojure][clojure] to JavaScript which
8 is especially well suited for running in a browser. Just as
9 Clojure offers a pleasant LISP on the JVM Clojurescript
10 offers (nearly the same) LISP in the browser. The performance
11 of Clojurescript is outstanding due to the massive optimizations
12 available from the [Google Closure compiler][closure].
13
14 JavaScript, however, has some fundamental flaws... Top
15 among these are it is single threaded which leads to
16 an asynchronous callback style of "event programming".
17 Clojure's [core.async][core.async] offers a solution
18 in the form of [CSP][csp] style programming. Using core.async
19 one can *think* about coding in a more intuitive way.
20
21 In [10,000 Processes][swannodette-10k] Nolen demonstrates
22 using core.async to simulate independent "threads" despite
23 the fact that the underlying platform has no native
24 support for threads.
25
26 In [Om][om] Nolen leverages [Facebook's React][react] to
27 create a high performance, immutable model for client programming.
28
29 The technical study [om-processes][om-processes] is simply
30 the fusion of all these ideas into one demonstration.
31 Who knew web development could be so much fun!
32
33 [om-processes]: https://github.com/tmarble/om-processes
34 [swannodette-10k]: http://swannodette.github.io/2013/08/02/100000-processes/
35 [clojurescript]: http://github.com/clojure/clojurescript
36 [om]: https://github.com/swannodette/om
37 [clojure]: http://clojure.org
38 [closure]: https://developers.google.com/closure/
39 [core.async]: https://github.com/clojure/core.async/
40 [csp]: http://en.wikipedia.org/wiki/Communicating_sequential_processes
41 [react]: http://facebook.github.io/react/
42
43 [[!taglink clojure clojurescript om]]