I've requested The Perl Foundation to cancel my currently running grant "Perl 6 Bugfixing and Performance of Rationals / Fixing Constraints on Constants" on the grounds that a more detailed investigation into proposed features that occurred during the course of the grant showed many of them to be unwanted or unimplementable.

Since any further grant's work now differs significantly from what the TPF and community voted on, I prefer to cancel the grant and perform any of the remaining work on a volunteer basis, whenever I get a chance.

No payments will be made for any of the completed work to date and it is to be deemed to have been performed on a volunteer basis.

Summary of Changes from Original Proposal and Reasons for Cancellation

The originally promised MidRat type is not going to be implemented. It was deemed to be likely a bad idea, as was described in my May Grant Report The original proposal claimed Rats with larger-than-64-bit denominators resulted in precision loss in certain operations. Further investigation revealed that the actual cause of apparent precision loss were were bugs in Num stringification precision (now-fixed by my Grisu3 algo work) and the implementation of Rational.Str method (now largely fixed by another person). Some of the originally hoped-for performance improvements due to nativization of denominator of Rat might not be achieved. In MidRat -less paradigm, the Rat type can have a denominator larger than 64-bits under some conditions, making native types unsuitable to hold it. In addition, Rakudo currently boxes native types returned from methods, and until that is avoided, switching to native types would likely be detrimental to performance. ZeroDenominatorRational role was unimplementable. While the original grant proposal speculated that might be the case, it took me almost no time to hit a roadblock with this approach, making it a largely irrelevant item on the original proposal. Normalization of Zero Denominator Rationals was promised on the proposal, but is blocked by 6.c language specification. Additionally, it's blocked from being changed in 6.d specification due to a rule that requires at least one working implementation of a feature, and it cannot be implemented in Rakudo yet, as we currently lack a mechanism to discern caller's language version. Lastly, the bonus work that was promised would require me learning a bunch of new things about MoarVM. While that's doable, there are much more pressing matters that I could tend to instead—such as Rakudo's stability and spec compliance on Windows and preparation for 6.d language release.

In conclusion, I believe were this grant to be completed, the result would differ significantly from what was voted on during grant's proposal. For that reason, I wish to cancel it. The remaining work on the grant that is still doable will be performed by me on a volunteer basis, when the time allows.