
Hi Neil, On Nov 17, 2006, at 7:44 PM, Neil Mitchell wrote:
- do all those who want to distribute binaries, but not dynamically linked, need bignums? - it would be nice to know just how far off a good haskell version would be performance-wise.. - what would be a killer for numerical programming, might still be quite acceptable for a substantial part of haskell uses?
One advantage you probably haven't thought of is the size of the binary. Currently GMP adds about 50Kb on to the Yhc runtime, for what in the most cases is probably an occasional addition. If the bytecode for a bignum library was less than this then there could be a substantial size saving.
The entire static GMP library is 1.090976 MB on my machine (Mac OS X), so 50KB is not much for the static linker to include. A replacement library should be smaller (written in Haskell it would be much larger but only included as necessary): maybe 30-40KB. Depending on the compiler used for the replacement library, the code could be even smaller (for Intel it might be larger, for Microsoft CL, IBM XL or Sun CC it should be smaller). GCC has historically produced relatively large binaries; though v4.2 might be a little better I can't count on that as MinGW still distributes 3.5. The replacement library would still add a bit to every binary if it was included in the runtime. Fortunately for Yhc, bytecode programs may be much smaller. For other Haskell compilers dynamic libraries are only alternative to a library (as opposed to primitive) implementation of Integer.
(Of course, Yhc has absolutely no license issues with libgmp, and would have substantially worse performance than GHC at bignum optimisation)
That is always subject to change :) Cheers, Pete