[Haskell-cafe] Implementing Mathematica

Lennart Augustsson lennart at augustsson.net
Wed May 30 18:17:21 EDT 2007


Why do you seem so in awe of Mathematica?  It's just another language with 
a good set of libraries.  Claims that it is the best, fastest, etc comes 
from Wolfram advertising, no doubt. :)

 	-- Lennart

On Wed, 30 May 2007, Andrew Coppin wrote:

> Date: Wed, 30 May 2007 22:15:55 +0100
> From: Andrew Coppin <andrewcoppin at btinternet.com>
> To: haskell-cafe at haskell.org
> Subject: Re: [Haskell-cafe] Implementing Mathematica
> 
> Jon Harrop wrote:
>> I noticed a recent thread about writing a Mathematica implementation in 
>> Haskell.
>
> Yeah, that was me.
>
>> I think this is an excellent idea and would be a great project for a 
>> Haskell newbie.
>
> Uh... I think it's actually a tad harder than it looks. [Understatement!]
>
>> 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.
>> 
>
> Are you serious?! o_O
>
>> 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.
>> 
>
> Now this is interesting. The claim is that Mathematica is the fastest, most 
> powerful software on planet earth, second to none. Actually it turns out that 
> at least for factoring moderately big integers, pari/gp seems to be a fair 
> bit faster (50% or so). I have no idea about the rest.
>
> Note that (as I understand it) GHC implements Haskell's Integer type using 
> the GMP. And for some reason or other, they want to remove this feature...
>
>> 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).
>> 
>
> Erm... have you seen Mathematica 6? That's OpenGL accelerated too. I've just 
> been playing with it in fact - it's pretty fast as far as I can tell.
>
>> 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.
>> 
>
> Haskell has pattern matching, but what Mathematica does is much more 
> sophisticated. I have tried to implement it several times, and failed. (But 
> that was Pascal, this is Haskell...)
>
>> 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.
>> 
>
> What...the...hell...?
>
> Mathematica contains the largest, most comprehensive set of implementations 
> of special functions anywhere in the world. It has a *vast* collection of 
> identities and transformation rules constituting man-centuries of R&D work. 
> It has cutting edge symbolic integration capabilities. It has multiple 
> numerical solver algorithms. It has...
>
> Yeah, should only take 5 minutes or so to exceed those capabilities. Easy 
> really...
>
>> 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.
>> 
>
> OK, so you're saying that in 4 days you wrote something that out-performs 
> Mathematica, a program that has existed for decades and has a vast, 
> highly-funded R&D effort behind it featuring some of the brightest minds in 
> the field?
>
> I'm in a state of disbelief here.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


 	-- Lennart


More information about the Haskell-Cafe mailing list