[Haskell-cafe] Re: Mathematica
Jon Harrop
jon at ffconsultancy.com
Tue Jun 12 14:05:13 EDT 2007
On Tuesday 12 June 2007 18:41:34 Tomasz Zielonka wrote:
> On Sun, May 13, 2007 at 02:19:55PM +0100, Andrew Coppin wrote:
> > Writing *insanely* efficient number chrunking software requires a deep
> > understanding of the target architecture, and lots of playing with very
> > low-level constructs. Assembly is really the only language you can do it
> > with; even C is probably too high-level.
Just reuse existing libraries: BLAS, LAPACK, ATLAS, FFTW. The free libraries
that I have benchmarked were all much faster than Mathematica. FFTW was 4x
faster on average, for example.
> > The "notebook" interface is very sophisticated and clearly beyond the
> > capabilities of any current GUI toolkit for Haskell. (Implementing this
> > would be approximately as hard as writing a full web browser in Haskell.)
Yes. Our technical presentation software took 6 man months but it supported
antialiasing, real-time visualization and zooming and panning of the whole
GUI. A simple notebook interface rendering to OpenGL would only be ~20kLOC of
OCaml/Haskell.
> > The pattern matching engine could be implemented, but it's not a trivial
> > task. Mathematica's pattern matching is quite sophisticated. It would
> > take someone a while to do, that's all.
Beyond the pattern matchers in ML and Haskell, Mathematica adds sequence
patterns. These just search linear sequences or permutations completely
naively.
For example, the obvious implementation of the higher-order map function has
quadratic complexity because Mathematica eagerly copies entire sub arrays "t"
unnecessarily:
map[_, {}] := {}
map[f_, {h_, t___}] := Prepend[map[f, {t}], f h]
Moreover, it does no decision-tree optimizations. Instead, it only optimizes
patterns in the symbol table (called "DownValues") that contain only single
static symbols into a hash table (called a "dispatch table"):
f[a] = 1
f[b] = 2
...
There are some undocumented tricks but you can achieve the same asymptotic
performance quite easily, e.g. hashconsing and memoization.
--
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
OCaml for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists/?e
More information about the Haskell-Cafe
mailing list