DONE DOING RPerl tests, number_arrayref_arrayref & string_arrayref_arrayref test $return_whole_value accessors & mutators for RPerl-defined data types in Class INIT block test $return_whole_value accessors & mutators for user-defined data types in Class INIT block Installer, CentOS 7 Support, copy from LAMP Installer to RPerl Installer MongoDB C++ driver in installer MongoDB documentation manual IS file changes 3D data structures *_arrayref_hashref_hashref stringify typetest t/06_hash *_*ref_*ref_hashref *_*ref_*ref_arrayref 2D data structures *_*ref_*ref To_string() for each data structure in C++, to_string() in Perl # DEV NOTE, CORRELATION #rp031: NEED UPGRADE: implement proper @array vs $arrayref, %hash vs $hashref, dereferencing, etc. Scalar.pm, ArrayDereference.pm, Keys.pm, HashDereference.pm, etc. add support for non-reference @arrays and %hashes re-align PERLOPS_PERLTYPES w/ CPPOPS_CPPTYPES behavior for pass-by-value vs pass-by-reference figure out how to add data types to PERLOPS_PERLTYPES @array and %hash variable declarations std::vector should be array and std::unique_ptr<std::vector> should be arrayref, etc. ArrayDereference & HashDerefence operators should actually dereference (unwrap) std::unique_ptr in CPPOPS_CPPTYPES, deref AVRV to AV in CPPOPS_PERLTYPES, etc. implement pertinent operators: scalar, keys, values stringify functions integer_array_to_string(), number_array_to_string(), integer_hash_to_string(), number_hash_to_string(), etc. somewhere in physicsperl or mathperl, there is a fake reference unwrap function for Perl, possibly for GMP or SSE or some other special C(++) data type foreach() loop and keys() operator in CPPOPS_CPPTYPES .travis.yml, disable dev version of Alien::Base::ModuleBuild v1.01_01, update min version required in Makefile.PL .travis.yml, disable Alien::GSL testing, update min version required in Makefile.PL META files in MANIFEST.SKIP??? Moo(se) support Always better subroutine/method return types; GRAMMAR new() accept properties init values; GRAMMAR subroutine arguments received via 'shift' instead of @ARG only; GRAMMAR package 'integer' exports sub 'integer()' to check type, and friends accessors & mutators available (only?) w/out using 'get_' & 'set_' prefixes; Class.pm PERLOPS_PERLTYPES, Properties.pm? CPPOPS_CPPTYPES When Moo(se) is enabled 'use parent' should not exist, replaced by 'extends'; GRAMMAR $properties should not exist, replaced by 'has'; GRAMMAR new() from Moo(se) instead of RPerl RPerl::Exporter re-enable t/10 & t/11 <<< ==== DO THIS FIRST!!! === >>> Class/Generator.pm, error if class name from 'use parent Foo' does not match class name from following 'use Foo' or '{ Foo->import(); }' Class/Generator.pm & Package.pm & Include.pm: CPPOPS_CPPTYPES fix & test *_CHECK*() exporting in rperlgmp.pm & rperlsse.pm, as hard-coded in rperlgsl.pm enable qw(:all) Learning RPerl new subroutine headers Learning RPerl PhysicsPerl MathPerl Quick-Start Guide finish Alien::zlib??? for SDL dependency on zlib.h, get SDL to add Alien::zlib as CPAN dependency; Alien::zlib::Static already exists but is it applicable? Alien::PkgConfig??? for MongoDB driver build support Alien::MongoDB??? Alien::MongoCXX??? Alien::Pluto CPAN testers stability Alien::Texinfo add minimum version checking when Alien subsystem supports it in non-PkgConfig software like Texinfo Alien::astyle upgrade to EU::MM Alien::bison Alien::flex Alien::GSL Program.pm: convert rperl*.h to RPerl/Support/*.h and RPerl/Support/*StandAlone.h, as in RPerl/Support/MongoDB.h [ SSE GMP GSL ] make pull request for Math::GSL to use Alien::GSL https://github.com/leto/math--gsl/issues/99 add 'apt-get install libgsl-dev' (or libgsl0-dev) & 'cpanm Math::GSL::Matrix' in RPerl & LAMP Installers, document in INSTALL? gsl_matrix_CHECK*() CPPOPS_CPPTYPES tests for all EMAV00 - EMAV09 enable gsl_linalg.h & other gsl friends Alien::GMP detect non-C++ system install (missing gmpxx.h) and force Alien::GMP share install instead Alien::PCRE2 ensure tests pass on both share & system installs replace mirrored DEV version (Windows bug fix) w/ new official version when released same as cygwin failure below??? warning: "FWRITE" redefined ... error: _O_BINARY undeclared https://bugs.exim.org/show_bug.cgi?id=2152 extend XS test CPAN testers failures Alien::JPCRE2 update tests to Test::Alien fix AppVeyor Windows failures add XS test CPAN testers failures regex support substitution LHS must be variable non-destructive regex /r !~ logic allow non-standard shebangs Learning RPerl exercises, check on CloudForFree.org RPerl-calling-Perl support MySQL PostgreSQL MongoDB ConstructorCall.pm: add support for MongoDB::MongoClient constructor parameters other than 'host' Inline.pm: add Alien::PkgConfig & Alien::Mongo* dependencies; add error checking for missing pkg-config or bad return value Makefile.PL: handle "v1.8.0" v-string properly in PREREQ_PM KICKSTARTER: DONE??? Monolithic Modules, Fix Deps Warning & Create Tests DONE! Parse::Eyapp regex fix & CPAN upload DONE??? implement 10 ops in CPPOPS_CPPTYPES CODE GENERATION, CPPOPS_CPPTYPES MODE ForEach.pm finish .pl body generation subroutines, final operation must be return operator WHAT ELSE?!? Inline::RPerl update tests to emit more useful failure info, for CPAN testers debugging update CPPOPS_DUALTYPES reference files remove explicit properties inheritance, Generator.pm & Grammar.eyp OO class properties, detect user-defined init() subroutine & call from C++ constructor do not rearrange subs & methods in CPPOPS_CPPTYPES output code, as occurs w/ Bubble.pm, or is rearranging necessary due to division of subs & methods in Bubble.h output file? replace @_ with @ARG in system code 'cannot' -> 'can not' in all docs & source files uncompile w/ corrupted or missing PMC, CPP, H files uncompile delete EXE files disable variable declaration w/out initial value, grammar & tests & docs Learning RPerl names can NOT include double-underscore, C++ standard names can NOT start with underscore uppercase, C++ standard variable names can NOT start with underscore, defined by VARIABLE_SYMBOL in Grammar.eyp global subroutine names can NOT start with underscore, C++ standard non-global subroutine names can start with underscore, C++ standard method names ??? property names ??? upgrade install instructions add chapter 1 bonus exercise, create stand-alone executable for Hello World add missing operator tables as with 2.4.13 chop & chomp, etc add bitstrings to 2.1.15, mentioned in LP189 EAR17 & Exxx & any other new errors update appendix with grammar changes: bitwise_negation_lparen, additional operators? abs & mako's other new ops are no longer "Coming Soon" print dot-to-comma in lib/RPerl/Test/* templateperl mv sort to standardperl all servers online rperl shiny sites enable loop parallelization handle gauss_seidel.openmp.cpp.pluto.cloog files enable num_cores fix print fix loop labels fix min/max enable shorthand classes add copyright notices to all files pass tests on appveyor strawberry ExtUtils::CppGuess bug fix w/ davido update requirement for EU::MM to v7.14? https://github.com/ingydotnet/inline-c-pm/issues/51 ... explain difference between .a, .o, and .so .o can be combined into .so or .exe? .a is "just a tarball of .o files"? .so must always be stand-alone, like a .exe w/out a main()? append 'L' to all numeric literals to force long int? create macro to replace all conditional truth value checks with extra logic to include RPerl false values of '0', q{0}, and q{}, in both character and string type INSTALL notes, update step 3 examples travis enable dev Perl fix dev Perl via P5P chmod a-x *.so output if not on HP-UX print comma-vs-dot to correct output cpp output file post-processing for source code text alignment split author tests (checking Changes file, etc) into xt/ directory, split deps in Makefile.PL, possibly utilize AUTHOR_TESTING in travis-perl/helpers CLOUDFORFREE.ORG release Apache2::FileManager v0.3 based on current github code INSTALLERS Linux DEB (Debian, Ubuntu, Xubuntu, etc) Linux RPM (RedHat, CentOS, etc) Linux Portage Android iOS Mac Windows ActiveRPerl Windows Strawberry RPerl Tarball CPAN GitHub OPERATORS, CPPOPS_CPPTYPES MODE NAMED: croak chomp join keys pop push reverse sort split values wait NAMED_UNARY: chdir cos defined exists -e -r -f -T length rand scalar sin sqrt (need create) Perl "features" http://perldoc.perl.org/feature.html NOT YET SUPPORTED, requires at least Perl v5.16: fc POSIX ceil, floor, modf NOT YET SUPPORTED, C99 functions require at least Perl v5.22: trunc, cbrt, fmax, round, lround, etc. Math::Trig & Math::Complex new, make, emake, cplx, cplxe cbrt, root tan; csc, cosec, sec, sec, cot, cotan; asin, acos, atan; acsc, acosec, asec, acot, acotan; sinh, cosh, tanh; csch, cosech, sech, coth, cotanh; asinh, acosh, atanh; acsch, acosech, asech, acoth, acotanh; pi, pi2, pi4, pip2, pip4 overloaded complex arithmetic +, -, *, /, ** ~ abs, sqrt, exp, log LEARNING RPERL new subroutine headers!!! tables on metacpan, fix headers and borders CSS fix <noncode> on metacpan, elsewhere check X<break_code_blocks> everywhere other than pod2rperlhtml use unsigned_integer instead of integer in ex2.6 & 2.7, check all other exercises as well, change error checking accordingly croak or die in exercise solutions? L<> hyperlinks broken or missing in some outputs? metacpan list newline fix, section 1.1 BEGIN INLINE CSS DIV comment should not appear in any output docbook2html & sgmltools & sgml2html: Section 2.3 "Perl's Built-In Warnings" single-quote vs apostrophe docbook2pdf segfault sgml table cell padding foreword chapters 5 - 17 illustrations: images & ASCII art covers publish video series BOOK OF RPERL chapter 5 MISC DOCUMENTATION update https://en.wikipedia.org/wiki/List_of_compilers#Perl_Compilers RPERL.ORG Book of RPerl tome graphic Roadie Roadrunner, add eye circle to website shiny RPERL COMMAND-LINE FRONT-END --noWarnings option does not suppress WEXRP00, `export RPERL_WARNINGS=0` does CORRELATION #rp140: `rperl ./some_program.pl` fails to run binary executable after compile, when PATH does not include '.' UNSIGNED INTEGER FIX full boolean support via Boolean.cpp/h, rperltypes.pm, SvBOKp(), etc. char type-testing subroutines in Character.pm full character support via Character.cpp/h, rperltypes.pm, SvCOKp(), etc. full unsigned_integer support via UnsignedInteger.cpp/h, rperltypes.pm, SvUIOKp(), etc. CPPOPS_CPPTYPES conversion routines TESTS DatabaseMongoDB: errors, additional test cases create EXECUTE_WARNING & PARSE_WARNING & GENERATE_WARNING for t/*, begin by testing for WCOPR00 & WCOPR01 in RPerl/Test/SubroutineArguments/*_10_* split author (developer) tests from normal user tests TypeConversion, all 42 normal conversions plus to_string() add EXECUTE_SUCCESS to *good*.pl uncompile w/ corrupted or missing PMC, CPP, H files RPerl::EPSILON() array size declaration compensation package/subroutine/method names starting w/ underscore variable redeclaration (masking) properties & hash type-inner type-vs-key name mismatch (ECOGEASRP021: PERLOPS Class.pm properties accessors/mutators; CPPOPS entry & entrytyped) accessors/mutators including get_*_element() & get_*_value() subclasses Foo_raw type $properties & VariableDeclaration array size on non-arrayref type $properties array size PERLOPS_PERLTYPES generation variable & retrieval type mismatches, etc (including ECOGEASCP030?) get_raw() & set_raw() t/13_compile_execute.t (?) for proper functionality *_arrayref_arrayref_arrayref while (my FOO) <$FILEHANDLE> @ARGV %ENV ERROR ECOGEASRP016... named operator [SOMEOP] requires exactly one argument, dying ERROR ECOGEASRP017... named operator [SOMEOP] requires one or more arguments, dying all currently-implemented named ops all currently-implemented named_unary ops invalid hash key starting with non-lowercase-letter ECOGEASRP023 invalid OO property name (hash key) starting with non-lowercase-letter ECOGEASRP024 invalid type inner redundant name starting with non-lowercase-letter ECOGEASRP025 CONSTANT_CALL_SCOPED *_to_*() data type conversion functions text literals, backslash vs double-backslash string_to_NUMERIC*() (AKA all string conversion subroutines), test that underscores are accepted in numbers & non-numerics are rejected, in the following files: String.pm, String.cpp, GMPInteger.pm, GMPInteger.cpp fix RPerl/Test/ScopeTypeNameValue/program_5*_good.pl.DISABLED_PERL_V5_22 fix RPerl/Test/Expression/program_*_good.pl.DISABLED_NEED_FIX fix lib/RPerl/Test/OperatorVoid01NamedVoidReturn/*.DISABLED_NEED_FIX https://github.com/wbraswell/rperl/issues/25 t/04 t/05 t/06 directly test *_CHECKTRACE() and *_CHECK() KICKSTARTER determine remaining items 10 builtins? 1 New Benchmark Application? Finish All CPPOPS_CPPTYPES Code Generation? PARALLEL manual loop test automate QUALITY ASSURANCE Fix CPAN Testers Bugs cpants kwalitee Devel::Cover Devel::Cover::Report::Coveralls coveralls.io MEDIUM-MAGIC start GrammarMedium.pm start TestMedium/ start 30_parse_medium.t pack "f*" unpack same as above sysopen sysread syswrite STDPERL merge sort quick sort MATHPERL log_base_x tan, cot, sec, csc Math::Trig support Math::Complex support fractal, hsv coloring PHYSICSPERL n_body, add command-line option for SystemGasGiants.pm & SystemSSEGasGiants.pm n_body, optimize graphics speed WEB BACK-END asm.js and/or webassembly backend INSTALL NOTES update to use installed dirs, ~/perl5/lib/perl5 for local::lib DEV NOTES warning & error codes general code legend specific codes perlall WINDOWS Makefile.PL, replace pm_to_blib() with usage of File::Temp, do not modify files under lib/ or blib/lib or t/ etc. gmp in windows pass tests on vc2013 pass tests on appveyor activperl pass tests on activestate activeperl Appveyor http://blogs.perl.org/users/eserte/2016/04/testing-with-appveyor.html fix EU::MM + GNU make, missing slash; test building all of Perl & RPerl using gmake, CORRELATION #rp200 gmake: No rule to make target 'C:\...\libConfig.pm', needed by 'Makefile'. Stop. http://www.perlmonks.org/bare/?node_id=843384 https://rt.cpan.org/Public/Bug/Display.html?id=21129 http://stackoverflow.com/questions/9454961/extutilsmakemaker-and-supported-make-programs-on-windows MOBILEPERL Android http://blogs.perl.org/users/flavio_s_glock/2016/04/android-app-with-perl5-to-java-compiler.html MACINTOSH TEMP DISABLE Failed test 'Inline::CPP, call Airplane methods, return correct value 1' at t/03_inline_cpp.t line 146. '' doesn't match '/Object\ \(0x\w*\)/' unknown warning option '-Wno-literal-suffix'; did you mean '-Wno-literal-range'? [-Wunknown-warning-option] duplicate 'extern' declaration specifier [-Wduplicate-decl-specifier] XS_EXTERNAL(boot_eval_412_3a53); /* prototype to pass -Wmissing-prototypes */ /System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/XSUB.h:145:33: note: expanded from macro 'XS_EXTERNAL' # define XS_EXTERNAL(name) extern "C" XSPROTO(name) OPENBENCHMARKS.ORG shiny content AUTOPARALLEL.COM shiny content PARALLELAPPSTORE.COM shiny content DATA TYPES & STRUCTURES enable subroutine argument type-checking of user-defined Class types, see "NEED UPGRADE" in Class.pm create_symtab_entries_and_accessors_mutators() disable use of 'constant_FOO' data types? currently converted in RPerl::Generator::type_convert_perl_to_cpp(), possible 'const const' conflict in RPerl::CompileUnit::Constant sort hash keys when generating string output in *hashref_to_string() CPPOPS Hash.cpp, as is done with 'sort keys' in PERLOPS Hash/Subtypes.pm determine if 'long long' or 'long double' can be used at all??? DEV NOTE, CORRELATION #rp041: GMP does not support 'long long' or 'long double', will cause t/07_type_gmp.t to fail scalar, scalar_arrayref, scalar_hashref, scalar_* implement 3-D arrays & hashes implement *OPS_*TYPES *_arrayref_arrayref_to_string() implement *OPS_*TYPES boolean_arrayref_to_string(), unsigned_integer_arrayref_to_string(), gmp_integer_arrayref_to_string(), character_arrayref_to_string() implement CPPOPS_*TYPES *arrayref_to_string() enable semi-dynamic auto-config of number format code for printf & friends in CPPOPS modes, replace %f by %"NUMBER" add remaining generic overloaded type conversion subroutines to_boolean(), to_integer(), to_unsigned_integer(), to_gmp_integer(), to_character() in rperltypes.* enable config of RPerl::NUMBER_EPSILON in RPerl/Config.pm to use either POSIX::FLT_EPSILON() or POSIX::DBL_EPSILON() http://perldoc.perl.org/POSIX.html#FLOAT PERLOPS_CPPTYPES conversion routines boolean_arrayref, unsigned_integer_arrayref, character_arrayref boolean_hashref, unsigned_integer_hashref, character_hashref gmp_integer_arrayref, gmp_integer_hashref sse_number_pair_arrayref, sse_number_pair_hashref enable looks_like_number() in *OPS_*TYPES (AKA all modes) use in string_to_NUMERIC*() (AKA all string conversion subroutines) to reject non-numeric characters with RPerl error instead of Perl error http://perldoc.perl.org/perlapi.html#looks_like_number export ::*_*ref_to_*() conversion subroutines the same as ::*_to_*() subs in rperltypesconv.pm, remove leading scopes in all calls remove all object* types add arrayref::grow_capacity() as safe version of std::vector::resize() Dumper() in C++, use as default overload for << implement remaining *_arrayref_arrayref_CHECK*() in lib/DataStructure/Array/SubTypes.cpp pre-declare RPerl::DataTypes and RPerl::DataStructures, as discussed in RPerl/DataStructure/Array.pm $properties, so this works: 'use RPerl::DataStructure::Array;' constant hashrefs and arrayrefs, via "use constant" pragma OR ":const" Perl internals attribute OR "constant_integer_hashref" data types :const supported in cperl only at this time add a sub integer::MODIFY_SCALAR_ATTRIBUTE, which handles :const `my integer $i :const = 1;` http://perldoc.perl.org/attributes.html integer class need only to accept or reject attributes. new() is not needed, neither @ISA the stash must exists. I do %int::; that creates the stash, so its valid syntax for :const I added the MODIFY_SCALAR_ATTRIBUTE function (into xsutils.c?) also MODIFY_HASH_ATTRIBUTE and so on, for every reftype, _ARRAY_, _CODE_, … VARIABLES allow block-scoped variables; currently supported for unique variable names, triggers false error ECOGEASCP012 "already declared in this scope" for non-unique variable names in the same subroutine PERL::CRITIC BUGS Eclipse EPIC Integration, Silent Failure https://github.com/Perl-Critic/Perl-Critic/issues/582 ProhibitMagicNumbers False Positive https://github.com/Perl-Critic/Perl-Critic/issues/631 Subroutines::RequireFinalReturn False Positive On Typed Loop Iterator https://github.com/Perl-Critic/Perl-Critic/issues/636 ControlStructures::ProhibitPostfixControls False Positives on Typed Loop Iterator https://github.com/Perl-Critic/Perl-Critic/issues/639 Argument "-" isn't numeric in exponentiation (**) at .../PPI/Token/Number/Exp.pm line 55 https://github.com/Perl-Critic/Perl-Critic/issues/665 InputOutput::RequireCheckedSyscalls False Positive On Typed Loop Iterator Without Final Newline https://github.com/Perl-Critic/Perl-Critic/issues/671 Perl::Critic::Policy::Subroutines::ProtectPrivateSubs, false trigger on 'my Foo::Bar::_MyClass $foo;', presumably thinks _MyClass is a private sub INLINE::CPP BUGS remove all usage of double-underscore in identifiers, including auto-generated class names where '::' is replaced by '__' file bug, I::CPP comments, 7 lines okay, 8 lines broken file bug, I::CPP std::array file bug, I::CPP when attempting to return object type, CORRELATION #pp04 In function ‘void XS_PhysicsPerl__Astro__System_get_bodies_element(PerlInterpreter*, CV*)’: ... error: ‘CLASS’ was not declared in this scope ... sv_setref_pv( ST(0), CLASS, (void*)RETVAL ); hand-patched code below allows one-time use, then segfault vi build/eval_637_3400/eval_637_3400.c char * CLASS = (char *)"PhysicsPerl::Astro::Body" chmod a-w build/eval_637_3400/eval_637_3400.c PERLOPS_PERLTYPES build each class' properties_inherited() once at compile time in Class::INIT{}, will optimize runtime performance C++ subclasses using AV* instead of std::vector, etc? add symtab building and checking real SSE support (faster, not slower) ERROR CODES RPerl::CompileUnit::Module::Class (global base class) needs error codes added for all croak() or die() statements fix all mis-matching *RPxx vs *CPxx error codes, compare all numeric error codes to ensure RPerl matches C++ sort all error codes according to dev_notes.txt code ranges GRAMMAR allow comments with 3 or more chained octothorpe characters ### like this comment undef values, either remove from all possible locations in grammar for C++ compatibility, OR enable in C++ by special strings, numeric values, etc. fix 'x' string repeat operator vs 'x' string or bareword hash key, already fixed??? add WORD_LPAREN & WORD_SCOPED_LPAREN to become WordScopedLParen, and friends, to disallow space between subroutine name and parens in subroutine call update Learning RPerl section 4.2.1 & lib/RPerl/Test/Subroutine/program_* accordingly should VARIABLE_SYMBOL be allowing scoped variable identifiers, since these are not currently supported by the compiler? should LITERAL_STRING allow single-quote strings which contain an odd number of backslashes? 'howdy \@array' and 'howdy \\@array' are identical in Perl but only the second is allowed in RPerl upgrade OP18_TERNARY to support 'SubExpression COLON SubExpression' instead of just 'ScalarVariableOrLiteral COLON ScalarVariableOrLiteral' COMPILER uncompile, store list of compiled dependencies inside compiled files themselves, for optional use during uncompile figure out <> vs "" and also long-path-deps in includes in Bubble.cpp & Bubble.h compile Foo.pm add mutators pass-by-reference for scalars? see SystemRenderer2D::show() INTERPRETER Class.pm, remove auto-export of subroutines from their package's namespace into main:: namespace? RPerl::filter() update to properly handle *.pl files collapse newline characters from all added code to avoid artificially increasing line numbers in error messages, `rperl -t lib/RPerl/Test/Properties/Class_00_Bad_09.pm`