Re: Overriding GMP objects
On Thu, Jun 27, 2024, at 06:07, Saki Takamachi wrote:
>
> I agree with Gina. Being able to change the class of a computed result of an inherited child
> class causes several problems.
>
> The points raised in the BCMath\Number
discussion can be summarized as follows.
>
> - If it is possible to perform calculations on parent Class and child Class, what should the
> resulting class be?
Ask the class what it wants to be?
> - Multiplying the distance class and the speed class should give you the time class.
That would depend on the library’s implementation.
> - Similarly, multiplying two distance classes together should yield an area class.
See above.
> - If only child classes have a property that should be specified in the constructor, how do you
> determine the value of this property in the result class? Perhaps it is possible to determine the
> value of the property, but in that case the commutativity of the computation should be lost.
This can be handled via the child class in static methods, per the library specifications.
>
> These problems cannot be solved without significant complexity. And there is a possibility that
> it cannot be resolved in the first place.
I very much disagree; there is very little complications in the extension. It’s actually quite
simple:
If one value is scalar and the other an instance of GMP, for binary ops, ask the GMP class to
perform the operation. (This is a one-linish change)
If both are GMP instances, in a binary op, ask the left-most one to perform the op. The default GMP
implementation will delegate to the right-side if the right side isn’t a base-GMP instance,
otherwise, business as usual.
And that’s pretty much it, other than defining the base-type ops.. From there, you can implement
any units library you want, with whatever behavior makes sense — so long as the base
representation is a number.
If I remember the original operator overloading RFC, this is exactly what was asked for by the
people who voted no. In theory, it should pass if brought as an RFC.
— Rob
Thread (11 messages)