On May 27, 1:17 am, Per Bothner <[email protected]> wrote:
> This is another example of where structs would be helpful.  That would
> allow:
>
> struct Integer {
>    int ivalue;
>    int[] iwords;
>
> }
....
>
> Kawa basically does this using a regular class gnu.math.Integer,
> and "small" Integers pre-allocated.  That is one reason Kawa's
> arbitrary-precision handling is (mostly) noticeably faster than BigInteger.
> (Some of that could be achieved by further tweaking BigInteger.)

1: I'm intrigued.  How much does this give you?

I can see that you avoid a virtual call for all math operators where
you can determine the integer-ness of operands; so it does not have to
choose between SmallInt and BigInt objects.  But it comes at the
overhead of an extra word per integer.

Integer arithmetic (most notably X+1, X-1, and X==<constant>) used in
loops is currently a noticeable performance issue in Erjang (when
comparing to the normal erlang implementation using tags).  In many
such cases, I could avoid a virtual call and that does sound
appealing.

2: What is the motivation in Kawa to make your own bignum
implementation.  Why not just have

class KawaInteger {
   int ival;
   BigInteger bval;

   ...
}

i.e., fall back on the standard bignum implementation?


Kresten

-- 
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en.

Reply via email to