Upgrade to Time::HiRes 1.9709
[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
0bdfc961 7This is a list of wishes for Perl. The tasks we think are smaller or easier
8are listed first. Anyone is welcome to work on any of these, but it's a good
9idea to first contact I<perl5-porters@perl.org> to avoid duplication of
10effort. By all means contact a pumpking privately first if you prefer.
e50bb9a1 11
0bdfc961 12Whilst patches to make the list shorter are most welcome, ideas to add to
13the list are also encouraged. Check the perl5-porters archives for past
14ideas, and any discussion about them. One set of archives may be found at:
e50bb9a1 15
0bdfc961 16 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
938c8732 17
617eabfa 18What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
19not, but if your patch is incorporated, then we'll add your name to the
20F<AUTHORS> file, which ships in the official distribution. How many other
21programming languages offer you 1 line of immortality?
938c8732 22
0bdfc961 23=head1 Tasks that only need Perl knowledge
e50bb9a1 24
412f19a0 25=head2 merge common code in installperl and installman
26
27There are some common subroutines and a common C<BEGIN> block in F<installperl>
28and F<installman>. These should probably be merged. It would also be good to
29check for duplication in all the utility scripts supplied in the source
30tarball. It might be good to move them all to a subdirectory, but this would
31require careful checking to find all places that call them, and change those
32correctly.
33
0bdfc961 34=head2 common test code for timed bail out
e50bb9a1 35
0bdfc961 36Write portable self destruct code for tests to stop them burning CPU in
37infinite loops. This needs to avoid using alarm, as some of the tests are
38testing alarm/sleep or timers.
e50bb9a1 39
87a942b1 40=head2 POD -E<gt> HTML conversion in the core still sucks
e50bb9a1 41
938c8732 42Which is crazy given just how simple POD purports to be, and how simple HTML
adebf063 43can be. It's not actually I<as> simple as it sounds, particularly with the
44flexibility POD allows for C<=item>, but it would be good to improve the
45visual appeal of the HTML generated, and to avoid it having any validation
46errors. See also L</make HTML install work>, as the layout of installation tree
47is needed to improve the cross-linking.
938c8732 48
dc0fb092 49The addition of C<Pod::Simple> and its related modules may make this task
50easier to complete.
51
8537f021 52=head2 merge checkpods and podchecker
53
54F<pod/checkpods.PL> (and C<make check> in the F<pod/> subdirectory)
55implements a very basic check for pod files, but the errors it discovers
56aren't found by podchecker. Add this check to podchecker, get rid of
57checkpods and have C<make check> use podchecker.
58
b032e2ff 59=head2 perlmodlib.PL rewrite
60
61Currently perlmodlib.PL needs to be run from a source directory where perl
62has been built, or some modules won't be found, and others will be
63skipped. Make it run from a clean perl source tree (so it's reproducible).
64
aa237293 65=head2 Parallel testing
66
b2e2905c 67(This probably impacts much more than the core: also the Test::Harness
02f21748 68and TAP::* modules on CPAN.)
69
aa237293 70The core regression test suite is getting ever more comprehensive, which has
71the side effect that it takes longer to run. This isn't so good. Investigate
72whether it would be feasible to give the harness script the B<option> of
73running sets of tests in parallel. This would be useful for tests in
74F<t/op/*.t> and F<t/uni/*.t> and maybe some sets of tests in F<lib/>.
75
76Questions to answer
77
78=over 4
79
80=item 1
81
82How does screen layout work when you're running more than one test?
83
84=item 2
85
86How does the caller of test specify how many tests to run in parallel?
87
88=item 3
89
90How do setup/teardown tests identify themselves?
91
92=back
93
94Pugs already does parallel testing - can their approach be re-used?
95
0bdfc961 96=head2 Make Schwern poorer
e50bb9a1 97
613bd4f7 98We should have tests for everything. When all the core's modules are tested,
0bdfc961 99Schwern has promised to donate to $500 to TPF. We may need volunteers to
100hold him upside down and shake vigorously in order to actually extract the
101cash.
3958b146 102
0bdfc961 103=head2 Improve the coverage of the core tests
e50bb9a1 104
02f21748 105Use Devel::Cover to ascertain the core modules's test coverage, then add
106tests that are currently missing.
30222c0f 107
0bdfc961 108=head2 test B
e50bb9a1 109
0bdfc961 110A full test suite for the B module would be nice.
e50bb9a1 111
636e63cb 112=head2 Deparse inlined constants
113
114Code such as this
115
116 use constant PI => 4;
117 warn PI
118
119will currently deparse as
120
121 use constant ('PI', 4);
122 warn 4;
123
124because the tokenizer inlines the value of the constant subroutine C<PI>.
125This allows various compile time optimisations, such as constant folding
126and dead code elimination. Where these haven't happened (such as the example
127above) it ought be possible to make B::Deparse work out the name of the
128original constant, because just enough information survives in the symbol
129table to do this. Specifically, the same scalar is used for the constant in
130the optree as is used for the constant subroutine, so by iterating over all
131symbol tables and generating a mapping of SV address to constant name, it
132would be possible to provide B::Deparse with this functionality.
133
0bdfc961 134=head2 A decent benchmark
e50bb9a1 135
617eabfa 136C<perlbench> seems impervious to any recent changes made to the perl core. It
0bdfc961 137would be useful to have a reasonable general benchmarking suite that roughly
138represented what current perl programs do, and measurably reported whether
139tweaks to the core improve, degrade or don't really affect performance, to
140guide people attempting to optimise the guts of perl. Gisle would welcome
141new tests for perlbench.
6168cf99 142
0bdfc961 143=head2 fix tainting bugs
6168cf99 144
0bdfc961 145Fix the bugs revealed by running the test suite with the C<-t> switch (via
146C<make test.taintwarn>).
e50bb9a1 147
0bdfc961 148=head2 Dual life everything
e50bb9a1 149
0bdfc961 150As part of the "dists" plan, anything that doesn't belong in the smallest perl
151distribution needs to be dual lifed. Anything else can be too. Figure out what
152changes would be needed to package that module and its tests up for CPAN, and
153do so. Test it with older perl releases, and fix the problems you find.
e50bb9a1 154
a393eb28 155To make a minimal perl distribution, it's useful to look at
156F<t/lib/commonsense.t>.
157
0bdfc961 158=head2 Improving C<threads::shared>
722d2a37 159
0bdfc961 160Investigate whether C<threads::shared> could share aggregates properly with
161only Perl level changes to shared.pm
722d2a37 162
0bdfc961 163=head2 POSIX memory footprint
e50bb9a1 164
0bdfc961 165Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
166various times worked to cut it down. There is probably still fat to cut out -
167for example POSIX passes Exporter some very memory hungry data structures.
e50bb9a1 168
eed36644 169=head2 embed.pl/makedef.pl
170
171There is a script F<embed.pl> that generates several header files to prefix
172all of Perl's symbols in a consistent way, to provide some semblance of
173namespace support in C<C>. Functions are declared in F<embed.fnc>, variables
907b3e23 174in F<interpvar.h>. Quite a few of the functions and variables
eed36644 175are conditionally declared there, using C<#ifdef>. However, F<embed.pl>
176doesn't understand the C macros, so the rules about which symbols are present
177when is duplicated in F<makedef.pl>. Writing things twice is bad, m'kay.
178It would be good to teach C<embed.pl> to understand the conditional
179compilation, and hence remove the duplication, and the mistakes it has caused.
e50bb9a1 180
801de10e 181=head2 use strict; and AutoLoad
182
183Currently if you write
184
185 package Whack;
186 use AutoLoader 'AUTOLOAD';
187 use strict;
188 1;
189 __END__
190 sub bloop {
191 print join (' ', No, strict, here), "!\n";
192 }
193
194then C<use strict;> isn't in force within the autoloaded subroutines. It would
195be more consistent (and less surprising) to arrange for all lexical pragmas
196in force at the __END__ block to be in force within each autoloaded subroutine.
197
773b3597 198There's a similar problem with SelfLoader.
199
0bdfc961 200=head1 Tasks that need a little sysadmin-type knowledge
e50bb9a1 201
0bdfc961 202Or if you prefer, tasks that you would learn from, and broaden your skills
203base...
e50bb9a1 204
cd793d32 205=head2 make HTML install work
e50bb9a1 206
adebf063 207There is an C<installhtml> target in the Makefile. It's marked as
208"experimental". It would be good to get this tested, make it work reliably, and
209remove the "experimental" tag. This would include
210
211=over 4
212
213=item 1
214
215Checking that cross linking between various parts of the documentation works.
216In particular that links work between the modules (files with POD in F<lib/>)
217and the core documentation (files in F<pod/>)
218
219=item 2
220
617eabfa 221Work out how to split C<perlfunc> into chunks, preferably one per function
222group, preferably with general case code that could be used elsewhere.
223Challenges here are correctly identifying the groups of functions that go
224together, and making the right named external cross-links point to the right
225page. Things to be aware of are C<-X>, groups such as C<getpwnam> to
226C<endservent>, two or more C<=items> giving the different parameter lists, such
227as
adebf063 228
229 =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
adebf063 230 =item substr EXPR,OFFSET,LENGTH
adebf063 231 =item substr EXPR,OFFSET
232
233and different parameter lists having different meanings. (eg C<select>)
234
235=back
3a89a73c 236
0bdfc961 237=head2 compressed man pages
238
239Be able to install them. This would probably need a configure test to see how
240the system does compressed man pages (same directory/different directory?
241same filename/different filename), as well as tweaking the F<installman> script
242to compress as necessary.
243
30222c0f 244=head2 Add a code coverage target to the Makefile
245
246Make it easy for anyone to run Devel::Cover on the core's tests. The steps
247to do this manually are roughly
248
249=over 4
250
251=item *
252
253do a normal C<Configure>, but include Devel::Cover as a module to install
254(see F<INSTALL> for how to do this)
255
256=item *
257
258 make perl
259
260=item *
261
262 cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
263
264=item *
265
266Process the resulting Devel::Cover database
267
268=back
269
270This just give you the coverage of the F<.pm>s. To also get the C level
271coverage you need to
272
273=over 4
274
275=item *
276
277Additionally tell C<Configure> to use the appropriate C compiler flags for
278C<gcov>
279
280=item *
281
282 make perl.gcov
283
284(instead of C<make perl>)
285
286=item *
287
288After running the tests run C<gcov> to generate all the F<.gcov> files.
289(Including down in the subdirectories of F<ext/>
290
291=item *
292
293(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files
294to get their stats into the cover_db directory.
295
296=item *
297
298Then process the Devel::Cover database
299
300=back
301
302It would be good to add a single switch to C<Configure> to specify that you
303wanted to perform perl level coverage, and another to specify C level
304coverage, and have C<Configure> and the F<Makefile> do all the right things
305automatically.
306
02f21748 307=head2 Make Config.pm cope with differences between built and installed perl
0bdfc961 308
309Quite often vendors ship a perl binary compiled with their (pay-for)
310compilers. People install a free compiler, such as gcc. To work out how to
311build extensions, Perl interrogates C<%Config>, so in this situation
312C<%Config> describes compilers that aren't there, and extension building
313fails. This forces people into choosing between re-compiling perl themselves
314using the compiler they have, or only using modules that the vendor ships.
315
316It would be good to find a way teach C<Config.pm> about the installation setup,
317possibly involving probing at install time or later, so that the C<%Config> in
318a binary distribution better describes the installed machine, when the
319installed machine differs from the build machine in some significant way.
320
728f4ecd 321=head2 linker specification files
322
323Some platforms mandate that you provide a list of a shared library's external
324symbols to the linker, so the core already has the infrastructure in place to
325do this for generating shared perl libraries. My understanding is that the
326GNU toolchain can accept an optional linker specification file, and restrict
327visibility just to symbols declared in that file. It would be good to extend
328F<makedef.pl> to support this format, and to provide a means within
329C<Configure> to enable it. This would allow Unix users to test that the
330export list is correct, and to build a perl that does not pollute the global
331namespace with private symbols.
332
a229ae3b 333=head2 Cross-compile support
334
335Currently C<Configure> understands C<-Dusecrosscompile> option. This option
336arranges for building C<miniperl> for TARGET machine, so this C<miniperl> is
337assumed then to be copied to TARGET machine and used as a replacement of full
338C<perl> executable.
339
d1307786 340This could be done little differently. Namely C<miniperl> should be built for
a229ae3b 341HOST and then full C<perl> with extensions should be compiled for TARGET.
d1307786 342This, however, might require extra trickery for %Config: we have one config
87a942b1 343first for HOST and then another for TARGET. Tools like MakeMaker will be
344mightily confused. Having around two different types of executables and
345libraries (HOST and TARGET) makes life interesting for Makefiles and
346shell (and Perl) scripts. There is $Config{run}, normally empty, which
347can be used as an execution wrapper. Also note that in some
348cross-compilation/execution environments the HOST and the TARGET do
349not see the same filesystem(s), the $Config{run} may need to do some
350file/directory copying back and forth.
0bdfc961 351
8537f021 352=head2 roffitall
353
354Make F<pod/roffitall> be updated by F<pod/buildtoc>.
355
0bdfc961 356=head1 Tasks that need a little C knowledge
357
358These tasks would need a little C knowledge, but don't need any specific
359background or experience with XS, or how the Perl interpreter works
360
99d50c9c 361=head2 Exterminate PL_na!
362
363C<PL_na> festers still in the darkest corners of various typemap files.
364It needs to be exterminated, replaced by a local variable of type C<STRLEN>.
365
fbf638cb 366=head2 Modernize the order of directories in @INC
367
368The way @INC is laid out by default, one cannot upgrade core (dual-life)
369modules without overwriting files. This causes problems for binary
3d14fd97 370package builders. One possible proposal is laid out in this
371message:
372L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>.
fbf638cb 373
bcbaa2d5 374=head2 -Duse32bit*
375
376Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
377On these systems, it might be the default compilation mode, and there
378is currently no guarantee that passing no use64bitall option to the
379Configure process will build a 32bit perl. Implementing -Duse32bit*
380options would be nice for perl 5.12.
381
0bdfc961 382=head2 Make it clear from -v if this is the exact official release
89007cb3 383
617eabfa 384Currently perl from C<p4>/C<rsync> ships with a F<patchlevel.h> file that
385usually defines one local patch, of the form "MAINT12345" or "RC1". The output
386of perl -v doesn't report that a perl isn't an official release, and this
89007cb3 387information can get lost in bugs reports. Because of this, the minor version
fa11829f 388isn't bumped up until RC time, to minimise the possibility of versions of perl
89007cb3 389escaping that believe themselves to be newer than they actually are.
390
391It would be useful to find an elegant way to have the "this is an interim
392maintenance release" or "this is a release candidate" in the terse -v output,
393and have it so that it's easy for the pumpking to remove this just as the
394release tarball is rolled up. This way the version pulled out of rsync would
395always say "I'm a development release" and it would be safe to bump the
396reported minor version as soon as a release ships, which would aid perl
397developers.
398
0bdfc961 399This task is really about thinking of an elegant way to arrange the C source
400such that it's trivial for the Pumpking to flag "this is an official release"
401when making a tarball, yet leave the default source saying "I'm not the
402official release".
403
fee0a0f7 404=head2 Profile Perl - am I hot or not?
62403a3c 405
fee0a0f7 406The Perl source code is stable enough that it makes sense to profile it,
407identify and optimise the hotspots. It would be good to measure the
408performance of the Perl interpreter using free tools such as cachegrind,
409gprof, and dtrace, and work to reduce the bottlenecks they reveal.
410
411As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops,
412the ops that are most commonly used. The idea is that by grouping them, their
413object code will be adjacent in the executable, so they have a greater chance
414of already being in the CPU cache (or swapped in) due to being near another op
415already in use.
62403a3c 416
417Except that it's not clear if these really are the most commonly used ops. So
fee0a0f7 418as part of exercising your skills with coverage and profiling tools you might
419want to determine what ops I<really> are the most commonly used. And in turn
420suggest evictions and promotions to achieve a better F<pp_hot.c>.
62403a3c 421
98fed0ad 422=head2 Allocate OPs from arenas
423
424Currently all new OP structures are individually malloc()ed and free()d.
425All C<malloc> implementations have space overheads, and are now as fast as
426custom allocates so it would both use less memory and less CPU to allocate
427the various OP structures from arenas. The SV arena code can probably be
428re-used for this.
429
539f2c54 430Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use
431Perl_Slab_alloc() to pack optrees into a contiguous block, which is
432probably superior to the use of OP arenas, esp. from a cache locality
433standpoint. See L<Profile Perl - am I hot or not?>.
434
a229ae3b 435=head2 Improve win32/wince.c
0bdfc961 436
a229ae3b 437Currently, numerous functions look virtually, if not completely,
02f21748 438identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
6d71adcd 439be good.
440
c5b31784 441=head2 Use secure CRT functions when building with VC8 on Win32
442
443Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
444that they were "unsafe" and introduced differently named secure versions of
445them as replacements, e.g. instead of writing
446
447 FILE* f = fopen(__FILE__, "r");
448
449one should now write
450
451 FILE* f;
452 errno_t err = fopen_s(&f, __FILE__, "r");
453
454Currently, the warnings about these deprecations have been disabled by adding
455-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
456warning suppressant and actually make use of the new secure CRT functions.
457
458There is also a similar issue with POSIX CRT function names like fileno having
459been deprecated in favour of ISO C++ conformant names like _fileno. These
26a6faa8 460warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It
c5b31784 461might be nice to do as Microsoft suggest here too, although, unlike the secure
462functions issue, there is presumably little or no benefit in this case.
463
6b632b43 464=head2 __FUNCTION__ for MSVC-pre-7.0
465
466Jarkko notes that one can things morally equivalent to C<__FUNCTION__>
467(or C<__func__>) even in MSVC-pre-7.0, contrary to popular belief.
468See L<http://www.codeproject.com/debug/extendedtrace.asp> if you feel like
469making C<PERL_MEM_LOG> more useful on Win32.
470
16815324 471=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
472
473Maybe create a utility that checks after each libperl.a creation that
474none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
475ever creep back to libperl.a.
476
477 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)$/'
478
479Note, of course, that this will only tell whether B<your> platform
480is using those naughty interfaces.
481
482
6d71adcd 483=head1 Tasks that need a knowledge of XS
484
485These tasks would need C knowledge, and roughly the level of knowledge of
486the perl API that comes from writing modules that use XS to interface to
487C.
488
6d71adcd 489=head2 autovivification
490
491Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
492
493This task is incremental - even a little bit of work on it will help.
494
495=head2 Unicode in Filenames
496
497chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
498opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
499system, truncate, unlink, utime, -X. All these could potentially accept
500Unicode filenames either as input or output (and in the case of system
501and qx Unicode in general, as input or output to/from the shell).
502Whether a filesystem - an operating system pair understands Unicode in
503filenames varies.
504
505Known combinations that have some level of understanding include
506Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac
507OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to
508create Unicode filenames, what forms of Unicode are accepted and used
509(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used,
510and so on, varies. Finding the right level of interfacing to Perl
511requires some thought. Remember that an OS does not implicate a
512filesystem.
513
514(The Windows -C command flag "wide API support" has been at least
515temporarily retired in 5.8.1, and the -C has been repurposed, see
516L<perlrun>.)
517
87a942b1 518Most probably the right way to do this would be this:
519L</"Virtualize operating system access">.
520
6d71adcd 521=head2 Unicode in %ENV
522
523Currently the %ENV entries are always byte strings.
87a942b1 524See L</"Virtualize operating system access">.
6d71adcd 525
1f2e7916 526=head2 Unicode and glob()
527
528Currently glob patterns and filenames returned from File::Glob::glob()
87a942b1 529are always byte strings. See L</"Virtualize operating system access">.
1f2e7916 530
dbb0c492 531=head2 Unicode and lc/uc operators
532
533Some built-in operators (C<lc>, C<uc>, etc.) behave differently, based on
534what the internal encoding of their argument is. That should not be the
535case. Maybe add a pragma to switch behaviour.
536
6d71adcd 537=head2 use less 'memory'
538
539Investigate trade offs to switch out perl's choices on memory usage.
540Particularly perl should be able to give memory back.
541
542This task is incremental - even a little bit of work on it will help.
543
544=head2 Re-implement C<:unique> in a way that is actually thread-safe
545
546The old implementation made bad assumptions on several levels. A good 90%
547solution might be just to make C<:unique> work to share the string buffer
548of SvPVs. That way large constant strings can be shared between ithreads,
549such as the configuration information in F<Config>.
550
551=head2 Make tainting consistent
552
553Tainting would be easier to use if it didn't take documented shortcuts and
554allow taint to "leak" everywhere within an expression.
555
556=head2 readpipe(LIST)
557
558system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
559running a shell. readpipe() (the function behind qx//) could be similarly
560extended.
561
6d71adcd 562=head2 Audit the code for destruction ordering assumptions
563
564Change 25773 notes
565
566 /* Need to check SvMAGICAL, as during global destruction it may be that
567 AvARYLEN(av) has been freed before av, and hence the SvANY() pointer
568 is now part of the linked list of SV heads, rather than pointing to
569 the original body. */
570 /* FIXME - audit the code for other bugs like this one. */
571
572adding the C<SvMAGICAL> check to
573
574 if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) {
575 MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen);
576
577Go through the core and look for similar assumptions that SVs have particular
578types, as all bets are off during global destruction.
579
749904bf 580=head2 Extend PerlIO and PerlIO::Scalar
581
582PerlIO::Scalar doesn't know how to truncate(). Implementing this
583would require extending the PerlIO vtable.
584
585Similarly the PerlIO vtable doesn't know about formats (write()), or
586about stat(), or chmod()/chown(), utime(), or flock().
587
588(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
589would mean.)
590
591PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
592opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
593readlink().
594
94da6c29 595See also L</"Virtualize operating system access">.
596
3236f110 597=head2 -C on the #! line
598
599It should be possible to make -C work correctly if found on the #! line,
600given that all perl command line options are strict ASCII, and -C changes
601only the interpretation of non-ASCII characters, and not for the script file
602handle. To make it work needs some investigation of the ordering of function
603calls during startup, and (by implication) a bit of tweaking of that order.
604
81622873 605=head2 Propagate const outwards from Perl_moreswitches()
606
607Change 32057 changed the parameter and return value of C<Perl_moreswitches()>
608from <char *> to <const char *>. It should now be possible to propagate
609const-correctness outwards to C<S_parse_body()>, C<Perl_moreswitches()>
610and C<Perl_yylex()>.
611
16815324 612=head2 Duplicate logic in S_method_common() and Perl_gv_fetchmethod_autoload()
613
614A comment in C<S_method_common> notes
615
616 /* This code tries to figure out just what went wrong with
617 gv_fetchmethod. It therefore needs to duplicate a lot of
618 the internals of that function. We can't move it inside
619 Perl_gv_fetchmethod_autoload(), however, since that would
620 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
621 don't want that.
622 */
623
624If C<Perl_gv_fetchmethod_autoload> gets rewritten to take (more) flag bits,
625then it ought to be possible to move the logic from C<S_method_common> to
626the "right" place. When making this change it would probably be good to also
627pass in at least the method name length, if not also pre-computed hash values
628when known. (I'm contemplating a plan to pre-compute hash values for common
629fixed strings such as C<ISA> and pass them in to functions.)
630
3236f110 631
0bdfc961 632=head1 Tasks that need a knowledge of the interpreter
3298bd4d 633
0bdfc961 634These tasks would need C knowledge, and knowledge of how the interpreter works,
635or a willingness to learn.
3298bd4d 636
636e63cb 637=head2 state variable initialization in list context
638
639Currently this is illegal:
640
641 state ($a, $b) = foo();
642
643The current Perl 6 design is that C<state ($a) = foo();> and
644C<(state $a) = foo();> have different semantics, which is tricky to implement
645in Perl 5 as currently the produce the same opcode trees. It would be useful
646to clarify that the Perl 6 design is firm, and then implement the necessary
647code in Perl 5. There are comments in C<Perl_newASSIGNOP()> that show the
648code paths taken by various assignment constructions involving state variables.
649
4fedb12c 650=head2 Implement $value ~~ 0 .. $range
651
652It would be nice to extend the syntax of the C<~~> operator to also
653understand numeric (and maybe alphanumeric) ranges.
a393eb28 654
655=head2 A does() built-in
656
657Like ref(), only useful. It would call the C<DOES> method on objects; it
658would also tell whether something can be dereferenced as an
659array/hash/etc., or used as a regexp, etc.
660L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
661
662=head2 Tied filehandles and write() don't mix
663
664There is no method on tied filehandles to allow them to be called back by
665formats.
4fedb12c 666
d10fc472 667=head2 Attach/detach debugger from running program
1626a787 668
cd793d32 669The old perltodo notes "With C<gdb>, you can attach the debugger to a running
670program if you pass the process ID. It would be good to do this with the Perl
0bdfc961 671debugger on a running Perl program, although I'm not sure how it would be
672done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
1626a787 673
a8cb5b9e 674=head2 Optimize away empty destructors
675
676Defining an empty DESTROY method might be useful (notably in
677AUTOLOAD-enabled classes), but it's still a bit expensive to call. That
678could probably be optimized.
679
0bdfc961 680=head2 LVALUE functions for lists
681
682The old perltodo notes that lvalue functions don't work for list or hash
683slices. This would be good to fix.
684
685=head2 LVALUE functions in the debugger
686
687The old perltodo notes that lvalue functions don't work in the debugger. This
688would be good to fix.
689
0bdfc961 690=head2 regexp optimiser optional
691
692The regexp optimiser is not optional. It should configurable to be, to allow
693its performance to be measured, and its bugs to be easily demonstrated.
694
02f21748 695=head2 delete &function
696
697Allow to delete functions. One can already undef them, but they're still
698in the stash.
699
ef36c6a7 700=head2 C</w> regex modifier
701
702That flag would enable to match whole words, and also to interpolate
703arrays as alternations. With it, C</P/w> would be roughly equivalent to:
704
705 do { local $"='|'; /\b(?:P)\b/ }
706
707See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
708for the discussion.
709
0bdfc961 710=head2 optional optimizer
711
712Make the peephole optimizer optional. Currently it performs two tasks as
713it walks the optree - genuine peephole optimisations, and necessary fixups of
714ops. It would be good to find an efficient way to switch out the
715optimisations whilst keeping the fixups.
716
717=head2 You WANT *how* many
718
719Currently contexts are void, scalar and list. split has a special mechanism in
720place to pass in the number of return values wanted. It would be useful to
721have a general mechanism for this, backwards compatible and little speed hit.
722This would allow proposals such as short circuiting sort to be implemented
723as a module on CPAN.
724
725=head2 lexical aliases
726
727Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
728
729=head2 entersub XS vs Perl
730
731At the moment pp_entersub is huge, and has code to deal with entering both
732perl and XS subroutines. Subroutine implementations rarely change between
733perl and XS at run time, so investigate using 2 ops to enter subs (one for
734XS, one for perl) and swap between if a sub is redefined.
2810d901 735
736=head2 Self ties
737
738self ties are currently illegal because they caused too many segfaults. Maybe
739the causes of these could be tracked down and self-ties on all types re-
740instated.
0bdfc961 741
742=head2 Optimize away @_
743
744The old perltodo notes "Look at the "reification" code in C<av.c>".
745
16fc99ce 746=head2 Properly Unicode safe tokeniser and pads.
747
748The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack -
749variable names are stored in stashes as raw bytes, without the utf-8 flag
750set. The pad API only takes a C<char *> pointer, so that's all bytes too. The
751tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from
752source filters. All this could be fixed.
753
f092b1f4 754=head2 The yada yada yada operators
755
756Perl 6's Synopsis 3 says:
757
758I<The ... operator is the "yada, yada, yada" list operator, which is used as
759the body in function prototypes. It complains bitterly (by calling fail)
760if it is ever executed. Variant ??? calls warn, and !!! calls die.>
761
762Those would be nice to add to Perl 5. That could be done without new ops.
763
87a942b1 764=head2 Virtualize operating system access
765
766Implement a set of "vtables" that virtualizes operating system access
767(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
768least these interfaces should take SVs as "name" arguments instead of
769bare char pointers; probably the most flexible and extensible way
e1a3d5d1 770would be for the Perl-facing interfaces to accept HVs. The system
771needs to be per-operating-system and per-file-system
772hookable/filterable, preferably both from XS and Perl level
87a942b1 773(L<perlport/"Files and Filesystems"> is good reading at this point,
774in fact, all of L<perlport> is.)
775
e1a3d5d1 776This has actually already been implemented (but only for Win32),
777take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32
778variants go through a set of "vtables" for operating system access,
779non-Win32 systems currently go straight for the POSIX/UNIX-style
780system/library call. Similar system as for Win32 should be
781implemented for all platforms. The existing Win32 implementation
782probably does not need to survive alongside this proposed new
783implementation, the approaches could be merged.
87a942b1 784
785What would this give us? One often-asked-for feature this would
94da6c29 786enable is using Unicode for filenames, and other "names" like %ENV,
787usernames, hostnames, and so forth.
788(See L<perlunicode/"When Unicode Does Not Happen">.)
789
790But this kind of virtualization would also allow for things like
791virtual filesystems, virtual networks, and "sandboxes" (though as long
792as dynamic loading of random object code is allowed, not very safe
793sandboxes since external code of course know not of Perl's vtables).
794An example of a smaller "sandbox" is that this feature can be used to
795implement per-thread working directories: Win32 already does this.
796
797See also L</"Extend PerlIO and PerlIO::Scalar">.
87a942b1 798
ac6197af 799=head2 Investigate PADTMP hash pessimisation
800
801The peephole optimier converts constants used for hash key lookups to shared
802hash key scalars. Under ithreads, something is undoing this work. See
803See http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html
804
0bdfc961 805=head1 Big projects
806
807Tasks that will get your name mentioned in the description of the "Highlights
87a942b1 808of 5.12"
0bdfc961 809
810=head2 make ithreads more robust
811
4e577f8b 812Generally make ithreads more robust. See also L</iCOW>
0bdfc961 813
814This task is incremental - even a little bit of work on it will help, and
815will be greatly appreciated.
816
6c047da7 817One bit would be to write the missing code in sv.c:Perl_dirp_dup.
818
59c7f7d5 819Fix Perl_sv_dup, et al so that threads can return objects.
820
0bdfc961 821=head2 iCOW
822
823Sarathy and Arthur have a proposal for an improved Copy On Write which
824specifically will be able to COW new ithreads. If this can be implemented
825it would be a good thing.
826
827=head2 (?{...}) closures in regexps
828
829Fix (or rewrite) the implementation of the C</(?{...})/> closures.
830
831=head2 A re-entrant regexp engine
832
833This will allow the use of a regex from inside (?{ }), (??{ }) and
834(?(?{ })|) constructs.
6bda09f9 835
6bda09f9 836=head2 Add class set operations to regexp engine
837
838Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
839
840demerphq has this on his todo list, but right at the bottom.