Todo 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. * Fixes
  2. bytecode for 5.18 threaded and 5.20 (suspect: walkoptree upstream)
  3. empty CVs are no proper coderefs
  4. use bytes AUTOLOAD handling
  5. CvOUTSIDE for ordinary subs
  6. -fwalk-all for recursive deep inspection
  7. method_named packagepv quirks at compile-time. Are run-time pkg names
  8. CC backend: goto (needs test)
  9. * Features
  10. modularize (-m) for faster link times, buiildcc, rperl intergration
  11. backport improvements from oldmaster:
  12. do not define symbols which are arguments of define (destructive
  13. check)
  14. store static bless packagenames
  15. run-time label lookup (fixed)
  16. skip code after BEGIN goto (usually Carp including B in some AUTOLOAD block, issue 61)
  17. type checking: Devel::TypeCheck
  18. compile time v. runtime initialisation (done):
  19. execute run-time BEGIN blocks for side-effects such as print or chdir,
  20. use and require not.
  21. save PMOPs in compiled form (5.10thr missing)
  22. selection of what to dump (done)
  23. options for cutting out line info (COP elimination) etc. (-fcop, sortcv's)
  24. shared constants: share_hek, constpv (done)
  25. check module dependencies, vs. link libs static, not via DynaLoader (done)
  26. check Bytecode op coverage in the tests, should cover all ops 0-142
  27. ByteLoader compatibility: version, platform. eventually Bytecode version
  28. portability (test with 5.6 on cygwin, partially done)
  29. check CC op coverage, add tests
  30. * Optimizations
  31. -fro-inc read-only INC paths. not the AV, run-time savepvn (done)
  32. -fno-destruct skip optree and sv destruction at all, leave it to the OS (done)
  33. collect static strings beforehand, such as GvNAMEs, COP FILENAME (for pre 5.10)
  34. and GV method names package::name. (done)
  35. proper static init of PMOP SV's (only works dynamic >= 5.10)
  36. proper static init of PVBM/FBM (done)
  37. compile-time initialisation of AvARRAYs (improved with -fav-init and
  38. -fav-init2)
  39. collapse LISTOPs to UNOPs or BASEOPs
  40. compile-time qw(), constant subs
  41. variable types: global analysis of variables, type hints etc.
  42. understand type decl and attrs
  43. my int $i; my $j : int;
  44. Devel::TypeCheck instead of magic variable _ir, ... suffices
  45. e.g. mark IVonly SV's and magic/flags change functions and
  46. optimize all op subtrees for the compiled backends to use direct ints.
  47. understand MooseX::Method::Signatures and MooseX::Lexical::Types declarations
  48. demand-loaded bytecode (leader of each basic block replaced by an op
  49. which loads in bytecode for its block)
  50. fast sub calls for CC backend
  51. tailcall optimization (entersub -> leavesub => goto)
  52. inline more small pp ops: enter, reset, stringify, ... (CC -finline-ops)