Following b0e687f7 Win32 requires an -I..\lib for makedef.pl and x2p\*.PL
[p5sagit/p5-mst-13.2.git] / pod / perltodo.pod
CommitLineData
7711098a 1=head1 NAME
2
3perltodo - Perl TO-DO List
4
5=head1 DESCRIPTION
e50bb9a1 6
049aabcb 7This is a list of wishes for Perl. The most up to date version of this file
8is at http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod
9
10The tasks we think are smaller or easier are listed first. Anyone is welcome
11to work on any of these, but it's a good idea to first contact
12I<perl5-porters@perl.org> to avoid duplication of effort, and to learn from
13any previous attempts. By all means contact a pumpking privately first if you
14prefer.
e50bb9a1 15
0bdfc961 16Whilst patches to make the list shorter are most welcome, ideas to add to
17the list are also encouraged. Check the perl5-porters archives for past
18ideas, and any discussion about them. One set of archives may be found at:
e50bb9a1 19
0bdfc961 20 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
938c8732 21
617eabfa 22What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
23not, but if your patch is incorporated, then we'll add your name to the
24F<AUTHORS> file, which ships in the official distribution. How many other
25programming languages offer you 1 line of immortality?
938c8732 26
0bdfc961 27=head1 Tasks that only need Perl knowledge
e50bb9a1 28
0be987a2 29=head2 Automate perldelta generation
30
31The perldelta file accompanying each release summaries the major changes.
32It's mostly manually generated currently, but some of that could be
33automated with a bit of perl, specifically the generation of
34
35=over
36
37=item Modules and Pragmata
38
39=item New Documentation
40
41=item New Tests
42
43=back
44
45See F<Porting/how_to_write_a_perldelta.pod> for details.
46
5a176cbc 47=head2 Remove duplication of test setup.
48
49Schwern notes, that there's duplication of code - lots and lots of tests have
50some variation on the big block of C<$Is_Foo> checks. We can safely put this
51into a file, change it to build an C<%Is> hash and require it. Maybe just put
52it into F<test.pl>. Throw in the handy tainting subroutines.
53
87a942b1 54=head2 POD -E<gt> HTML conversion in the core still sucks
e50bb9a1 55
938c8732 56Which is crazy given just how simple POD purports to be, and how simple HTML
adebf063 57can be. It's not actually I<as> simple as it sounds, particularly with the
58flexibility POD allows for C<=item>, but it would be good to improve the
59visual appeal of the HTML generated, and to avoid it having any validation
60errors. See also L</make HTML install work>, as the layout of installation tree
61is needed to improve the cross-linking.
938c8732 62
dc0fb092 63The addition of C<Pod::Simple> and its related modules may make this task
64easier to complete.
65
0befdfba 66=head2 Make ExtUtils::ParseXS use strict;
67
68F<lib/ExtUtils/ParseXS.pm> contains this line
69
70 # use strict; # One of these days...
71
72Simply uncomment it, and fix all the resulting issues :-)
73
74The more practical approach, to break the task down into manageable chunks, is
75to work your way though the code from bottom to top, or if necessary adding
76extra C<{ ... }> blocks, and turning on strict within them.
77
0bdfc961 78=head2 Make Schwern poorer
e50bb9a1 79
613bd4f7 80We should have tests for everything. When all the core's modules are tested,
0bdfc961 81Schwern has promised to donate to $500 to TPF. We may need volunteers to
82hold him upside down and shake vigorously in order to actually extract the
83cash.
3958b146 84
0bdfc961 85=head2 Improve the coverage of the core tests
e50bb9a1 86
02f21748 87Use Devel::Cover to ascertain the core modules's test coverage, then add
88tests that are currently missing.
30222c0f 89
0bdfc961 90=head2 test B
e50bb9a1 91
0bdfc961 92A full test suite for the B module would be nice.
e50bb9a1 93
0bdfc961 94=head2 A decent benchmark
e50bb9a1 95
617eabfa 96C<perlbench> seems impervious to any recent changes made to the perl core. It
0bdfc961 97would be useful to have a reasonable general benchmarking suite that roughly
98represented what current perl programs do, and measurably reported whether
99tweaks to the core improve, degrade or don't really affect performance, to
100guide people attempting to optimise the guts of perl. Gisle would welcome
101new tests for perlbench.
6168cf99 102
0bdfc961 103=head2 fix tainting bugs
6168cf99 104
0bdfc961 105Fix the bugs revealed by running the test suite with the C<-t> switch (via
106C<make test.taintwarn>).
e50bb9a1 107
0bdfc961 108=head2 Dual life everything
e50bb9a1 109
0bdfc961 110As part of the "dists" plan, anything that doesn't belong in the smallest perl
111distribution needs to be dual lifed. Anything else can be too. Figure out what
112changes would be needed to package that module and its tests up for CPAN, and
113do so. Test it with older perl releases, and fix the problems you find.
e50bb9a1 114
a393eb28 115To make a minimal perl distribution, it's useful to look at
116F<t/lib/commonsense.t>.
117
dfb56e28 118=head2 Move dual-life pod/*.PL into ext
c2aba5b8 119
dfb56e28 120Nearly all the dual-life modules have been moved to F<ext>. However, we
121still need to move F<pod/*.PL> into their respective directories
764e6bc7 122in F<ext/>. They're referenced by (at least) C<plextract> in F<Makefile.SH>
123and C<utils> in F<win32/Makefile> and F<win32/makefile.ml>, and listed
124explicitly in F<win32/pod.mak>, F<vms/descrip_mms.template> and F<utils.lst>
125
0bdfc961 126=head2 POSIX memory footprint
e50bb9a1 127
0bdfc961 128Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
129various times worked to cut it down. There is probably still fat to cut out -
130for example POSIX passes Exporter some very memory hungry data structures.
e50bb9a1 131
eed36644 132=head2 embed.pl/makedef.pl
133
134There is a script F<embed.pl> that generates several header files to prefix
135all of Perl's symbols in a consistent way, to provide some semblance of
136namespace support in C<C>. Functions are declared in F<embed.fnc>, variables
907b3e23 137in F<interpvar.h>. Quite a few of the functions and variables
eed36644 138are conditionally declared there, using C<#ifdef>. However, F<embed.pl>
139doesn't understand the C macros, so the rules about which symbols are present
140when is duplicated in F<makedef.pl>. Writing things twice is bad, m'kay.
141It would be good to teach C<embed.pl> to understand the conditional
142compilation, and hence remove the duplication, and the mistakes it has caused.
e50bb9a1 143
801de10e 144=head2 use strict; and AutoLoad
145
146Currently if you write
147
148 package Whack;
149 use AutoLoader 'AUTOLOAD';
150 use strict;
151 1;
152 __END__
153 sub bloop {
154 print join (' ', No, strict, here), "!\n";
155 }
156
157then C<use strict;> isn't in force within the autoloaded subroutines. It would
158be more consistent (and less surprising) to arrange for all lexical pragmas
159in force at the __END__ block to be in force within each autoloaded subroutine.
160
773b3597 161There's a similar problem with SelfLoader.
162
91d0cbf6 163=head2 profile installman
164
165The F<installman> script is slow. All it is doing text processing, which we're
166told is something Perl is good at. So it would be nice to know what it is doing
167that is taking so much CPU, and where possible address it.
168
169
0bdfc961 170=head1 Tasks that need a little sysadmin-type knowledge
e50bb9a1 171
0bdfc961 172Or if you prefer, tasks that you would learn from, and broaden your skills
173base...
e50bb9a1 174
cd793d32 175=head2 make HTML install work
e50bb9a1 176
adebf063 177There is an C<installhtml> target in the Makefile. It's marked as
178"experimental". It would be good to get this tested, make it work reliably, and
179remove the "experimental" tag. This would include
180
181=over 4
182
183=item 1
184
185Checking that cross linking between various parts of the documentation works.
186In particular that links work between the modules (files with POD in F<lib/>)
187and the core documentation (files in F<pod/>)
188
189=item 2
190
617eabfa 191Work out how to split C<perlfunc> into chunks, preferably one per function
192group, preferably with general case code that could be used elsewhere.
193Challenges here are correctly identifying the groups of functions that go
194together, and making the right named external cross-links point to the right
195page. Things to be aware of are C<-X>, groups such as C<getpwnam> to
196C<endservent>, two or more C<=items> giving the different parameter lists, such
197as
adebf063 198
199 =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
adebf063 200 =item substr EXPR,OFFSET,LENGTH
adebf063 201 =item substr EXPR,OFFSET
202
203and different parameter lists having different meanings. (eg C<select>)
204
205=back
3a89a73c 206
0bdfc961 207=head2 compressed man pages
208
209Be able to install them. This would probably need a configure test to see how
210the system does compressed man pages (same directory/different directory?
211same filename/different filename), as well as tweaking the F<installman> script
212to compress as necessary.
213
30222c0f 214=head2 Add a code coverage target to the Makefile
215
216Make it easy for anyone to run Devel::Cover on the core's tests. The steps
217to do this manually are roughly
218
219=over 4
220
221=item *
222
223do a normal C<Configure>, but include Devel::Cover as a module to install
224(see F<INSTALL> for how to do this)
225
226=item *
227
228 make perl
229
230=item *
231
232 cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
233
234=item *
235
236Process the resulting Devel::Cover database
237
238=back
239
240This just give you the coverage of the F<.pm>s. To also get the C level
241coverage you need to
242
243=over 4
244
245=item *
246
247Additionally tell C<Configure> to use the appropriate C compiler flags for
248C<gcov>
249
250=item *
251
252 make perl.gcov
253
254(instead of C<make perl>)
255
256=item *
257
258After running the tests run C<gcov> to generate all the F<.gcov> files.
259(Including down in the subdirectories of F<ext/>
260
261=item *
262
263(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files
264to get their stats into the cover_db directory.
265
266=item *
267
268Then process the Devel::Cover database
269
270=back
271
272It would be good to add a single switch to C<Configure> to specify that you
273wanted to perform perl level coverage, and another to specify C level
274coverage, and have C<Configure> and the F<Makefile> do all the right things
275automatically.
276
02f21748 277=head2 Make Config.pm cope with differences between built and installed perl
0bdfc961 278
279Quite often vendors ship a perl binary compiled with their (pay-for)
280compilers. People install a free compiler, such as gcc. To work out how to
281build extensions, Perl interrogates C<%Config>, so in this situation
282C<%Config> describes compilers that aren't there, and extension building
283fails. This forces people into choosing between re-compiling perl themselves
284using the compiler they have, or only using modules that the vendor ships.
285
286It would be good to find a way teach C<Config.pm> about the installation setup,
287possibly involving probing at install time or later, so that the C<%Config> in
288a binary distribution better describes the installed machine, when the
289installed machine differs from the build machine in some significant way.
290
728f4ecd 291=head2 linker specification files
292
293Some platforms mandate that you provide a list of a shared library's external
294symbols to the linker, so the core already has the infrastructure in place to
295do this for generating shared perl libraries. My understanding is that the
296GNU toolchain can accept an optional linker specification file, and restrict
297visibility just to symbols declared in that file. It would be good to extend
298F<makedef.pl> to support this format, and to provide a means within
299C<Configure> to enable it. This would allow Unix users to test that the
300export list is correct, and to build a perl that does not pollute the global
301namespace with private symbols.
302
a229ae3b 303=head2 Cross-compile support
304
305Currently C<Configure> understands C<-Dusecrosscompile> option. This option
306arranges for building C<miniperl> for TARGET machine, so this C<miniperl> is
307assumed then to be copied to TARGET machine and used as a replacement of full
308C<perl> executable.
309
d1307786 310This could be done little differently. Namely C<miniperl> should be built for
a229ae3b 311HOST and then full C<perl> with extensions should be compiled for TARGET.
d1307786 312This, however, might require extra trickery for %Config: we have one config
87a942b1 313first for HOST and then another for TARGET. Tools like MakeMaker will be
314mightily confused. Having around two different types of executables and
315libraries (HOST and TARGET) makes life interesting for Makefiles and
316shell (and Perl) scripts. There is $Config{run}, normally empty, which
317can be used as an execution wrapper. Also note that in some
318cross-compilation/execution environments the HOST and the TARGET do
319not see the same filesystem(s), the $Config{run} may need to do some
320file/directory copying back and forth.
0bdfc961 321
8537f021 322=head2 roffitall
323
324Make F<pod/roffitall> be updated by F<pod/buildtoc>.
325
98fca0e8 326=head2 Split "linker" from "compiler"
327
328Right now, Configure probes for two commands, and sets two variables:
329
330=over 4
331
b91dd380 332=item * C<cc> (in F<cc.U>)
98fca0e8 333
334This variable holds the name of a command to execute a C compiler which
335can resolve multiple global references that happen to have the same
336name. Usual values are F<cc> and F<gcc>.
337Fervent ANSI compilers may be called F<c89>. AIX has F<xlc>.
338
b91dd380 339=item * C<ld> (in F<dlsrc.U>)
98fca0e8 340
341This variable indicates the program to be used to link
342libraries for dynamic loading. On some systems, it is F<ld>.
343On ELF systems, it should be C<$cc>. Mostly, we'll try to respect
344the hint file setting.
345
346=back
347
8d159ec1 348There is an implicit historical assumption from around Perl5.000alpha
349something, that C<$cc> is also the correct command for linking object files
350together to make an executable. This may be true on Unix, but it's not true
351on other platforms, and there are a maze of work arounds in other places (such
352as F<Makefile.SH>) to cope with this.
98fca0e8 353
354Ideally, we should create a new variable to hold the name of the executable
355linker program, probe for it in F<Configure>, and centralise all the special
356case logic there or in hints files.
357
358A small bikeshed issue remains - what to call it, given that C<$ld> is already
8d159ec1 359taken (arguably for the wrong thing now, but on SunOS 4.1 it is the command
360for creating dynamically-loadable modules) and C<$link> could be confused with
361the Unix command line executable of the same name, which does something
362completely different. Andy Dougherty makes the counter argument "In parrot, I
363tried to call the command used to link object files and libraries into an
364executable F<link>, since that's what my vaguely-remembered DOS and VMS
365experience suggested. I don't think any real confusion has ensued, so it's
366probably a reasonable name for perl5 to use."
98fca0e8 367
368"Alas, I've always worried that introducing it would make things worse,
369since now the module building utilities would have to look for
370C<$Config{link}> and institute a fall-back plan if it weren't found."
8d159ec1 371Although I can see that as confusing, given that C<$Config{d_link}> is true
372when (hard) links are available.
98fca0e8 373
75585ce3 374=head2 Configure Windows using PowerShell
375
376Currently, Windows uses hard-coded config files based to build the
377config.h for compiling Perl. Makefiles are also hard-coded and need to be
378hand edited prior to building Perl. While this makes it easy to create a perl.exe
379that works across multiple Windows versions, being able to accurately
380configure a perl.exe for a specific Windows versions and VS C++ would be
381a nice enhancement. With PowerShell available on Windows XP and up, this
382may now be possible. Step 1 might be to investigate whether this is possible
383and use this to clean up our current makefile situation. Step 2 would be to
384see if there would be a way to use our existing metaconfig units to configure a
385Windows Perl or whether we go in a separate direction and make it so. Of
386course, we all know what step 3 is.
387
ab45a0fa 388=head2 decouple -g and -DDEBUGGING
389
390Currently F<Configure> automatically adds C<-DDEBUGGING> to the C compiler
391flags if it spots C<-g> in the optimiser flags. The pre-processor directive
eeab323f 392C<DEBUGGING> enables F<perl>'s command line C<-D> options, but in the process
ab45a0fa 393makes F<perl> slower. It would be good to disentangle this logic, so that
394C-level debugging with C<-g> and Perl level debugging with C<-D> can easily
395be enabled independently.
396
0bdfc961 397=head1 Tasks that need a little C knowledge
398
399These tasks would need a little C knowledge, but don't need any specific
400background or experience with XS, or how the Perl interpreter works
401
3d826b29 402=head2 Weed out needless PERL_UNUSED_ARG
403
404The C code uses the macro C<PERL_UNUSED_ARG> to stop compilers warning about
405unused arguments. Often the arguments can't be removed, as there is an
406external constraint that determines the prototype of the function, so this
407approach is valid. However, there are some cases where C<PERL_UNUSED_ARG>
408could be removed. Specifically
409
410=over 4
411
412=item *
413
414The prototypes of (nearly all) static functions can be changed
415
416=item *
417
418Unused arguments generated by short cut macros are wasteful - the short cut
419macro used can be changed.
420
421=back
422
fbf638cb 423=head2 Modernize the order of directories in @INC
424
425The way @INC is laid out by default, one cannot upgrade core (dual-life)
426modules without overwriting files. This causes problems for binary
3d14fd97 427package builders. One possible proposal is laid out in this
428message:
429L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>.
fbf638cb 430
bcbaa2d5 431=head2 -Duse32bit*
432
433Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
434On these systems, it might be the default compilation mode, and there
435is currently no guarantee that passing no use64bitall option to the
436Configure process will build a 32bit perl. Implementing -Duse32bit*
437options would be nice for perl 5.12.
438
fee0a0f7 439=head2 Profile Perl - am I hot or not?
62403a3c 440
fee0a0f7 441The Perl source code is stable enough that it makes sense to profile it,
442identify and optimise the hotspots. It would be good to measure the
443performance of the Perl interpreter using free tools such as cachegrind,
444gprof, and dtrace, and work to reduce the bottlenecks they reveal.
445
446As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops,
447the ops that are most commonly used. The idea is that by grouping them, their
448object code will be adjacent in the executable, so they have a greater chance
449of already being in the CPU cache (or swapped in) due to being near another op
450already in use.
62403a3c 451
452Except that it's not clear if these really are the most commonly used ops. So
fee0a0f7 453as part of exercising your skills with coverage and profiling tools you might
454want to determine what ops I<really> are the most commonly used. And in turn
455suggest evictions and promotions to achieve a better F<pp_hot.c>.
62403a3c 456
91d0cbf6 457One piece of Perl code that might make a good testbed is F<installman>.
458
98fed0ad 459=head2 Allocate OPs from arenas
460
461Currently all new OP structures are individually malloc()ed and free()d.
462All C<malloc> implementations have space overheads, and are now as fast as
463custom allocates so it would both use less memory and less CPU to allocate
464the various OP structures from arenas. The SV arena code can probably be
465re-used for this.
466
539f2c54 467Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use
468Perl_Slab_alloc() to pack optrees into a contiguous block, which is
469probably superior to the use of OP arenas, esp. from a cache locality
470standpoint. See L<Profile Perl - am I hot or not?>.
471
a229ae3b 472=head2 Improve win32/wince.c
0bdfc961 473
a229ae3b 474Currently, numerous functions look virtually, if not completely,
02f21748 475identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
6d71adcd 476be good.
477
c5b31784 478=head2 Use secure CRT functions when building with VC8 on Win32
479
480Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
481that they were "unsafe" and introduced differently named secure versions of
482them as replacements, e.g. instead of writing
483
484 FILE* f = fopen(__FILE__, "r");
485
486one should now write
487
488 FILE* f;
489 errno_t err = fopen_s(&f, __FILE__, "r");
490
491Currently, the warnings about these deprecations have been disabled by adding
492-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
493warning suppressant and actually make use of the new secure CRT functions.
494
495There is also a similar issue with POSIX CRT function names like fileno having
496been deprecated in favour of ISO C++ conformant names like _fileno. These
26a6faa8 497warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It
c5b31784 498might be nice to do as Microsoft suggest here too, although, unlike the secure
499functions issue, there is presumably little or no benefit in this case.
500
038ae9a4 501=head2 Fix POSIX::access() and chdir() on Win32
502
503These functions currently take no account of DACLs and therefore do not behave
504correctly in situations where access is restricted by DACLs (as opposed to the
505read-only attribute).
506
507Furthermore, POSIX::access() behaves differently for directories having the
508read-only attribute set depending on what CRT library is being used. For
509example, the _access() function in the VC6 and VC7 CRTs (wrongly) claim that
510such directories are not writable, whereas in fact all directories are writable
511unless access is denied by DACLs. (In the case of directories, the read-only
512attribute actually only means that the directory cannot be deleted.) This CRT
513bug is fixed in the VC8 and VC9 CRTs (but, of course, the directory may still
514not actually be writable if access is indeed denied by DACLs).
515
516For the chdir() issue, see ActiveState bug #74552:
517http://bugs.activestate.com/show_bug.cgi?id=74552
518
519Therefore, DACLs should be checked both for consistency across CRTs and for
520the correct answer.
521
522(Note that perl's -w operator should not be modified to check DACLs. It has
523been written so that it reflects the state of the read-only attribute, even
524for directories (whatever CRT is being used), for symmetry with chmod().)
525
16815324 526=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
527
528Maybe create a utility that checks after each libperl.a creation that
529none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
530ever creep back to libperl.a.
531
532 nm libperl.a | ./miniperl -alne '$o = $F[0] if /:$/; print "$o $F[1]" if $F[0] eq "U" && $F[1] =~ /^(?:strn?c(?:at|py)|v?sprintf|gets)$/'
533
534Note, of course, that this will only tell whether B<your> platform
535is using those naughty interfaces.
536
de96509d 537=head2 -D_FORTIFY_SOURCE=2, -fstack-protector
538
539Recent glibcs support C<-D_FORTIFY_SOURCE=2> and recent gcc
540(4.1 onwards?) supports C<-fstack-protector>, both of which give
541protection against various kinds of buffer overflow problems.
542These should probably be used for compiling Perl whenever available,
543Configure and/or hints files should be adjusted to probe for the
544availability of these features and enable them as appropriate.
16815324 545
8964cfe0 546=head2 Arenas for GPs? For MAGIC?
547
548C<struct gp> and C<struct magic> are both currently allocated by C<malloc>.
549It might be a speed or memory saving to change to using arenas. Or it might
550not. It would need some suitable benchmarking first. In particular, C<GP>s
551can probably be changed with minimal compatibility impact (probably nothing
552outside of the core, or even outside of F<gv.c> allocates them), but they
553probably aren't allocated/deallocated often enough for a speed saving. Whereas
554C<MAGIC> is allocated/deallocated more often, but in turn, is also something
555more externally visible, so changing the rules here may bite external code.
556
3880c8ec 557=head2 Shared arenas
558
559Several SV body structs are now the same size, notably PVMG and PVGV, PVAV and
560PVHV, and PVCV and PVFM. It should be possible to allocate and return same
561sized bodies from the same actual arena, rather than maintaining one arena for
562each. This could save 4-6K per thread, of memory no longer tied up in the
563not-yet-allocated part of an arena.
564
8964cfe0 565
6d71adcd 566=head1 Tasks that need a knowledge of XS
567
568These tasks would need C knowledge, and roughly the level of knowledge of
569the perl API that comes from writing modules that use XS to interface to
570C.
571
318bf708 572=head2 Remove the use of SVs as temporaries in dump.c
573
574F<dump.c> contains debugging routines to dump out the contains of perl data
575structures, such as C<SV>s, C<AV>s and C<HV>s. Currently, the dumping code
576B<uses> C<SV>s for its temporary buffers, which was a logical initial
577implementation choice, as they provide ready made memory handling.
578
579However, they also lead to a lot of confusion when it happens that what you're
580trying to debug is seen by the code in F<dump.c>, correctly or incorrectly, as
581a temporary scalar it can use for a temporary buffer. It's also not possible
582to dump scalars before the interpreter is properly set up, such as during
583ithreads cloning. It would be good to progressively replace the use of scalars
584as string accumulation buffers with something much simpler, directly allocated
585by C<malloc>. The F<dump.c> code is (or should be) only producing 7 bit
586US-ASCII, so output character sets are not an issue.
587
588Producing and proving an internal simple buffer allocation would make it easier
589to re-write the internals of the PerlIO subsystem to avoid using C<SV>s for
590B<its> buffers, use of which can cause problems similar to those of F<dump.c>,
591at similar times.
592
5d96f598 593=head2 safely supporting POSIX SA_SIGINFO
594
595Some years ago Jarkko supplied patches to provide support for the POSIX
596SA_SIGINFO feature in Perl, passing the extra data to the Perl signal handler.
597
598Unfortunately, it only works with "unsafe" signals, because under safe
599signals, by the time Perl gets to run the signal handler, the extra
600information has been lost. Moreover, it's not easy to store it somewhere,
601as you can't call mutexs, or do anything else fancy, from inside a signal
602handler.
603
604So it strikes me that we could provide safe SA_SIGINFO support
605
606=over 4
607
608=item 1
609
610Provide global variables for two file descriptors
611
612=item 2
613
614When the first request is made via C<sigaction> for C<SA_SIGINFO>, create a
615pipe, store the reader in one, the writer in the other
616
617=item 3
618
619In the "safe" signal handler (C<Perl_csighandler()>/C<S_raise_signal()>), if
620the C<siginfo_t> pointer non-C<NULL>, and the writer file handle is open,
621
622=over 8
623
624=item 1
625
626serialise signal number, C<struct siginfo_t> (or at least the parts we care
627about) into a small auto char buff
628
629=item 2
630
631C<write()> that (non-blocking) to the writer fd
632
633=over 12
634
635=item 1
636
637if it writes 100%, flag the signal in a counter of "signals on the pipe" akin
638to the current per-signal-number counts
639
640=item 2
641
642if it writes 0%, assume the pipe is full. Flag the data as lost?
643
644=item 3
645
646if it writes partially, croak a panic, as your OS is broken.
647
648=back
649
650=back
651
652=item 4
653
654in the regular C<PERL_ASYNC_CHECK()> processing, if there are "signals on
655the pipe", read the data out, deserialise, build the Perl structures on
656the stack (code in C<Perl_sighandler()>, the "unsafe" handler), and call as
657usual.
658
659=back
660
661I think that this gets us decent C<SA_SIGINFO> support, without the current risk
662of running Perl code inside the signal handler context. (With all the dangers
663of things like C<malloc> corruption that that currently offers us)
664
665For more information see the thread starting with this message:
666http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html
667
6d71adcd 668=head2 autovivification
669
670Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
671
672This task is incremental - even a little bit of work on it will help.
673
674=head2 Unicode in Filenames
675
676chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
677opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
678system, truncate, unlink, utime, -X. All these could potentially accept
679Unicode filenames either as input or output (and in the case of system
680and qx Unicode in general, as input or output to/from the shell).
681Whether a filesystem - an operating system pair understands Unicode in
682filenames varies.
683
684Known combinations that have some level of understanding include
685Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac
686OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to
687create Unicode filenames, what forms of Unicode are accepted and used
688(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used,
689and so on, varies. Finding the right level of interfacing to Perl
690requires some thought. Remember that an OS does not implicate a
691filesystem.
692
693(The Windows -C command flag "wide API support" has been at least
694temporarily retired in 5.8.1, and the -C has been repurposed, see
695L<perlrun>.)
696
87a942b1 697Most probably the right way to do this would be this:
698L</"Virtualize operating system access">.
699
6d71adcd 700=head2 Unicode in %ENV
701
702Currently the %ENV entries are always byte strings.
87a942b1 703See L</"Virtualize operating system access">.
6d71adcd 704
1f2e7916 705=head2 Unicode and glob()
706
707Currently glob patterns and filenames returned from File::Glob::glob()
87a942b1 708are always byte strings. See L</"Virtualize operating system access">.
1f2e7916 709
dbb0c492 710=head2 Unicode and lc/uc operators
711
712Some built-in operators (C<lc>, C<uc>, etc.) behave differently, based on
713what the internal encoding of their argument is. That should not be the
714case. Maybe add a pragma to switch behaviour.
715
6d71adcd 716=head2 use less 'memory'
717
718Investigate trade offs to switch out perl's choices on memory usage.
719Particularly perl should be able to give memory back.
720
721This task is incremental - even a little bit of work on it will help.
722
723=head2 Re-implement C<:unique> in a way that is actually thread-safe
724
725The old implementation made bad assumptions on several levels. A good 90%
726solution might be just to make C<:unique> work to share the string buffer
727of SvPVs. That way large constant strings can be shared between ithreads,
728such as the configuration information in F<Config>.
729
730=head2 Make tainting consistent
731
732Tainting would be easier to use if it didn't take documented shortcuts and
733allow taint to "leak" everywhere within an expression.
734
735=head2 readpipe(LIST)
736
737system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
738running a shell. readpipe() (the function behind qx//) could be similarly
739extended.
740
6d71adcd 741=head2 Audit the code for destruction ordering assumptions
742
743Change 25773 notes
744
745 /* Need to check SvMAGICAL, as during global destruction it may be that
746 AvARYLEN(av) has been freed before av, and hence the SvANY() pointer
747 is now part of the linked list of SV heads, rather than pointing to
748 the original body. */
749 /* FIXME - audit the code for other bugs like this one. */
750
751adding the C<SvMAGICAL> check to
752
753 if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) {
754 MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen);
755
756Go through the core and look for similar assumptions that SVs have particular
757types, as all bets are off during global destruction.
758
749904bf 759=head2 Extend PerlIO and PerlIO::Scalar
760
761PerlIO::Scalar doesn't know how to truncate(). Implementing this
762would require extending the PerlIO vtable.
763
764Similarly the PerlIO vtable doesn't know about formats (write()), or
765about stat(), or chmod()/chown(), utime(), or flock().
766
767(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
768would mean.)
769
770PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
771opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
772readlink().
773
94da6c29 774See also L</"Virtualize operating system access">.
775
3236f110 776=head2 -C on the #! line
777
778It should be possible to make -C work correctly if found on the #! line,
779given that all perl command line options are strict ASCII, and -C changes
780only the interpretation of non-ASCII characters, and not for the script file
781handle. To make it work needs some investigation of the ordering of function
782calls during startup, and (by implication) a bit of tweaking of that order.
783
d6c1e11f 784=head2 Organize error messages
785
786Perl's diagnostics (error messages, see L<perldiag>) could use
a8d0aeb9 787reorganizing and formalizing so that each error message has its
d6c1e11f 788stable-for-all-eternity unique id, categorized by severity, type, and
789subsystem. (The error messages would be listed in a datafile outside
c4bd451b 790of the Perl source code, and the source code would only refer to the
791messages by the id.) This clean-up and regularizing should apply
d6c1e11f 792for all croak() messages.
793
794This would enable all sorts of things: easier translation/localization
795of the messages (though please do keep in mind the caveats of
796L<Locale::Maketext> about too straightforward approaches to
797translation), filtering by severity, and instead of grepping for a
798particular error message one could look for a stable error id. (Of
799course, changing the error messages by default would break all the
800existing software depending on some particular error message...)
801
802This kind of functionality is known as I<message catalogs>. Look for
803inspiration for example in the catgets() system, possibly even use it
804if available-- but B<only> if available, all platforms will B<not>
de96509d 805have catgets().
d6c1e11f 806
807For the really pure at heart, consider extending this item to cover
808also the warning messages (see L<perllexwarn>, C<warnings.pl>).
3236f110 809
0bdfc961 810=head1 Tasks that need a knowledge of the interpreter
3298bd4d 811
0bdfc961 812These tasks would need C knowledge, and knowledge of how the interpreter works,
813or a willingness to learn.
3298bd4d 814
de6375e3 815=head2 truncate() prototype
816
817The prototype of truncate() is currently C<$$>. It should probably
818be C<*$> instead. (This is changed in F<opcode.pl>)
819
2d0587d8 820=head2 decapsulation of smart match argument
821
822Currently C<$foo ~~ $object> will die with the message "Smart matching a
823non-overloaded object breaks encapsulation". It would be nice to allow
824to bypass this by using explictly the syntax C<$foo ~~ %$object> or
825C<$foo ~~ @$object>.
826
565590b5 827=head2 error reporting of [$a ; $b]
828
829Using C<;> inside brackets is a syntax error, and we don't propose to change
830that by giving it any meaning. However, it's not reported very helpfully:
831
832 $ perl -e '$a = [$b; $c];'
833 syntax error at -e line 1, near "$b;"
834 syntax error at -e line 1, near "$c]"
835 Execution of -e aborted due to compilation errors.
836
837It should be possible to hook into the tokeniser or the lexer, so that when a
838C<;> is parsed where it is not legal as a statement terminator (ie inside
839C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like
840I<';' isn't legal inside an expression - if you need multiple statements use a
841do {...} block>. See the thread starting at
842http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html
843
718140ec 844=head2 lexicals used only once
845
846This warns:
847
848 $ perl -we '$pie = 42'
849 Name "main::pie" used only once: possible typo at -e line 1.
850
851This does not:
852
853 $ perl -we 'my $pie = 42'
854
855Logically all lexicals used only once should warn, if the user asks for
d6f4ea2e 856warnings. An unworked RT ticket (#5087) has been open for almost seven
857years for this discrepancy.
718140ec 858
a3d15f9a 859=head2 UTF-8 revamp
860
861The handling of Unicode is unclean in many places. For example, the regexp
862engine matches in Unicode semantics whenever the string or the pattern is
863flagged as UTF-8, but that should not be dependent on an internal storage
864detail of the string. Likewise, case folding behaviour is dependent on the
865UTF8 internal flag being on or off.
866
867=head2 Properly Unicode safe tokeniser and pads.
868
869The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack -
870variable names are stored in stashes as raw bytes, without the utf-8 flag
871set. The pad API only takes a C<char *> pointer, so that's all bytes too. The
872tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from
873source filters. All this could be fixed.
874
636e63cb 875=head2 state variable initialization in list context
876
877Currently this is illegal:
878
879 state ($a, $b) = foo();
880
a2874905 881In Perl 6, C<state ($a) = foo();> and C<(state $a) = foo();> have different
a8d0aeb9 882semantics, which is tricky to implement in Perl 5 as currently they produce
a2874905 883the same opcode trees. The Perl 6 design is firm, so it would be good to
a8d0aeb9 884implement the necessary code in Perl 5. There are comments in
a2874905 885C<Perl_newASSIGNOP()> that show the code paths taken by various assignment
886constructions involving state variables.
636e63cb 887
4fedb12c 888=head2 Implement $value ~~ 0 .. $range
889
890It would be nice to extend the syntax of the C<~~> operator to also
891understand numeric (and maybe alphanumeric) ranges.
a393eb28 892
893=head2 A does() built-in
894
895Like ref(), only useful. It would call the C<DOES> method on objects; it
896would also tell whether something can be dereferenced as an
897array/hash/etc., or used as a regexp, etc.
898L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
899
900=head2 Tied filehandles and write() don't mix
901
902There is no method on tied filehandles to allow them to be called back by
903formats.
4fedb12c 904
53967bb9 905=head2 Propagate compilation hints to the debugger
906
907Currently a debugger started with -dE on the command-line doesn't see the
908features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't
909propagated to the debugger. Probably it would be a good thing to propagate
910hints from the innermost non-C<DB::> scope: this would make code eval'ed
911in the debugger see the features (and strictures, etc.) currently in
912scope.
913
d10fc472 914=head2 Attach/detach debugger from running program
1626a787 915
cd793d32 916The old perltodo notes "With C<gdb>, you can attach the debugger to a running
917program if you pass the process ID. It would be good to do this with the Perl
0bdfc961 918debugger on a running Perl program, although I'm not sure how it would be
919done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
1626a787 920
0bdfc961 921=head2 LVALUE functions for lists
922
923The old perltodo notes that lvalue functions don't work for list or hash
924slices. This would be good to fix.
925
0bdfc961 926=head2 regexp optimiser optional
927
928The regexp optimiser is not optional. It should configurable to be, to allow
929its performance to be measured, and its bugs to be easily demonstrated.
930
02f21748 931=head2 delete &function
932
933Allow to delete functions. One can already undef them, but they're still
934in the stash.
935
ef36c6a7 936=head2 C</w> regex modifier
937
938That flag would enable to match whole words, and also to interpolate
939arrays as alternations. With it, C</P/w> would be roughly equivalent to:
940
941 do { local $"='|'; /\b(?:P)\b/ }
942
943See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
944for the discussion.
945
0bdfc961 946=head2 optional optimizer
947
948Make the peephole optimizer optional. Currently it performs two tasks as
949it walks the optree - genuine peephole optimisations, and necessary fixups of
950ops. It would be good to find an efficient way to switch out the
951optimisations whilst keeping the fixups.
952
953=head2 You WANT *how* many
954
955Currently contexts are void, scalar and list. split has a special mechanism in
956place to pass in the number of return values wanted. It would be useful to
957have a general mechanism for this, backwards compatible and little speed hit.
958This would allow proposals such as short circuiting sort to be implemented
959as a module on CPAN.
960
961=head2 lexical aliases
962
963Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
964
965=head2 entersub XS vs Perl
966
967At the moment pp_entersub is huge, and has code to deal with entering both
968perl and XS subroutines. Subroutine implementations rarely change between
969perl and XS at run time, so investigate using 2 ops to enter subs (one for
970XS, one for perl) and swap between if a sub is redefined.
2810d901 971
de535794 972=head2 Self-ties
2810d901 973
de535794 974Self-ties are currently illegal because they caused too many segfaults. Maybe
a8d0aeb9 975the causes of these could be tracked down and self-ties on all types
de535794 976reinstated.
0bdfc961 977
978=head2 Optimize away @_
979
980The old perltodo notes "Look at the "reification" code in C<av.c>".
981
87a942b1 982=head2 Virtualize operating system access
983
984Implement a set of "vtables" that virtualizes operating system access
985(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
986least these interfaces should take SVs as "name" arguments instead of
987bare char pointers; probably the most flexible and extensible way
e1a3d5d1 988would be for the Perl-facing interfaces to accept HVs. The system
989needs to be per-operating-system and per-file-system
990hookable/filterable, preferably both from XS and Perl level
87a942b1 991(L<perlport/"Files and Filesystems"> is good reading at this point,
992in fact, all of L<perlport> is.)
993
e1a3d5d1 994This has actually already been implemented (but only for Win32),
995take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32
996variants go through a set of "vtables" for operating system access,
997non-Win32 systems currently go straight for the POSIX/UNIX-style
998system/library call. Similar system as for Win32 should be
999implemented for all platforms. The existing Win32 implementation
1000probably does not need to survive alongside this proposed new
1001implementation, the approaches could be merged.
87a942b1 1002
1003What would this give us? One often-asked-for feature this would
94da6c29 1004enable is using Unicode for filenames, and other "names" like %ENV,
1005usernames, hostnames, and so forth.
1006(See L<perlunicode/"When Unicode Does Not Happen">.)
1007
1008But this kind of virtualization would also allow for things like
1009virtual filesystems, virtual networks, and "sandboxes" (though as long
1010as dynamic loading of random object code is allowed, not very safe
1011sandboxes since external code of course know not of Perl's vtables).
1012An example of a smaller "sandbox" is that this feature can be used to
1013implement per-thread working directories: Win32 already does this.
1014
1015See also L</"Extend PerlIO and PerlIO::Scalar">.
87a942b1 1016
ac6197af 1017=head2 Investigate PADTMP hash pessimisation
1018
9a2f2e6b 1019The peephole optimiser converts constants used for hash key lookups to shared
057163d7 1020hash key scalars. Under ithreads, something is undoing this work.
ac6197af 1021See http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html
1022
057163d7 1023=head2 Store the current pad in the OP slab allocator
1024
1025=for clarification
1026I hope that I got that "current pad" part correct
1027
1028Currently we leak ops in various cases of parse failure. I suggested that we
1029could solve this by always using the op slab allocator, and walking it to
1030free ops. Dave comments that as some ops are already freed during optree
1031creation one would have to mark which ops are freed, and not double free them
1032when walking the slab. He notes that one problem with this is that for some ops
1033you have to know which pad was current at the time of allocation, which does
1034change. I suggested storing a pointer to the current pad in the memory allocated
1035for the slab, and swapping to a new slab each time the pad changes. Dave thinks
1036that this would work.
1037
52960e22 1038=head2 repack the optree
1039
1040Repacking the optree after execution order is determined could allow
057163d7 1041removal of NULL ops, and optimal ordering of OPs with respect to cache-line
1042filling. The slab allocator could be reused for this purpose. I think that
1043the best way to do this is to make it an optional step just before the
1044completed optree is attached to anything else, and to use the slab allocator
1045unchanged, so that freeing ops is identical whether or not this step runs.
1046Note that the slab allocator allocates ops downwards in memory, so one would
1047have to actually "allocate" the ops in reverse-execution order to get them
1048contiguous in memory in execution order.
1049
1050See http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131975.html
1051
1052Note that running this copy, and then freeing all the old location ops would
1053cause their slabs to be freed, which would eliminate possible memory wastage if
1054the previous suggestion is implemented, and we swap slabs more frequently.
52960e22 1055
12e06b6f 1056=head2 eliminate incorrect line numbers in warnings
1057
1058This code
1059
1060 use warnings;
1061 my $undef;
1062
1063 if ($undef == 3) {
1064 } elsif ($undef == 0) {
1065 }
1066
18a16cc5 1067used to produce this output:
12e06b6f 1068
1069 Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
1070 Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
1071
18a16cc5 1072where the line of the second warning was misreported - it should be line 5.
1073Rafael fixed this - the problem arose because there was no nextstate OP
1074between the execution of the C<if> and the C<elsif>, hence C<PL_curcop> still
1075reports that the currently executing line is line 4. The solution was to inject
1076a nextstate OPs for each C<elsif>, although it turned out that the nextstate
1077OP needed to be a nulled OP, rather than a live nextstate OP, else other line
1078numbers became misreported. (Jenga!)
12e06b6f 1079
1080The problem is more general than C<elsif> (although the C<elsif> case is the
1081most common and the most confusing). Ideally this code
1082
1083 use warnings;
1084 my $undef;
1085
1086 my $a = $undef + 1;
1087 my $b
1088 = $undef
1089 + 1;
1090
1091would produce this output
1092
1093 Use of uninitialized value $undef in addition (+) at wrong.pl line 4.
1094 Use of uninitialized value $undef in addition (+) at wrong.pl line 7.
1095
1096(rather than lines 4 and 5), but this would seem to require every OP to carry
1097(at least) line number information.
1098
1099What might work is to have an optional line number in memory just before the
1100BASEOP structure, with a flag bit in the op to say whether it's present.
1101Initially during compile every OP would carry its line number. Then add a late
1102pass to the optimiser (potentially combined with L</repack the optree>) which
1103looks at the two ops on every edge of the graph of the execution path. If
1104the line number changes, flags the destination OP with this information.
1105Once all paths are traced, replace every op with the flag with a
1106nextstate-light op (that just updates C<PL_curcop>), which in turn then passes
1107control on to the true op. All ops would then be replaced by variants that
1108do not store the line number. (Which, logically, why it would work best in
1109conjunction with L</repack the optree>, as that is already copying/reallocating
1110all the OPs)
1111
18a16cc5 1112(Although I should note that we're not certain that doing this for the general
1113case is worth it)
1114
52960e22 1115=head2 optimize tail-calls
1116
1117Tail-calls present an opportunity for broadly applicable optimization;
1118anywhere that C<< return foo(...) >> is called, the outer return can
1119be replaced by a goto, and foo will return directly to the outer
1120caller, saving (conservatively) 25% of perl's call&return cost, which
1121is relatively higher than in C. The scheme language is known to do
1122this heavily. B::Concise provides good insight into where this
1123optimization is possible, ie anywhere entersub,leavesub op-sequence
1124occurs.
1125
1126 perl -MO=Concise,-exec,a,b,-main -e 'sub a{ 1 }; sub b {a()}; b(2)'
1127
1128Bottom line on this is probably a new pp_tailcall function which
1129combines the code in pp_entersub, pp_leavesub. This should probably
1130be done 1st in XS, and using B::Generate to patch the new OP into the
1131optrees.
1132
0bdfc961 1133=head1 Big projects
1134
1135Tasks that will get your name mentioned in the description of the "Highlights
87a942b1 1136of 5.12"
0bdfc961 1137
1138=head2 make ithreads more robust
1139
4e577f8b 1140Generally make ithreads more robust. See also L</iCOW>
0bdfc961 1141
1142This task is incremental - even a little bit of work on it will help, and
1143will be greatly appreciated.
1144
6c047da7 1145One bit would be to write the missing code in sv.c:Perl_dirp_dup.
1146
59c7f7d5 1147Fix Perl_sv_dup, et al so that threads can return objects.
1148
0bdfc961 1149=head2 iCOW
1150
1151Sarathy and Arthur have a proposal for an improved Copy On Write which
1152specifically will be able to COW new ithreads. If this can be implemented
1153it would be a good thing.
1154
1155=head2 (?{...}) closures in regexps
1156
1157Fix (or rewrite) the implementation of the C</(?{...})/> closures.
1158
1159=head2 A re-entrant regexp engine
1160
1161This will allow the use of a regex from inside (?{ }), (??{ }) and
1162(?(?{ })|) constructs.
6bda09f9 1163
6bda09f9 1164=head2 Add class set operations to regexp engine
1165
1166Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
1167
1168demerphq has this on his todo list, but right at the bottom.
44a7a252 1169
1170
1171=head1 Tasks for microperl
1172
1173
1174[ Each and every one of these may be obsolete, but they were listed
1175 in the old Todo.micro file]
1176
1177
1178=head2 make creating uconfig.sh automatic
1179
1180=head2 make creating Makefile.micro automatic
1181
1182=head2 do away with fork/exec/wait?
1183
1184(system, popen should be enough?)
1185
1186=head2 some of the uconfig.sh really needs to be probed (using cc) in buildtime:
1187
1188(uConfigure? :-) native datatype widths and endianness come to mind
1189