forked from rurban/perl-compiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Todo
54 lines (47 loc) · 2.39 KB
/
Todo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
* Fixes
-DF Flags crashes with newpkg
do not throw away non-B:C loaded packages not to miss run-time added methods ('all_bc_pkg')
'n' magic (shared_scalar on 5.10.0 and earlier perls) e.g. t/testm.sh Test::Tester
run-time label lookup (done for the easy and documented limitations)
store_cop_label for 5.12 windows/AIX only (=> p5p; needs CORE patch)
CC backend: goto (needs test),
improve XSUB handling (perlcc, both static and dynamic, needs tests)
sv_magic can do SvREFCNT_inc(obj) which messes up precalculated refcounts
allocation of XPV[INAHC]V structures needs fixing: Perl tries to free
them, whereas the compiler expects them to be linked to a xpv[inahc]v_root
list the same as X[IPR]V structures.
ref counts
perl_parse replacement
CvOUTSIDE for ordinary subs
* Features
Detect ExtUtils::Constant autoloaded "Your vendor has not defined"
functions stubs. E.g. "WARNING: &Socket::AF_DATAKIT not found"
optimize static or typed method calls. How-perl-compiles-subs-and-methods.md
detect typed objects (my Class $obj = new Class;) (partially done)
modularize (-m) for faster link times
BEGIN goto optim: skip code after BEGIN goto
usually Carp including B in some AUTOLOAD block, issue 61
save PMOPs in compiled form (?)
options for cutting out line info (COP elimination) etc. (fix -fcop)
check Bytecode op coverage in the tests, should cover all ops 0-142
ByteLoader compatibility: version, platform. eventually Bytecode version
portability (test with 5.6 on cygwin, partially done)
check CC op coverage, add tests
* Optimizations
collect static strings beforehand, such as GvNAMEs, COP FILENAME (for pre 5.10)
and GV method names package::name. (partially done)
proper static init of PMOP SV's (only works dynamic >= 5.10)
collapse LISTOPs to UNOPs or BASEOPs
compile-time qw(), constant subs
variable types: global analysis of variables, type hints etc.
understand type decl and attrs
my int $i; my $j : int;
Devel::TypeCheck instead of magic variable _ir, ... suffices
e.g. mark IVonly SV's and magic/flags change functions and
optimize all op subtrees for the compiled backends to use direct ints.
understand MooseX::Method::Signatures and MooseX::Lexical::Types declarations
demand-loaded bytecode (leader of each basic block replaced by an op
which loads in bytecode for its block)
fast sub calls for CC backend
tailcall optimization (entersub -> leavesub => goto)
inline functions and methods