This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add note about symbolic filehandles (from Johan Vromans)
[perl5.git] / Todo
1 Always check out the latest perl5-porters discussions on these subjects
2 before embarking on an implementation tour.
3
4 Tie Modules
5         VecArray                Implement array using vec()
6         SubstrArray             Implement array using substr()
7         VirtualArray            Implement array using a file
8         ShiftSplice             Defines shift et al in terms of splice method
9
10 Would be nice to have
11         pack "(stuff)*", "(stuff)?", "(stuff)+", "(stuff)4", ...
12         contiguous bitfields in pack/unpack
13         lexperl
14         bundled perl preprocessor/macro facility
15             this would solve many of the syntactic nice-to-haves
16         use posix calls internally where possible
17         gettimeofday (possibly best left for a module?)
18         format BOTTOM
19         -i rename file only when successfully changed
20         all ARGV input should act like <>
21         report HANDLE [formats].
22         support in perlmain to rerun debugger
23         regression tests using __DIE__ hook
24         lexically scoped functions: my sub foo { ... }
25                 the basic concept is easy and sound,
26                 the difficulties begin with self-referential
27                 and mutually referential lexical subs: how to
28                 declare the subs?
29         lexically scoped typeglobs? (lexical I/O handles work now)
30         wantlvalue?  more generalized want()/caller()?
31         named prototypes: sub foo ($foo, @bar) { ... } ?
32         regression/sanity tests for suidperl
33         iterators/lazy evaluation/continuations/first/
34             first_defined/short-circuiting grep/??
35             This is a very thorny and hotly debated subject,
36             tread carefully and do your homework first
37         generalise Errno way of extracting cpp symbols and use that in
38             Errno, Fcntl, POSIX (ExtUtils::CppSymbol?)
39         the _r-problem: for all the {set,get,end}*() system database
40              calls (and a couple more: readdir, *rand*, crypt, *time,
41              tmpnam) there are in many systems the _r versions
42              to be used in re-entrant (=multithreaded) code
43              Icky things: the _r API is not standardized and
44              the _r-forms require per-thread data to store their state
45         memory profiler: turn malloc.c:Perl_get_mstats() into
46             an extension (Devel::MProf?) that would return the malloc
47             stats in a nice Perl datastructure (also a simple interface
48             to return just the grand total would be good)
49         a way to make << and >> to shift bitvectors instead of numbers
50
51 Possible pragmas
52         debugger
53         optimize (use less qw[memory cpu])
54
55 Optimizations
56         constant function cache
57         switch structures
58         foreach(reverse...)
59         cache eval tree (unless lexical outer scope used (mark in &compiling?))
60         rcatmaybe
61         shrink opcode tables via multiple implementations selected in peep
62         cache hash value?  (Not a win, according to Guido)
63         optimize away @_ where possible
64         tail recursion removal
65         "one pass" global destruction
66         rewrite regexp parser for better integrated optimization
67         LRU cache of regexp: foreach $pat (@pats) { foo() if /$pat/ }
68
69 Vague possibilities
70         ref function in list context?
71         make tr/// return histogram in list context?
72         loop control on do{} et al
73         explicit switch statements
74         built-in globbing
75         compile to real threaded code
76         structured types
77         autocroak?
78         modifiable $1 et al