Regenerate META.yml
[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
fbf638cb 361=head2 Modernize the order of directories in @INC
362
363The way @INC is laid out by default, one cannot upgrade core (dual-life)
364modules without overwriting files. This causes problems for binary
3d14fd97 365package builders. One possible proposal is laid out in this
366message:
367L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>.
fbf638cb 368
bcbaa2d5 369=head2 -Duse32bit*
370
371Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
372On these systems, it might be the default compilation mode, and there
373is currently no guarantee that passing no use64bitall option to the
374Configure process will build a 32bit perl. Implementing -Duse32bit*
375options would be nice for perl 5.12.
376
0bdfc961 377=head2 Make it clear from -v if this is the exact official release
89007cb3 378
617eabfa 379Currently perl from C<p4>/C<rsync> ships with a F<patchlevel.h> file that
380usually defines one local patch, of the form "MAINT12345" or "RC1". The output
381of perl -v doesn't report that a perl isn't an official release, and this
89007cb3 382information can get lost in bugs reports. Because of this, the minor version
fa11829f 383isn't bumped up until RC time, to minimise the possibility of versions of perl
89007cb3 384escaping that believe themselves to be newer than they actually are.
385
386It would be useful to find an elegant way to have the "this is an interim
387maintenance release" or "this is a release candidate" in the terse -v output,
388and have it so that it's easy for the pumpking to remove this just as the
389release tarball is rolled up. This way the version pulled out of rsync would
390always say "I'm a development release" and it would be safe to bump the
391reported minor version as soon as a release ships, which would aid perl
392developers.
393
0bdfc961 394This task is really about thinking of an elegant way to arrange the C source
395such that it's trivial for the Pumpking to flag "this is an official release"
396when making a tarball, yet leave the default source saying "I'm not the
397official release".
398
fee0a0f7 399=head2 Profile Perl - am I hot or not?
62403a3c 400
fee0a0f7 401The Perl source code is stable enough that it makes sense to profile it,
402identify and optimise the hotspots. It would be good to measure the
403performance of the Perl interpreter using free tools such as cachegrind,
404gprof, and dtrace, and work to reduce the bottlenecks they reveal.
405
406As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops,
407the ops that are most commonly used. The idea is that by grouping them, their
408object code will be adjacent in the executable, so they have a greater chance
409of already being in the CPU cache (or swapped in) due to being near another op
410already in use.
62403a3c 411
412Except that it's not clear if these really are the most commonly used ops. So
fee0a0f7 413as part of exercising your skills with coverage and profiling tools you might
414want to determine what ops I<really> are the most commonly used. And in turn
415suggest evictions and promotions to achieve a better F<pp_hot.c>.
62403a3c 416
98fed0ad 417=head2 Allocate OPs from arenas
418
419Currently all new OP structures are individually malloc()ed and free()d.
420All C<malloc> implementations have space overheads, and are now as fast as
421custom allocates so it would both use less memory and less CPU to allocate
422the various OP structures from arenas. The SV arena code can probably be
423re-used for this.
424
539f2c54 425Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use
426Perl_Slab_alloc() to pack optrees into a contiguous block, which is
427probably superior to the use of OP arenas, esp. from a cache locality
428standpoint. See L<Profile Perl - am I hot or not?>.
429
a229ae3b 430=head2 Improve win32/wince.c
0bdfc961 431
a229ae3b 432Currently, numerous functions look virtually, if not completely,
02f21748 433identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
6d71adcd 434be good.
435
c5b31784 436=head2 Use secure CRT functions when building with VC8 on Win32
437
438Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
439that they were "unsafe" and introduced differently named secure versions of
440them as replacements, e.g. instead of writing
441
442 FILE* f = fopen(__FILE__, "r");
443
444one should now write
445
446 FILE* f;
447 errno_t err = fopen_s(&f, __FILE__, "r");
448
449Currently, the warnings about these deprecations have been disabled by adding
450-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
451warning suppressant and actually make use of the new secure CRT functions.
452
453There is also a similar issue with POSIX CRT function names like fileno having
454been deprecated in favour of ISO C++ conformant names like _fileno. These
26a6faa8 455warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It
c5b31784 456might be nice to do as Microsoft suggest here too, although, unlike the secure
457functions issue, there is presumably little or no benefit in this case.
458
6b632b43 459=head2 __FUNCTION__ for MSVC-pre-7.0
460
461Jarkko notes that one can things morally equivalent to C<__FUNCTION__>
462(or C<__func__>) even in MSVC-pre-7.0, contrary to popular belief.
463See L<http://www.codeproject.com/debug/extendedtrace.asp> if you feel like
464making C<PERL_MEM_LOG> more useful on Win32.
465
6d71adcd 466=head1 Tasks that need a knowledge of XS
467
468These tasks would need C knowledge, and roughly the level of knowledge of
469the perl API that comes from writing modules that use XS to interface to
470C.
471
6d71adcd 472=head2 autovivification
473
474Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
475
476This task is incremental - even a little bit of work on it will help.
477
478=head2 Unicode in Filenames
479
480chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
481opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
482system, truncate, unlink, utime, -X. All these could potentially accept
483Unicode filenames either as input or output (and in the case of system
484and qx Unicode in general, as input or output to/from the shell).
485Whether a filesystem - an operating system pair understands Unicode in
486filenames varies.
487
488Known combinations that have some level of understanding include
489Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac
490OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to
491create Unicode filenames, what forms of Unicode are accepted and used
492(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used,
493and so on, varies. Finding the right level of interfacing to Perl
494requires some thought. Remember that an OS does not implicate a
495filesystem.
496
497(The Windows -C command flag "wide API support" has been at least
498temporarily retired in 5.8.1, and the -C has been repurposed, see
499L<perlrun>.)
500
87a942b1 501Most probably the right way to do this would be this:
502L</"Virtualize operating system access">.
503
6d71adcd 504=head2 Unicode in %ENV
505
506Currently the %ENV entries are always byte strings.
87a942b1 507See L</"Virtualize operating system access">.
6d71adcd 508
1f2e7916 509=head2 Unicode and glob()
510
511Currently glob patterns and filenames returned from File::Glob::glob()
87a942b1 512are always byte strings. See L</"Virtualize operating system access">.
1f2e7916 513
dbb0c492 514=head2 Unicode and lc/uc operators
515
516Some built-in operators (C<lc>, C<uc>, etc.) behave differently, based on
517what the internal encoding of their argument is. That should not be the
518case. Maybe add a pragma to switch behaviour.
519
6d71adcd 520=head2 use less 'memory'
521
522Investigate trade offs to switch out perl's choices on memory usage.
523Particularly perl should be able to give memory back.
524
525This task is incremental - even a little bit of work on it will help.
526
527=head2 Re-implement C<:unique> in a way that is actually thread-safe
528
529The old implementation made bad assumptions on several levels. A good 90%
530solution might be just to make C<:unique> work to share the string buffer
531of SvPVs. That way large constant strings can be shared between ithreads,
532such as the configuration information in F<Config>.
533
534=head2 Make tainting consistent
535
536Tainting would be easier to use if it didn't take documented shortcuts and
537allow taint to "leak" everywhere within an expression.
538
539=head2 readpipe(LIST)
540
541system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
542running a shell. readpipe() (the function behind qx//) could be similarly
543extended.
544
545=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
546
547Maybe create a utility that checks after each libperl.a creation that
548none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
549ever creep back to libperl.a.
550
551 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)$/'
552
553Note, of course, that this will only tell whether B<your> platform
554is using those naughty interfaces.
555
556=head2 Audit the code for destruction ordering assumptions
557
558Change 25773 notes
559
560 /* Need to check SvMAGICAL, as during global destruction it may be that
561 AvARYLEN(av) has been freed before av, and hence the SvANY() pointer
562 is now part of the linked list of SV heads, rather than pointing to
563 the original body. */
564 /* FIXME - audit the code for other bugs like this one. */
565
566adding the C<SvMAGICAL> check to
567
568 if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) {
569 MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen);
570
571Go through the core and look for similar assumptions that SVs have particular
572types, as all bets are off during global destruction.
573
749904bf 574=head2 Extend PerlIO and PerlIO::Scalar
575
576PerlIO::Scalar doesn't know how to truncate(). Implementing this
577would require extending the PerlIO vtable.
578
579Similarly the PerlIO vtable doesn't know about formats (write()), or
580about stat(), or chmod()/chown(), utime(), or flock().
581
582(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
583would mean.)
584
585PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
586opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
587readlink().
588
94da6c29 589See also L</"Virtualize operating system access">.
590
3236f110 591=head2 -C on the #! line
592
593It should be possible to make -C work correctly if found on the #! line,
594given that all perl command line options are strict ASCII, and -C changes
595only the interpretation of non-ASCII characters, and not for the script file
596handle. To make it work needs some investigation of the ordering of function
597calls during startup, and (by implication) a bit of tweaking of that order.
598
81622873 599=head2 Propagate const outwards from Perl_moreswitches()
600
601Change 32057 changed the parameter and return value of C<Perl_moreswitches()>
602from <char *> to <const char *>. It should now be possible to propagate
603const-correctness outwards to C<S_parse_body()>, C<Perl_moreswitches()>
604and C<Perl_yylex()>.
605
3236f110 606
0bdfc961 607=head1 Tasks that need a knowledge of the interpreter
3298bd4d 608
0bdfc961 609These tasks would need C knowledge, and knowledge of how the interpreter works,
610or a willingness to learn.
3298bd4d 611
636e63cb 612=head2 state variable initialization in list context
613
614Currently this is illegal:
615
616 state ($a, $b) = foo();
617
618The current Perl 6 design is that C<state ($a) = foo();> and
619C<(state $a) = foo();> have different semantics, which is tricky to implement
620in Perl 5 as currently the produce the same opcode trees. It would be useful
621to clarify that the Perl 6 design is firm, and then implement the necessary
622code in Perl 5. There are comments in C<Perl_newASSIGNOP()> that show the
623code paths taken by various assignment constructions involving state variables.
624
4fedb12c 625=head2 Implement $value ~~ 0 .. $range
626
627It would be nice to extend the syntax of the C<~~> operator to also
628understand numeric (and maybe alphanumeric) ranges.
a393eb28 629
630=head2 A does() built-in
631
632Like ref(), only useful. It would call the C<DOES> method on objects; it
633would also tell whether something can be dereferenced as an
634array/hash/etc., or used as a regexp, etc.
635L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
636
637=head2 Tied filehandles and write() don't mix
638
639There is no method on tied filehandles to allow them to be called back by
640formats.
4fedb12c 641
d10fc472 642=head2 Attach/detach debugger from running program
1626a787 643
cd793d32 644The old perltodo notes "With C<gdb>, you can attach the debugger to a running
645program if you pass the process ID. It would be good to do this with the Perl
0bdfc961 646debugger on a running Perl program, although I'm not sure how it would be
647done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
1626a787 648
a8cb5b9e 649=head2 Optimize away empty destructors
650
651Defining an empty DESTROY method might be useful (notably in
652AUTOLOAD-enabled classes), but it's still a bit expensive to call. That
653could probably be optimized.
654
0bdfc961 655=head2 LVALUE functions for lists
656
657The old perltodo notes that lvalue functions don't work for list or hash
658slices. This would be good to fix.
659
660=head2 LVALUE functions in the debugger
661
662The old perltodo notes that lvalue functions don't work in the debugger. This
663would be good to fix.
664
0bdfc961 665=head2 regexp optimiser optional
666
667The regexp optimiser is not optional. It should configurable to be, to allow
668its performance to be measured, and its bugs to be easily demonstrated.
669
02f21748 670=head2 delete &function
671
672Allow to delete functions. One can already undef them, but they're still
673in the stash.
674
ef36c6a7 675=head2 C</w> regex modifier
676
677That flag would enable to match whole words, and also to interpolate
678arrays as alternations. With it, C</P/w> would be roughly equivalent to:
679
680 do { local $"='|'; /\b(?:P)\b/ }
681
682See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
683for the discussion.
684
0bdfc961 685=head2 optional optimizer
686
687Make the peephole optimizer optional. Currently it performs two tasks as
688it walks the optree - genuine peephole optimisations, and necessary fixups of
689ops. It would be good to find an efficient way to switch out the
690optimisations whilst keeping the fixups.
691
692=head2 You WANT *how* many
693
694Currently contexts are void, scalar and list. split has a special mechanism in
695place to pass in the number of return values wanted. It would be useful to
696have a general mechanism for this, backwards compatible and little speed hit.
697This would allow proposals such as short circuiting sort to be implemented
698as a module on CPAN.
699
700=head2 lexical aliases
701
702Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
703
704=head2 entersub XS vs Perl
705
706At the moment pp_entersub is huge, and has code to deal with entering both
707perl and XS subroutines. Subroutine implementations rarely change between
708perl and XS at run time, so investigate using 2 ops to enter subs (one for
709XS, one for perl) and swap between if a sub is redefined.
2810d901 710
711=head2 Self ties
712
713self ties are currently illegal because they caused too many segfaults. Maybe
714the causes of these could be tracked down and self-ties on all types re-
715instated.
0bdfc961 716
717=head2 Optimize away @_
718
719The old perltodo notes "Look at the "reification" code in C<av.c>".
720
16fc99ce 721=head2 Properly Unicode safe tokeniser and pads.
722
723The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack -
724variable names are stored in stashes as raw bytes, without the utf-8 flag
725set. The pad API only takes a C<char *> pointer, so that's all bytes too. The
726tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from
727source filters. All this could be fixed.
728
f092b1f4 729=head2 The yada yada yada operators
730
731Perl 6's Synopsis 3 says:
732
733I<The ... operator is the "yada, yada, yada" list operator, which is used as
734the body in function prototypes. It complains bitterly (by calling fail)
735if it is ever executed. Variant ??? calls warn, and !!! calls die.>
736
737Those would be nice to add to Perl 5. That could be done without new ops.
738
87a942b1 739=head2 Virtualize operating system access
740
741Implement a set of "vtables" that virtualizes operating system access
742(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
743least these interfaces should take SVs as "name" arguments instead of
744bare char pointers; probably the most flexible and extensible way
e1a3d5d1 745would be for the Perl-facing interfaces to accept HVs. The system
746needs to be per-operating-system and per-file-system
747hookable/filterable, preferably both from XS and Perl level
87a942b1 748(L<perlport/"Files and Filesystems"> is good reading at this point,
749in fact, all of L<perlport> is.)
750
e1a3d5d1 751This has actually already been implemented (but only for Win32),
752take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32
753variants go through a set of "vtables" for operating system access,
754non-Win32 systems currently go straight for the POSIX/UNIX-style
755system/library call. Similar system as for Win32 should be
756implemented for all platforms. The existing Win32 implementation
757probably does not need to survive alongside this proposed new
758implementation, the approaches could be merged.
87a942b1 759
760What would this give us? One often-asked-for feature this would
94da6c29 761enable is using Unicode for filenames, and other "names" like %ENV,
762usernames, hostnames, and so forth.
763(See L<perlunicode/"When Unicode Does Not Happen">.)
764
765But this kind of virtualization would also allow for things like
766virtual filesystems, virtual networks, and "sandboxes" (though as long
767as dynamic loading of random object code is allowed, not very safe
768sandboxes since external code of course know not of Perl's vtables).
769An example of a smaller "sandbox" is that this feature can be used to
770implement per-thread working directories: Win32 already does this.
771
772See also L</"Extend PerlIO and PerlIO::Scalar">.
87a942b1 773
ac6197af 774=head2 Investigate PADTMP hash pessimisation
775
776The peephole optimier converts constants used for hash key lookups to shared
777hash key scalars. Under ithreads, something is undoing this work. See
778See http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html
779
0bdfc961 780=head1 Big projects
781
782Tasks that will get your name mentioned in the description of the "Highlights
87a942b1 783of 5.12"
0bdfc961 784
785=head2 make ithreads more robust
786
4e577f8b 787Generally make ithreads more robust. See also L</iCOW>
0bdfc961 788
789This task is incremental - even a little bit of work on it will help, and
790will be greatly appreciated.
791
6c047da7 792One bit would be to write the missing code in sv.c:Perl_dirp_dup.
793
59c7f7d5 794Fix Perl_sv_dup, et al so that threads can return objects.
795
0bdfc961 796=head2 iCOW
797
798Sarathy and Arthur have a proposal for an improved Copy On Write which
799specifically will be able to COW new ithreads. If this can be implemented
800it would be a good thing.
801
802=head2 (?{...}) closures in regexps
803
804Fix (or rewrite) the implementation of the C</(?{...})/> closures.
805
806=head2 A re-entrant regexp engine
807
808This will allow the use of a regex from inside (?{ }), (??{ }) and
809(?(?{ })|) constructs.
6bda09f9 810
6bda09f9 811=head2 Add class set operations to regexp engine
812
813Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
814
815demerphq has this on his todo list, but right at the bottom.