[Haskell-cafe] Implementing Mathematica
Jon Harrop
jon at ffconsultancy.com
Wed May 30 02:04:31 EDT 2007
I only just subscribed to this mailing list and I am a complete Haskell
newbie, so forgive me if this is too OT.
I noticed a recent thread about writing a Mathematica implementation in
Haskell. I think this is an excellent idea and would be a great project for a
Haskell newbie. I wrote a toy Mathematica implementation in OCaml while I
waited to be viva'd for my PhD. It garnered so much interest that Wolfram
Research bought it from me for £4,500 and gave me several free copies of
Mathematica.
Regarding the specific points made:
1. Numerical libraries: you should be able to reuse existing libraries like
GMP, BLAS, LAPACK, FFTW and so on. These are often much faster than
Mathematica's. For example, FFTW was about 4x faster than Mathematica's FFT
the last time I benchmarked it. However, they do not support interval
arithmetic.
2. GUI: I would take our existing vector graphics software:
http://www.ffconsultancy.com/products/smoke_vector_graphics/
http://www.ffconsultancy.com/products/fsharp_for_visualization/
and rewrite it in Haskell as the foundation. This would far exceed anything
that Mathematica has to offer, in part because Mathematica's graphics are
still evaluated via the completely generic rewrite engine which is extremely
slow. Our code already implements high-performance hardware-accelerated
vector graphics and it is probably one of the first things I would consider
porting to Haskell (if there is any commercial interest in such a library).
3. The language: the hardest part of reimplementing Mathematica is inferring
what it means (there are no formal evaluation semantics). Once you've done
that it is just a case of implementing an extensible term rewriter and
putting in about 20 core rules. The pattern matcher is well under 100 LOC and
you can do various things to make it more efficient. There are two tricks
that vastly improve performance of the rewriter: return physically identical
results whenever possible, and perform substitution and evaluation at the
same time rather than as two separate passes.
4. Libraries: You should have no trouble exceeding the capabilities of
Mathematica by pulling in existing libraries. For example, Mathematica
provides no wavelet transforms, no time-frequency transforms, no function
minimization over an arbitrary number of variables etc.
Having worked in numerical computing for many years, I can say that
Mathematica is an excellent tool for prototyping and for doing disposable
analyses but many people reach for conventional languages when Mathematica's
capabilities run dry.
You should easily be able to implement a rewriter for the language that is ten
times faster and doesn't leak.
Incidentally, my implementation of Mathematica in OCaml took four days, and it
was one of my first OCaml programs.
--
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