X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=53158e7848e2ef7a3453dba9c2808eeadfe15047;hb=e99d581a4aaa3c92d0b0dda6799157fe7a569f31;hp=bd454333c49eb2ce2b7e1707f18b7b661cdcef91;hpb=18a16cc57227b924e697696433dd9183b2f690e1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index bd45433..53158e7 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -30,15 +30,6 @@ some variation on the big block of C<$Is_Foo> checks. We can safely put this into a file, change it to build an C<%Is> hash and require it. Maybe just put it into F. Throw in the handy tainting subroutines. -=head2 merge common code in installperl and installman - -There are some common subroutines and a common C block in F -and F. These should probably be merged. It would also be good to -check for duplication in all the utility scripts supplied in the source -tarball. It might be good to move them all to a subdirectory, but this would -require careful checking to find all places that call them, and change those -correctly. - =head2 common test code for timed bail out Write portable self destruct code for tests to stop them burning CPU in @@ -157,6 +148,15 @@ do so. Test it with older perl releases, and fix the problems you find. To make a minimal perl distribution, it's useful to look at F. +=head2 Bundle dual life modules in ext/ + +For maintenance (and branch merging) reasons, it would be useful to move +some architecture-independent dual-life modules from lib/ to ext/, if this +has no negative impact on the build of perl itself. + +However, we need to make sure that they are still installed in +architecture-independent directories by C. + =head2 Improving C Investigate whether C could share aggregates properly with @@ -199,6 +199,13 @@ in force at the __END__ block to be in force within each autoloaded subroutine. There's a similar problem with SelfLoader. +=head2 profile installman + +The F script is slow. All it is doing text processing, which we're +told is something Perl is good at. So it would be nice to know what it is doing +that is taking so much CPU, and where possible address it. + + =head1 Tasks that need a little sysadmin-type knowledge Or if you prefer, tasks that you would learn from, and broaden your skills @@ -437,6 +444,8 @@ as part of exercising your skills with coverage and profiling tools you might want to determine what ops I are the most commonly used. And in turn suggest evictions and promotions to achieve a better F. +One piece of Perl code that might make a good testbed is F. + =head2 Allocate OPs from arenas Currently all new OP structures are individually malloc()ed and free()d. @@ -542,6 +551,81 @@ These tasks would need C knowledge, and roughly the level of knowledge of the perl API that comes from writing modules that use XS to interface to C. +=head2 safely supporting POSIX SA_SIGINFO + +Some years ago Jarkko supplied patches to provide support for the POSIX +SA_SIGINFO feature in Perl, passing the extra data to the Perl signal handler. + +Unfortunately, it only works with "unsafe" signals, because under safe +signals, by the time Perl gets to run the signal handler, the extra +information has been lost. Moreover, it's not easy to store it somewhere, +as you can't call mutexs, or do anything else fancy, from inside a signal +handler. + +So it strikes me that we could provide safe SA_SIGINFO support + +=over 4 + +=item 1 + +Provide global variables for two file descriptors + +=item 2 + +When the first request is made via C for C, create a +pipe, store the reader in one, the writer in the other + +=item 3 + +In the "safe" signal handler (C/C), if +the C pointer non-C, and the writer file handle is open, + +=over 8 + +=item 1 + +serialise signal number, C (or at least the parts we care +about) into a small auto char buff + +=item 2 + +C that (non-blocking) to the writer fd + +=over 12 + +=item 1 + +if it writes 100%, flag the signal in a counter of "signals on the pipe" akin +to the current per-signal-number counts + +=item 2 + +if it writes 0%, assume the pipe is full. Flag the data as lost? + +=item 3 + +if it writes partially, croak a panic, as your OS is broken. + +=back + +=back + +=item 4 + +in the regular C processing, if there are "signals on +the pipe", read the data out, deserialise, build the Perl structures on +the stack (code in C, the "unsafe" handler), and call as +usual. + +=back + +I think that this gets us decent C support, without the current risk +of running Perl code inside the signal handler context. (With all the dangers +of things like C corruption that that currently offers us) + +For more information see the thread starting with this message: +http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html + =head2 autovivification Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; @@ -829,16 +913,6 @@ reinstated. The old perltodo notes "Look at the "reification" code in C". -=head2 The yada yada yada operators - -Perl 6's Synopsis 3 says: - -I - -Those would be nice to add to Perl 5. That could be done without new ops. - =head2 Virtualize operating system access Implement a set of "vtables" that virtualizes operating system access