forked from gasc/Clojuratica
-
Notifications
You must be signed in to change notification settings - Fork 2
/
clojuratica.html
327 lines (327 loc) · 16.7 KB
/
clojuratica.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>Clojuratica</title>
</head>
<body>
<h2 style="text-align: center;">What is Clojuratica?<br>
</h2>
<div class="paragraph" style="text-align: left; display: block;">Clojuratica
brings together two of today's most exciting tools for
high-performance, parallel computation.<br>
<br>
<a href="http://clojuratica.weebly.com/#clojure">Clojure</a>
is a new dynamic programming language with a compelling approach to
concurrency and state, exciting facilities for functional programming
and immutability, and a growing reputation for doing all the right
things. <a href="http://clojuratica.weebly.com/#mathematica">Wolfram
Mathematica</a>
is arguably the world's most powerful tool for numerical computation,
symbolic mathematics, optimization, and visualization and is built on
top of its own splendid functional programming language.<br>
<br>
By linking the two:<br>
<ul>
<li>Clojuratica lets you <span style="font-weight: bold;">write and
evaluate Mathematica code in Clojure</span> with full <span
style="font-weight: bold;">syntactic integration</span>.
Now Clojure programs can take advantage of Mathematica's enormous range
of numerical and symbolic mathematics algorithms and fast matrix
algebra routines.</li>
<li>Clojuratica provides the <span style="font-weight: bold;">seamless
and transparent translation of native data structures</span>
between Clojure and Mathematica. This includes high-precision numbers,
matrices, N-dimensional arrays, and evaluated and unevaluated
Mathematica expressions and formulae. </li>
<li>Clojuratica lets you <span style="font-weight: bold;">call,
pass, and store Mathematica functions just as if they were first-class
functions in Clojure</span>.
This is high-level functional programming at its finest. You can write
a function in whichever language is more suited to the task and never
think again about which platform is evaluating calls to that function.</li>
<li>Clojuratica facilitates <span style="font-weight: bold;">the
"Clojurization" of Mathematica's existing parallel-computing
capabilities</span>.
Mathematica is not designed for threads or concurrency. It has
excellent support for parallel computation, but parallel evaluations
are
initiated from a single-threaded master kernel which blocks until all
parallel evaluations return. By contrast, Clojuratica includes a
concurrency framework that lets multiple Clojure threads execute
Mathematica expressions without blocking others. Now it is easy to run
a simulation in Clojure with 1,000 independent threads asynchronously
evaluating processor-intensive expressions in Mathematica. The
computations will be farmed out adaptively and transparently to however
many Mathematica kernels are available on any number of processor
cores, either locally or across a cluster, grid, or network.</li>
</ul>
Clojuratica
is open-source and targeted at applications in scientific computing,
computational economics, finance, and other fields that rely on the
combination of parallelized simulation and high-performance
number-crunching. Clojuratica gives the programmer access to Clojure's
most cutting-edge features<span
style="font-size: 12pt; font-family: "Times New Roman","serif";">—</span>easy
concurrency and multithreading, immutable persistent data structures,
and software transactional memory (<a
href="http://clojuratica.weebly.com/#clojure">more on Clojure</a>)—alongside
Mathematica's world-class algorithms for numerics, symbolic
mathematics, optimization, statistics, visualization, and
image-processing (<a href="http://clojuratica.weebly.com/#mathematica">more
on Mathematica</a>).<br>
<br>
The canonical pronunciation of <span style="font-style: italic;">Clojuratica
</span>starts with <span style="font-style: italic;">Clojure </span>and
rhymes with <span style="font-style: italic;">erotica</span>.</div>
<div>
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
<hr
style="border: 0pt none ; margin: 0pt auto; background-color: rgb(119, 119, 119); color: rgb(119, 119, 119); height: 1px; text-align: center; width: 100%;">
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
</div>
<h2 style="text-align: center;">News</h2>
<div class="paragraph" style="text-align: left; display: block;">11/22/09:
Version 2 alpha 2 was released today. Added is the evaluator flag :N
(and corresponding flag :no-N). Like the Mathematica function N, it
stands for numeric. When enabled, the flag speeds up by a factor of 10
the Mathematica-to-Clojure parsing of homogeneous numeric lists (and
multidimensional arrays). The trade-off is that the contents become
doubles. The flag affects what would otherwise become Clojure
vectors/seqs of integers, doubles, bigints, and bigdecimals; these are
all cast to vectors/seqs of doubles. Vectors/seqs of rationals (Clojure
ratios) are unaffected by the flag and receive neither casting nor
speedup.<br>
<br>
11/20/09: Version 2 alpha 1 was released today! Please see <a
href="http://clojuratica.weebly.com/intro.html">Intro</a>
for more information. Yes, we skipped 1.x. With the new syntactic
integration and complete rewrite it seemed right to commemorate the
release with a full increment.<br>
<br>
8/22/09: Clojuratica v0.96 was <a
href="http://groups.google.com/group/clojuratica/browse_thread/thread/3f158bcc36cf7941">released</a>
today. The software is now feature-complete for v1.0. Standout
improvements in this release:<br>
<ul>
<li>Full Mathematica interface to Clojure. Call Clojure from
Mathematica with seamless data-type translation.<br>
</li>
<li>First-class
Mathematica functions in Clojure. Write Mathematica functions and call
them in Clojure as though they were Clojure functions. The evaluation
is handled transparently by Mathematica. Parallelization of the
function calls is automatic and transparent.<br>
</li>
<li>Greatly
improved internals. Better data structure handling. Data-type
translation is many times faster than before. Parallel computation
queue is lightening fast. <br>
</li>
<li>Rewritten Tutorial covering all features.<br>
</li>
</ul>
<br>
8/02/09:
Clojuratica v0.91 will be released later this week. The GitHub
repository already contains most of the new features, for those
ambitious enough to brave it without documentation.<br>
<br>
7/27/09: Clojuratica v0.9 was <a
href="http://groups.google.com/group/clojure/browse_thread/thread/0ded6395a679db4c">released</a>
to the Clojure community. Suggestions are <a
href="http://clojuratica.weebly.com/community.html">welcome</a>!</div>
<div>
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
<hr
style="border: 0pt none ; margin: 0pt auto; background-color: rgb(119, 119, 119); color: rgb(119, 119, 119); height: 1px; text-align: center; width: 100%;">
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
</div>
<div>
<div id="857257623974146" style="width: 100%;" align="left"><a
name="clojure"></a><a name="mathematica"></a></div>
</div>
<div>
<div id="745946112636527-parent" class="weebly-splitpane-2"
style="width: 100%;">
<div id="745946112636527-lhs" class="column"
style="margin: 0pt; padding: 0pt; overflow: visible; width: 49.9178%; float: left;">
<div style="padding-right: 5px;" class="columnlistp">
<h2 style="text-align: center;">More On Clojure<br>
</h2>
<div class="paragraph" style="text-align: left; display: block;">It has
been said that <a href="http://clojure.org">Clojure</a> feels like a
programming language beamed back from the near future. It is well
suited to "<a href="http://bc.tech.coop/blog/081201.html">concurrency-oriented
programming</a>," a new paradigm brought on by the proliferation of <a
href="http://en.wikipedia.org/wiki/Multi-core">multicore</a> machines
and high-performance computational clusters. <br>
<ul>
<li>Like Perl, Python, and Ruby, Clojure is a <a
href="http://en.wikipedia.org/wiki/Dynamic_programming_language">dynamic
programming language</a>. It facilitates fast and flexible program
development.</li>
<li>Like Haskell, ML, and Lisp, Clojure is a <a
href="http://www.joelonsoftware.com/items/2006/08/01.html">functional
language</a>. Its rich, immutable <a
href="http://clojure.org/data_structures">data structures</a> are <a
href="http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation/">persistent</a>,
allowing for all the <a href="http://clojure.org/state">benefits</a>
of functional programming without performance bottlenecks.</li>
<li>Clojure is a dialect of <a
href="http://www.paulgraham.com/rootsoflisp.html">Lisp</a>. It shares
Lisp's <a href="http://clojure.org/lisp">code-as-data philosophy</a>
and offers a powerful <a href="http://clojure.org/macros">macro system</a>.
These features make it <a href="http://www.paulgraham.com/avg.html">especially
expressive</a>.<br>
</li>
<li>Like
JRuby, Jython, and Groovy, Clojure offers seamless interoperability
with Java. To an even greater extent than those languages, it offers
the speed of pure Java bytecode. It <a
href="http://clojure.org/jvm_hosted">runs on the JVM</a> and is
therefore inherently cross-platform.<br>
</li>
<li>Like Erlang, Clojure is designed for <a
href="http://clojure.org/concurrent_programming">lockless concurrency</a>,
making Clojure programs quickly scalable to thousands of CPU cores.
Clojure's immutable data structures <a href="http://clojure.org/state">discourage
mutating state</a>, eliminating the need for locking in most cases. For
cases where mutable state is necessary, Clojure offers <a
href="http://clojure.org/concurrent_programming">built-in software
transactional memory (STM)</a>, the first general-purpose language to
do so. <br>
</li>
</ul>
There is a terrific set of <a
href="http://clojure.blip.tv/posts?view=archive&nsfw=dc">video
introductions to Clojure</a>
by Rich Hickey, Clojure's creator. Another excellent, shorter, less
philosophical, and more to-the-point set of video introductions is <a
href="http://www.youtube.com/watch?v=Aoeav_T1ARU">available on YouTube</a>.
<span style="font-style: italic;"><a
href="http://www.amazon.com/Programming-Clojure-Pragmatic-Programmers-Halloway/dp/1934356336/">Programming
Clojure</a></span> is Stuart Halloway's excellent book on the language.</div>
</div>
</div>
<div id="745946112636527-rhs" class="column"
style="margin: 0pt; padding: 0pt; overflow: visible; width: 49.0822%; left: 49.0822%; float: left;">
<div style="padding-left: 5px;" class="columnlistp">
<h2 style="text-align: center;">More On Mathematica<br>
</h2>
<div class="paragraph" style="text-align: left; display: block;"><a
href="http://www.wolfram.com/products/mathematica/index.html">Wolfram
Mathematica</a> is perhaps the <a
href="http://www.wolfram.com/products/mathematica/analysis/">most
powerful</a> piece of software available today for numerical and
symbolic mathematics, optimization, data visualization, and data
analysis.<br>
<ul>
<li>Like MATLAB — but to a <a
href="http://www.wolfram.com/products/mathematica/analysis/content/NumericalMatrixSystems.html">greater
extent</a>
— Mathematica provides a broad collection of built-in routines
for
linear algebra, matrix decomposition, symbolic mathematics,
optimization, differential equations, symbolic and numerical
integration, Fourier analysis, 2D and 3D visualization, image and photo
manipulation, exploratory data analysis, probability and statistics,
graph theory, number theory, geodesy, and access to the Wolfram
Research internet data feeds on finance, chemistry, geometry,
meteorology, astronomy, protein structure, and the human genome.</li>
<li>Mathematica is <a
href="http://www.wolfram.com/products/mathematica/overview/performance.html">fast</a>.
The speed of its algorithms across all domains <a
href="http://www.wolfram.com/products/mathematica/analysis/content/SubroutineLibraries.html">match</a>
those of numerical libraries for compiled languages. Meta-algorithms
for <a
href="http://www.wolfram.com/broadcast/videos/algorithmselection/">automatic
algorithm selection</a>
increase performance and make it possible to focus on the task at hand
rather than the algorithm used (the programmer retains the option to <a
href="http://www.wolfram.com/technology/guide/SelectiveMethodOverride/">override</a>
automatic selection).</li>
<li>Like Clojure and other Lisps, the Mathematica language is a <a
href="http://reference.wolfram.com/mathematica/guide/FunctionalProgramming.html">functional
language</a>. It supports <a
href="http://reference.wolfram.com/mathematica/tutorial/PureFunctions.html">pure
functions</a>. Like Lisps, Mathematica is <a
href="http://en.wikipedia.org/wiki/Homoiconicity">homoiconic</a>
(compare <a
href="http://reference.wolfram.com/mathematica/tutorial/EverythingIsAnExpression.html">Mathematica
expressions</a> with <a
href="http://en.wikipedia.org/wiki/S-expression">Lisp S-expressions</a>).
The bottom line: thinking in Mathematica is very similar to thinking in
Clojure.</li>
<li>Mathematica has built-in <a
href="http://www.wolfram.com/products/mathematica/newin7/content/BuiltInParallelComputing/">parallelization
capabilities</a>.
It is easy to build programs that take advantage of multiple
coordinated kernels running on multiple processor cores. It is equally
easy to distribute computations across a cluster or grid. The
Mathematica kernel, however, is designed for single-threaded
applications. Clojuratica fixes this.<br>
</li>
<li>Mathematica can produce stunning <a
href="http://www.wolfram.com/products/mathematica/newin6/content/HighImpactAdaptiveVisualization/">visualizations</a>
and <a
href="http://www.wolfram.com/products/mathematica/newin7/content/AutomatedChartingGraphics/">charts</a>.
It supports <a
href="http://www.wolfram.com/products/mathematica/newin7/content/BuiltInImageProcessing/">integrated
image-processing</a> that rivals that of Adobe Photoshop.</li>
<li>Mathematica provides free, seamless, over-the-internet access to
massive databases in areas as diverse as <a
href="http://www.wolfram.com/products/mathematica/newin7/content/IntegratedGenomicAndProteinData/">genomics</a>,
<a
href="http://reference.wolfram.com/mathematica/ref/ChemicalData.html">chemistry</a>,
<a
href="http://www.wolfram.com/products/mathematica/newin7/content/DynamicAstronomicalComputation/">astronomy</a>,
<a
href="http://www.wolfram.com/products/mathematica/newin7/content/IntegratedGeodesyAndGIS/">geopolitics
and geography</a>, and <a
href="http://reference.wolfram.com/mathematica/ref/FinancialData.html">finance</a>.</li>
</ul>
</div>
</div>
</div>
</div>
<div
style="overflow: hidden; clear: both; visibility: hidden; height: 0px;"></div>
</div>
<div>
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
<hr
style="border: 0pt none ; margin: 0pt auto; background-color: rgb(119, 119, 119); color: rgb(119, 119, 119); height: 1px; text-align: center; width: 100%;">
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
</div>
<h2 style="text-align: center;">Author</h2>
<div class="paragraph" style="text-align: left; display: block;"><span
style="font-style: italic;">Clojuratica </span>was created by Garth
Sheldon-Coulson, a graduate student at the <a href="http://www.mit.edu">Massachusetts
Institute of Technology</a> and <a
href="http://www.law.harvard.edu/index.html">Harvard Law School</a>.
See the <a href="http://clojuratica.weebly.com/community.html">Community</a>
page to find out how to contribute to <span style="font-style: italic;">Clojuratica</span>,
suggest features, report bugs, or ask general questions.<br>
</div>
<div>
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
<hr
style="border: 0pt none ; margin: 0pt auto; background-color: rgb(119, 119, 119); color: rgb(119, 119, 119); height: 1px; text-align: center; width: 100%;">
<div style="overflow: hidden; height: 20px; width: 100%;"></div>
</div>
<h2 style="text-align: center;">Legal</h2>
<div class="paragraph" style="text-align: left; display: block;">The
product names used in this web site are for identification purposes
only. All trademarks and registered trademarks, including "Wolfram
Mathematica," are the property of their respective owners. Clojuratica
is not a product of Wolfram Research. The software on this site is
provided "as-is," without any express or implied warranty.</div>
<div id="footer">
<div id="footer-content">Create a <a target="_top"
href="http://www.weebly.com/">free website</a> with <a target="_top"
href="http://www.weebly.com/" title="free website">Weebly</a></div>
</div>
</body>
</html>