[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [numbers] propose making BigFraction an extension of Fraction

Thanks for this response and it took me some time to think your various
points through.

On Thu, Dec 13, 2018 at 4:59 PM Gilles <gilles@xxxxxxxxxxxxxxxxxxxxx> wrote:

> On Thu, 13 Dec 2018 11:20:12 -0800, Eric Barnhill wrote:
> > Among the elegancies afforded by this change, if a Fraction operation
> > causes overflow as previously discussed, a BigFraction could be
> > returned
> > and should be able to handle all further calls to Fraction unaltered.
> > (This
> > might not always be desired behavior, so Fraction may need to contain
> > a
> > setting to either throw and exception, or convert to BigFraction in
> > case of
> > overflow.)
> Doesn't this setting achieve at runtime what the application
> developer should decide at compile time (by instantiating the
> class that has the desired behaviour)?

Yes. Perhaps I have been spending too much time writing Python lately.

> >
> > So I propose writing a ticket for this change. As sub-points on the
> > ticket
> > the BigFraction class could be conformed to Fraction class in terms
> > of
> > reduction of constants and producing a VALJO.
> Inheritance and ValJO turn out being contradictory (see thread
> with subject "Inheritance and ValJO ?").
> And (IIUC) the workaround/alternative hinted at by Stephen
> in that same thread might not be directly applicable because,
> here, the instance fields are different in "Fraction" and
> "BigFraction" ("long" vs "BigInteger").
> I've just noticed that "BigInteger" is not final; hence
> "BigFraction" cannot be a ValJO either.[1]

It sounds like this is sufficient to disqualify this proposal.

I don't think that we should rule out a "Fraction" interface.

Since BigFraction and Fraction have the use cases covered for now
(improved, I would argue, by only the former requiring Big* classes) I
propose wrapping up this work and leaving this until after a release.

> [1] So this issue:
>        https://issues.apache.org/jira/browse/NUMBERS-75
>      should probably be resolved as "Invalid".

Done. But, there were some "peripheral" improvements that came out of
making Fraction a ValJO that should still be applied to BigFraction, for
example conforming both classes to use the same factory methods, and
reducing the absurd number of BigFraction constants. Shall I reopen and
rename the ticket to focus on these changes, or is it better to start a new