We have received the following grant application "RPerl Operators". Please leave feedback in the comments field by September 27th, 2015. If your comment does not appear in 24 hours, contact me at tpf-grants-secretary at perl-foundation.org. As we have four proposals on RPerl this time, please use RPerl User Documentation proposal if your comment is about RPerl in general and not specific to this proposal.
RPerl v1.1 has been released with a working N-body benchmark, as promised. Thanks to RPerl, we are now able to run N-body at the speed of C++, which was claimed by many in the Perl community to be impossible. This grant proposal is to create 20 additional operators in RPerl.
Benefits to the Perl Community
RPerl v1.1 is lacking the full power of accessibility to all Perl 5 operators.
The Perl community will benefit by increasing the usefulness and general- purpose applicability of the new RPerl optimizing compiler.
Deliverables for this grant proposal are:
- Implementations of 16 Perl operators in high-speed mode, already chosen
- Implementations of 4 Perl operators in high-speed mode, as chosen by TPF
- Documentation and usage examples of all 20 operators
In RPerl, high-speed mode is currently defined as CPPOPS_CPPTYPES mode, as differentiated from the slower PERLOPS_PERLTYPES and CPPOPS_PERLTYPES modes.
This grant proposal only covers creation of operators in CPPOPS_CPPTYPES mode.
I've already implemented some of the basic operators in CPPOPS_CPPTYPES:
https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Compare/LessThanGreaterThan.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Logical/Negation.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Math/AddSubtract.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Math/IncrementDecrement.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Math/MultiplyDivideModulo.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Math/Negative.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Math/Power.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/NamedUnary/Scalar.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/String/Concatenate.pm
I've already got PERLOPS_PERLTYPES versions with CPPOPS_CPPTYPES stubs for:
https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Bitwise/And.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Bitwise/OrXor.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Bitwise/Shift.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Compare/EqualNotEqual.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/List/Range.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Logical/OrXor.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Logical/And.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Cosine.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Keys.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Length.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Pop.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Push.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Sine.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Sort.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/Named/Values.pm https://github.com/wbraswell/rperl/blob/master/lib/RPerl/Operation/Expression/Operator/String/Repeat.pm
In addition to the 16 operators listed above, I will implement an additional 4 operators to be chosen by TPF or delegated to the Perl community for a vote of some kind. The only exception are operators which are not currently supported by RPerl, which will be replaced with another supported operator.
1a. Copy PERLOPS_PERLTYPES generator code into CPPOPS_CPPTYPES stub subroutine
1b. Study existing C++ operators
1c. Create new RPerl code to generate C++ output code from Perl input code
1d. Create tests of operator output, if not already done
2a. Copy RPerl template code into empty Perl module file
2b. Implement PERLOPS_PERLTYPES code generation subroutine
2c. Study existing C++ operators
2d. Create new RPerl code to generate C++ output code from Perl input code
2e. Create tests of operator output
3a. Create POD within each of the 20 operators' Perl module file
3b. Integrate POD with RPerl documentation, if TPF approves user doc grant
I will begin work immediately upon granting.
I expect work to take approximately 30 to 60 days.
I will release a new version of RPerl to CPAN with support for the operators.
I am the creator and lead developer of RPerl.
I've spent the last 32 months working on RPerl without the support of TPF.
I would like that to change now.