X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=1f252739e7a6013c15f9cf5c7e78ad978f4c76e1;hb=3a89a73cb887422a8ff6ad0a1a2725cc8f177fb7;hp=7836acf677007662d8dcc49e3667311de3665412;hpb=146174a91a192983720a158796dc066226ad0e55;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 7836acf..1f25273 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -4,8 +4,7 @@ perltodo - Perl TO-DO List =head1 DESCRIPTION -This is a list of wishes for Perl. It is maintained by Nathan -Torkington for the Perl porters. Send updates to +This is a list of wishes for Perl. Send updates to I. If you want to work on any of these projects, be sure to check the perl5-porters archives for past ideas, flames, and propaganda. This will save you time and also prevent you @@ -14,906 +13,299 @@ of archives may be found at: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ +=head1 assertions -=head1 Infrastructure +Clean up and finish support for assertions. See L. -=head2 Mailing list archives +=head1 iCOW -Chaim suggests contacting egroup and asking them to archive the other -perl.org mailing lists. Probably not advocacy, but definitely -perl6-porters, etc. +Sarathy and Arthur have a proposal for an improved Copy On Write which +specifically will be able to COW new ithreads. If this can be implemented +it would be a good thing. -=head2 Bug tracking system +=head1 (?{...}) closures in regexps -Richard Foley I is writing one. We looked at -several, like gnats and the Debian system, but at the time we -investigated them, none met our needs. Since then, Jitterbug has -matured, and may be worth reinvestigation. +Fix (or rewrite) the implementation of the C closures. -The system we've developed will eventually be recipient of perlbug -mail. New bugs are entered into a mysql database, and sent on to -perl5-porters with the subject line rewritten to include a "ticket -number" (unique ID for the new bug). If the incoming message already -had a ticket number in the subject line, then the message is logged -against that bug. There is a separate email interface (not forwarding -to p5p) that permits porters to claim, categorize, and close tickets. +=head1 A re-entrant regexp engine -The next desire is a web interface. It is hoped that code can be -reused between the mail and the web interfaces. +This will allow the use of a regex from inside (?{ }), (??{ }) and +(?(?{ })|) constructs. -The current delay in implementation is caused by perl.org lockups. -One suspect is the mail handling system, possibly going into loops. +=head1 pragmata -We're probably going to need a bugmaster, someone who will look at -every new "bug" and kill those that we already know about, those -that are not bugs at all, etc. +=head2 lexical pragmas -=head2 Regression Tests +Reimplement the mechanism of lexical pragmas to be more extensible. Fix +current pragmas that don't work well (or at all) with lexical scopes or in +run-time eval(STRING) (C, C, C for example). MJD has a +preliminary patch that implements this. -The test suite for Perl serves two needs: ensuring features work, and -ensuring old bugs have not been reintroduced. Both need work. +=head2 use less 'memory' -Brent LaVelle (lavelle@metronet.com) has stepped forward to work on -performance tests and improving the size of the test suite. +Investigate trade offs to switch out perl's choices on memory usage. +Particularly perl should be able to give memory back. -=over 4 +=head1 prototypes and functions -=item Coverage +=head2 _ prototype character -Do the tests that come with Perl exercise every line (or every block, -or ...) of the Perl interpreter, and if not then how can we make them -do so? +Study the possibility of adding a new prototype character, C<_>, meaning +"this argument defaults to $_". -=item Regression +=head2 inlining autoloaded constants -No bug fixes should be made without a corresponding testsuite addition. -This needs a dedicated enforcer, as the current pumpking is either too -lazy or too stupid or both and lets enforcement wander all over the -map. :-) +Currently the optimiser can inline constants when expressed as subroutines +with prototype ($) that return a constant. Likewise, many packages wrapping +C libraries export lots of constants as subroutines which are AUTOLOADed on +demand. However, these have no prototypes, so can't be seen as constants by +the optimiser. Some way of cheaply (low syntax, low memory overhead) to the +perl compiler that a name is a constant would be great, so that it knows to +call the AUTOLOAD routine at compile time, and then inline the constant. -=item __DIE__ +=head2 Finish off lvalue functions -Tests that fail need to be of a form that can be readily mailed -to perlbug and diagnosed with minimal back-and-forth's to determine -which test failed, due to what cause, etc. +The old perltodo notes "They don't work in the debugger, and they don't work for +list or hash slices." -=item suidperl +=head1 Unicode and UTF8 -We need regression/sanity tests for suidperl +=head2 Implicit Latin 1 => Unicode translation -=item The 25% slowdown from perl4 to perl5 +Conversions from byte strings to UTF-8 currently map high bit characters +to Unicode without translation (or, depending on how you look at it, by +implicitly assuming that the byte strings are in Latin-1). As perl assumes +the C locale by default, upgrading a string to UTF-8 may change the +meaning of its contents regarding character classes, case mapping, etc. +This should probably emit a warning (at least). -This value may or may not be accurate, but it certainly is -eye-catching. For some things perl5 is faster than perl4, but often -the reliability and extensability have come at a cost of speed. The -benchmark suite that Gisle released earlier has been hailed as both a -fantastic solution and as a source of entirely meaningless figures. -Do we need to test "real applications"? Can you do so? Anyone have -machines to dedicate to the task? Identify the things that have grown -slower, and see if there's a way to make them faster. +=head2 UTF8 caching code -=back +The string position/offset cache is not optional. It should be. -=head1 Configure +=head2 Unicode in Filenames -Andy Dougherty maintain(ed|s) a list of "todo" items for the configure -that comes with Perl. See Porting/pumpkin.pod in the latest -source release. +chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open, +opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen, +system, truncate, unlink, utime, -X. All these could potentially accept +Unicode filenames either as input or output (and in the case of system +and qx Unicode in general, as input or output to/from the shell). +Whether a filesystem - an operating system pair understands Unicode in +filenames varies. -=head2 Install HTML +Known combinations that have some level of understanding include +Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac +OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to +create Unicode filenames, what forms of Unicode are accepted and used +(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used, +and so on, varies. Finding the right level of interfacing to Perl +requires some thought. Remember that an OS does not implicate a +filesystem. -Have "make install" give you the option to install HTML as well. This -would be part of Configure. Andy Wardley (certified Perl studmuffin) -will look into the current problems of HTML installation--is -'installhtml' preventing this from happening cleanly, or is pod2html -the problem? If the latter, Brad Appleton's pod work may fix the -problem for free. +(The Windows -C command flag "wide API support" has been at least +temporarily retired in 5.8.1, and the -C has been repurposed, see +L.) -=head1 Perl Language +=head2 Unicode in %ENV -=head2 our ($var) +Currently the %ENV entries are always byte strings. -Declare global variables (lexically or otherwise). +=head1 Regexps -=head2 64-bit Perl +=head2 regexp optimiser optional -Verify complete 64 bit support so that the value of sysseek, or C<-s>, or -stat(), or tell can fit into a perl number without losing precision. -Work with the perl-64bit mailing list on perl.org. +The regexp optimiser is not optional. It should configurable to be, to allow +its performance to be measured, and its bugs to be easily demonstrated. -=head2 Prototypes +=head1 POD -=over 4 +=head2 POD -> HTML conversion still sucks -=item Named prototypes +Which is crazy given just how simple POD purports to be, and how simple HTML +can be. -Add proper named prototypes that actually work usefully. +=head1 Misc medium sized projects -=item Indirect objects +=head2 UNITCHECK -Fix prototype bug that forgets indirect objects. +Introduce a new special block, UNITCHECK, which is run at the end of a +compilation unit (module, file, eval(STRING) block). This will correspond to +the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the +O.pm/B.pm backend framework depends on it. -=item Method calls +=head2 optional optimizer -Prototypes for method calls. +Make the peephole optimizer optional. -=item Context +=head2 You WANT *how* many -Return context prototype declarations. +Currently contexts are void, scalar and list. split has a special mechanism in +place to pass in the number of return values wanted. It would be useful to +have a general mechanism for this, backwards compatible and little speed hit. +This would allow proposals such as short circuiting sort to be implemented +as a module on CPAN. -=item Scoped subs +=head2 lexical aliases -lexically-scoped subs, e.g. my sub +Allow lexical aliases (maybe via the syntax C. -=back +=head2 no 6 -=head2 Built-in globbing +Make C and C work (opposite of C, etc.). -Currently the C*.cE> syntax calls the c shell. This causes -problems on sites without csh, systems where fork() is expensive, and -setuid environments. Decide between Glob::BSD and File::KGlob, move -it into the core, and make Perl use it for globbing. Ben Holzman and -Tye McQueen have claimed the pumpkin for this. +=head2 IPv6 -=head1 Perl Internals +Clean this up. Check everything in core works -=head2 magic_setisa +=head2 entersub XS vs Perl -C should be made to update %FIELDS [???] +At the moment pp_entersub is huge, and has code to deal with entering both +perl and and XS subroutines. Subroutine implementations rarely change between +perl and XS at run time, so investigate using 2 ops to enter subs (one for +XS, one for perl) and swap between if a sub is redefined. -=head2 Garbage Collection +=head2 @INC source filter to Filter::Simple -There was talk of a mark-and-sweep garbage collector at TPC2, but the -(to users) unpredictable nature of its behaviour put some off. -Sarathy, I believe, did the work. Here's what he has to say: +The second return value from a sub in @INC can be a source filter. This isn't +documented. It should be changed to use Filter::Simple, tested and documented. -Yeah, I hope to implement it someday too. The points that were -raised in TPC2 were all to do with calling DESTROY() methods, but -I think we can accomodate that by extending bless() to stash -extra information for objects so we track their lifetime accurately -for those that want their DESTROY() to be predictable (this will be -a speed hit, naturally, and will therefore be optional, naturally. :) - -[N.B. Don't even ask me about this now! When I have the time to -write a cogent summary, I'll post it.] +=head2 bincompat functions -=head2 Reliable signals +There are lots of functions which are retained for binary compatibility. +Clean these up. Move them to mathom.c, and don't compile for blead? -Sarathy and Dan Sugalski are working on this. Chip posted a patch -earlier, but it was not accepted into 5.005. The issue is tricky, -because it has the potential to greatly slow down the core. +=head2 Use fchown/fchmod internally -There are at least three things to consider: +The old perltodo notes "This has been done in places, but needs a thorough +code review. Also fchdir is available in some platforms." -=over 4 +=head2 Constant folding -=item Alternate runops() for signal despatch +The peephole optimiser should trap errors during constant folding, and give +up on the folding, rather than bailing out at compile time. It is quite +possible that the unfoldable constant is in unreachable code, eg something +akin to C<$a = 0/0 if 0;> -Sarathy and Dan are discussed this on perl5-porters. +=head1 Tests -=item Figure out how to die() in delayed sighandler +=head2 Make Schwern poorer -=item Add tests for Thread::Signal +Tests for everything, At which point Schwern coughs up $500 to TPF. -=item Automatic tests against CPAN +=head2 test B -Is there some way to automatically build all/most of CPAN with -the new Perl and check that the modules there pass all the tests? +A test suite for the B module would be nice. -=back +=head2 common test code for timed bailout -=head2 Interpolated regex performance bugs +Write portable self destruct code for tests to stop them burning CPU in +infinite loops. Needs to avoid using alarm, as some of the tests are testing +alarm/sleep or timers. - while (<>) { - $found = 0; - foreach $pat (@patterns) { - $found++ if /$pat/o; - } - print if $found; - } +=head1 Installation -The qr// syntax added in 5.005 has solved this problem, but -it needs more thorough documentation. +=head2 compressed man pages -=head2 Memory leaks from failed eval/regcomp +Be able to install them -The only known memory leaks in Perl are in failed code or regexp -compilation. Fix this. Hugo Van Der Sanden will attempt this but -won't have tuits until January 1999. +=head2 Make Config.pm cope with differences between build and installed perl -=head2 Make XS easier to use +=head2 Relocatable perl -There was interest in SWIG from porters, but nothing has happened -lately. +Make it possible to create a relocatable perl binary. Will need some collusion +with Config.pm. We could use a syntax of ... for location of current binary? -=head2 Make embedded Perl easier to use +=head2 make HTML install work -This is probably difficult for the same reasons that "XS For Dummies" -will be difficult. +And look at the splitting of perlfunc in chunks. It needs fixing. -=head2 Namespace cleanup +=head2 put patchlevel in -v - CPP-space: restrict CPP symbols exported from headers - header-space: move into CORE/perl/ - API-space: begin list of things that constitute public api - env-space: Configure should use PERL_CONFIG instead of CONFIG etc. +Currently perl from p4/rsync ships with a patchlevel.h file that usually +defines one local patch, of the form "MAINT12345" or "RC1". The output of +perl -v doesn't report that a perl isn't an official release, and this +information can get lost in bugs reports. Because of this, the minor version +isn't bumped up until RC time, to minimise the possibility of versions of perl +escaping that believe themselves to be newer than they actually are. -=head2 MULTIPLICITY +It would be useful to find an elegant way to have the "this is an interim +maintenance release" or "this is a release candidate" in the terse -v output, +and have it so that it's easy for the pumpking to remove this just as the +release tarball is rolled up. This way the version pulled out of rsync would +always say "I'm a development release" and it would be safe to bump the +reported minor version as soon as a release ships, which would aid perl +developers. -Complete work on safe recursive interpreters Cnew()>. -Sarathy says that a reference implementation exists. +=head1 Incremental things -=head2 MacPerl +Some tasks that don't need to get done in one big hit. -Chris Nandor and Matthias Neeracher are working on better integrating -MacPerl into the Perl distribution. +=head2 autovivification -=head1 Documentation +Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; -There's a lot of documentation that comes with Perl. The quantity of -documentation makes it difficult for users to know which section of -which manpage to read in order to solve their problem. Tom -Christiansen has done much of the documentation work in the past. +=head2 fix tainting bugs -=head2 A clear division into tutorial and reference +Fix the bugs revealed by running the test suite with the C<-t> switch (via +C). -Some manpages (e.g., perltoot and perlreftut) clearly set out to -educate the reader about a subject. Other manpages (e.g., perlsub) -are references for which there is no tutorial, or are references with -a slight tutorial bent. If things are either tutorial or reference, -then the reader knows which manpage to read to learn about a subject, -and which manpage to read to learn all about an aspect of that -subject. Part of the solution to this is: +=head2 Make tainting consistent -=head2 Remove the artificial distinction between operators and functions +Tainting would be easier to use if it didn't take documented shortcuts and allow +taint to "leak" everywhere within an expression. -History shows us that users, and often porters, aren't clear on the -operator-function distinction. The present split in reference -material between perlfunc and perlop hinders user navigation. Given -that perlfunc is by far the larger of the two, move operator reference -into perlfunc. +=head2 Dual life everything -=head2 More tutorials +As part of the "dists" plan, anything that doesn't belong in the smallest perl +distribution needs to be dual lifed. Anything else can be too. -More documents of a tutorial nature could help. Here are some -candidates: +=head1 Vague things -=over 4 +Some more nebulous ideas -=item Regular expressions +=head2 threads -Robin Berjon (r.berjon@ltconsulting.net) has volunteered. +Make threads more robust. -=item I/O +=head2 POSIX memory footprint -Mark-Jason Dominus (mjd@plover.com) has an outline for perliotut. +Ilya observed that use POSIX; eats memory like there's no tomorrow, and at +various times worked to cut it down. There is probably still fat to cut out - +for example POSIX passes Exporter some very memory hungry data structures. -=item pack/unpack +=head2 Optimize away @_ -This is badly needed. There has been some discussion on the -subject on perl5-porters. +The old perltodo notes "Look at the "reification" code in C". -=item Debugging +=head2 switch ops -Ronald Kimball (rjk@linguist.dartmouth.edu) has volunteered. +The old perltodo notes "Although we have C in core, Larry points to +the dormant C and C ops in F; using these opcodes would +be much faster." -=head2 Include a search tool +=head2 Attach/detach debugger from running program -perldoc should be able to 'grep' fulltext indices of installed POD -files. This would let people say: +The old perltodo notes "With C, you can attach the debugger to a running +program if you pass the process ID. It would be good to do this with the Perl +debugger on a running Perl program, although I'm not sure how it would be done." +ssh and screen do this with named pipes in tmp. Maybe we can too. - perldoc -find printing numbers with commas +=head2 A decent benchmark -and get back the perlfaq entry on 'commify'. +perlbench seems impervious to any recent changes made to the perl core. It would +be useful to have a reasonable general benchmarking suite that roughly +represented what current perl programs do, and measurably reported whether +tweaks to the core improve, degrade or don't really affect performance, to +guide people attempting to optimise the guts of perl. -This solution, however, requires documentation to contain the keywords -the user is searching for. Even when the users know what they're -looking for, often they can't spell it. +=head2 readpipe(LIST) -=head2 Include a locate tool +system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid +running a shell. readpipe() (the function behind qx//) could be similarly +extended. -perldoc should be able to help people find the manpages on a -particular high-level subject: +=head2 Self ties - perldoc -find web - -would tell them manpages, web pages, and books with material on web -programming. Similarly C, C and so on. - -We need something in the vicinity of: - - % perl -help random stuff - No documentation for perl function `random stuff' found - The following entry in perlfunc.pod matches /random/a: - =item rand EXPR - - =item rand - - Returns a random fractional number greater than or equal to C<0> and less - than the value of EXPR. (EXPR should be positive.) If EXPR is - omitted, the value C<1> is used. Automatically calls C unless - C has already been called. See also C. - - (Note: If your rand function consistently returns numbers that are too - large or too small, then your version of Perl was probably compiled - with the wrong number of RANDBITS.) - The following pod pages seem to have /stuff/a: - perlfunc.pod (7 hits) - perlfaq7.pod (6 hits) - perlmod.pod (4 hits) - perlsyn.pod (3 hits) - perlfaq8.pod (2 hits) - perlipc.pod (2 hits) - perl5004delta.pod (1 hit) - perl5005delta.pod (1 hit) - perlcall.pod (1 hit) - perldelta.pod (1 hit) - perlfaq3.pod (1 hit) - perlfaq5.pod (1 hit) - perlhist.pod (1 hit) - perlref.pod (1 hit) - perltoc.pod (1 hit) - perltrap.pod (1 hit) - Proceed to open perlfunc.pod? [y] n - Do you want to speak perl interactively? [y] n - Should I dial 911? [y] n - Do you need psychiatric help? [y] y - Hi, what bothers you today? - A Python programmer in the next cubby is driving me nuts! - Hmm, thats fixable. Just [rest censored] - -=head2 Separate function manpages by default - -Perl should install 'manpages' for every function/operator into the -3pl or 3p manual section. By default. The splitman program in the -Perl source distribution does the work of turning big perlfunc into -little 3p pages. - -=head2 Users can't find the manpages - -Make C tell users what they need to add to their .login or -.cshrc to set their MANPATH correctly. - -=head2 Install ALL Documentation - -Make the standard documentation kit include the VMS, OS/2, Win32, -Threads, etc information. installperl and pod/Makefile should know -enough to copy README.foo to perlfoo.pod before building everything, -when appropriate. - -=head2 Outstanding issues to be documented - -Tom has a list of 5.005_5* features or changes that require -documentation. - -Create one document that coherently explains the delta between the -last camel release and the current release. perldelta was supposed -to be that, but no longer. The things in perldelta never seemed to -get placed in the right places in the real manpages, either. This -needs work. - -=head2 Adapt www.linuxhq.com for Perl - -This should help glorify documentation and get more people involved in -perl development. - -=head2 Replace man with a perl program - -Can we reimplement man in Perl? Tom has a start. I believe some of -the Linux systems distribute a manalike. Alternatively, build on -perldoc to remove the unfeatures like "is slow" and "has no apropos". - -=head2 Unicode tutorial - -We could use more work on helping people understand Perl's new -Unicode support that Larry has created. - -=head1 Modules - -=head2 Update the POSIX extension to conform with the POSIX 1003.1 Edition 2 - -The current state of the POSIX extension is as of Edition 1, 1991, -whereas the Edition 2 came out in 1996. ISO/IEC 9945:1-1996(E), -ANSI/IEEE Std 1003.1, 1996 Edition. ISBN 1-55937-573-6. The updates -were legion: threads, IPC, and real time extensions. - -=head2 Module versions - -Automate the checking of versions in the standard distribution so -it's easy for a pumpking to check whether CPAN has a newer version -that we should be including? - -=head2 New modules - -Which modules should be added to the standard distribution? This ties -in with the SDK discussed on the perl-sdk list at perl.org. - -=head2 Profiler - -Make the profiler (Devel::DProf) part of the standard release, and -document it well. - -=head2 Tie Modules - -=over 4 - -=item VecArray - -Implement array using vec(). Nathan Torkington has working code to -do this. - -=item SubstrArray - -Implement array using substr() - -=item VirtualArray - -Implement array using a file - -=item ShiftSplice - -Defines shift et al in terms of splice method - -=back - -=head2 Procedural options - -Support procedural interfaces for the common cases of Perl's -gratuitously OOO modules. Tom objects to "use IO::File" reading many -thousands of lines of code. - -=head2 RPC - -Write a module for transparent, portable remote procedure calls. (Not -core). This touches on the CORBA and ILU work. - -=head2 y2k localtime/gmtime - -Write a module, Y2k::Catch, which overloads localtime and gmtime's -returned year value and catches "bad" attempts to use it. - -=head2 Export File::Find variables - -Make File::Find export C<$name> etc manually, at least if asked to. - -=head2 Ioctl - -Finish a proper Ioctl module. - -=head2 Debugger attach/detach - -Permit a user to debug an already-running program. - -=head2 Regular Expression debugger - -Create a visual profiler/debugger tool that stepped you through the -execution of a regular expression point by point. Ilya has a module -to color-code and display regular expression parses and executions. -There's something at http://tkworld.org/ that might be a good start, -it's a Tk/Tcl RE wizard, that builds regexen of many flavours. - -=head2 Alternative RE Syntax - -Make an alternative regular expression syntax that is accessed through -a module. For instance, - - use RE; - $re = start_of_line() - ->literal("1998/10/08") - ->optional( whitespace() ) - ->literal("[") - ->remember( many( or( "-", digit() ) ) ); - - if (/$re/) { - print "time is $1\n"; - } - -Newbies to regular expressions typically only use a subset of the full -language. Perhaps you wouldn't have to implement the full feature set. - -=head2 Bundled modules - -Nicholas Clark (nick@flirble.org) had a patch for storing modules in -zipped format. This needs exploring and concluding. - -=head2 Expect - -Adopt IO::Tty, make it as portable as Don Libes' "expect" (can we link -against expect code?), and perfect a Perl version of expect. IO::Tty -and expect could then be distributed as part of the core distribution, -replacing Comm.pl and other hacks. - -=head2 GUI::Native - -A simple-to-use interface to native graphical abilities would -be welcomed. Oh, Perl's access Tk is nice enough, and reasonably -portable, but it's not particularly as fast as one would like. -Simple access to the mouse's cut buffer or mouse-presses shouldn't -required loading a few terabytes of Tk code. - -=head2 Update semibroken auxiliary tools; h2ph, a2p, etc. - -Kurt Starsinic is working on h2ph. mjd has fixed bugs in a2p in the -past. a2p apparently doesn't work on nawk and gawk extensions. -Graham Barr has an Include module that does h2ph work at runtime. - -=head2 POD Converters - -Brad's PodParser code needs to become part of the core, and the Pod::* -and pod2* programs rewritten to use this standard parser. Currently -the converters take different options, some behave in different -fashions, and some are more picky than others in terms of the POD -files they accept. - -=head2 pod2html - -A short-term fix: pod2html generates absolute HTML links. Make it -generate relative links. - -=head2 Podchecker - -Something like lint for Pod would be good. Something that catches -common errors as well as gross ones. Brad Appleton is putting -together something as part of his PodParser work. - -=head1 Tom's Wishes - -=head2 Webperl - -Design a webperl environment that's as tightly integrated and as -easy-to-use as Perl's current command-line environment. - -=head2 Mobile agents - -More work on a safe and secure execution environment for mobile -agents would be neat; the Safe.pm module is a start, but there's a -still a lot to be done in that area. Adopt Penguin? - -=head2 POSIX on non-POSIX - -Standard programming constructs for non-POSIX systems would help a -lot of programmers stuck on primitive, legacy systems. For example, -Microsoft still hasn't made a usable POSIX interface on their clunky -systems, which means that standard operations such as alarm() and -fork(), both critical for sophisticated client-server programming, -must both be kludged around. - -I'm unsure whether Tom means to emulate alarm( )and fork(), or merely -to provide a document like perlport.pod to say which features are -portable and which are not. - -=head2 Portable installations - -Figure out a portable semi-gelled installation, that is, one without -full paths. Larry has said that he's thinking about this. Ilya -pointed out that perllib_mangle() is good for this. - -=head1 Win32 Stuff - -=head2 Get PERL_OBJECT building under gcc - -B, according to Sarathy. It builds under egcs on win32, -but doesn't run for occult reasons. If anyone knows the right -breed of chicken to sacrifice, please speak up. - -=head2 Rename new headers to be consistent with the rest - -=head2 Sort out the spawnvp() mess - -=head2 Work out DLL versioning - -=head2 Get PERL_OBJECT building on non-win32 - -=head2 Style-check - -=head1 Would be nice to have - -=over 4 - -=item C - -=item Contiguous bitfields in pack/unpack - -=item lexperl - -=item Bundled perl preprocessor - -=item Use posix calls internally where possible - -=item format BOTTOM - -=item -i rename file only when successfully changed - -=item All ARGV input should act like <> - -=item report HANDLE [formats]. - -=item support in perlmain to rerun debugger - -=item lvalue functions - -Tuomas Lukka, on behalf of the PDL project, greatly desires this and -Ilya has a patch for it (probably against an older version of Perl). -Tuomas points out that what PDL really wants is lvalue I, -not just subs. - -=back - -=head1 Possible pragmas - -=head2 'less' - -(use less memory, CPU) - -=head1 Optimizations - -=head2 constant function cache - -=head2 foreach(reverse...) - -=head2 Cache eval tree - -Unless lexical outer scope used (mark in &compiling?). - -=head2 rcatmaybe - -=head2 Shrink opcode tables - -Via multiple implementations selected in peep. - -=head2 Cache hash value - -Not a win, according to Guido. - -=head2 Optimize away @_ where possible - -=head2 Optimize sort by { $a <=> $b } - -Greg Bacon added several more sort optimizations. These have -made it into 5.005_55, thanks to Hans Mulder. - -=head2 Rewrite regexp parser for better integrated optimization - -The regexp parser was rewritten for 5.005. Ilya's the regexp guru. - -=head1 Vague possibilities - -=over 4 - -=item ref function in list context - -This seems impossible to do without substantially breaking code. - -=item make tr/// return histogram in list context? - -=item Loop control on do{} et al - -=item Explicit switch statements - -Nobody has yet managed to come up with a switch syntax that would -allow for mixed hash, constant, regexp checks. Submit implementation -with syntax, please. - -=item compile to real threaded code - -=item structured types - -=item Modifiable $1 et al - -The intent is for this to be a means of editing the matched portions of -the target string. - -=back - -=head1 To Do Or Not To Do - -These are things that have been discussed in the past and roundly -criticized for being of questionable value. - -=head2 Making my() work on "package" variables - -Being able to say my($Foo::Bar), something that sounds ludicrous and -the 5.6 pumpking has mocked. - -=head2 "or" testing defined not truth - -We tell people that C<||> can be used to give a default value to a -variable: - - $children = shift || 5; # default is 5 children - -which is almost (but not): - - $children = shift; - $children = 5 unless $children; - -but if the first argument was given and is "0", then it will be -considered false by C<||> and C<5> used instead. Really we want -an C<||>-like operator that behaves like: - - $children = shift; - $children = 5 unless defined $children; - -Namely, a C<||> that tests defined-ness rather than truth. One was -discussed, and a patch submitted, but the objections were many. While -there were objections, many still feel the need. At least it was -decided that C is the best name for the operator. - -=head2 "dynamic" lexicals - - my $x; - sub foo { - local $x; - } - -Localizing, as Tim Bunce points out, is a separate concept from -whether the variable is global or lexical. Chip Salzenberg had -an implementation once, but Larry thought it had potential to -confuse. - -=head2 "class"-based, rather than package-based "lexicals" - -This is like what the Alias module provides, but the variables would -be lexicals reserved by perl at compile-time, which really are indices -pointing into the pseudo-hash object visible inside every method so -declared. - -=head1 Threading - -=head2 Modules - -Which of the standard modules are thread-safe? Which CPAN modules? -How easy is it to fix those non-safe modules? - -=head2 Testing - -Threading is still experimental. Every reproducible bug identifies -something else for us to fix. Find and submit more of these problems. - -=head2 $AUTOLOAD - -=head2 exit/die - -Consistent semantics for exit/die in threads. - -=head2 External threads - -Better support for externally created threads. - -=head2 Thread::Pool - -=head2 thread-safety - -Spot-check globals like statcache and global GVs for thread-safety. -"B", says Sarathy. - -=head2 Per-thread GVs - -According to Sarathy, this would make @_ be the same in threaded -and non-threaded, as well as helping solve problems like filehandles -(the same filehandle currently cannot be used in two threads). - -=head1 Compiler - -=head2 Optimization - -The compiler's back-end code-generators for creating bytecode or -compilable C code could use optimization work. - -=head2 Byteperl - -Figure out how and where byteperl will be built for the various -platforms. - -=head2 Precompiled modules - -Save byte-compiled modules on disk. - -=head2 Executables - -Auto-produce executable. - -=head2 Typed lexicals - -Typed lexicals should affect B::CC::load_pad. - -=head2 Win32 - -Workarounds to help Win32 dynamic loading. - -=head2 END blocks - -END blocks need saving in compiled output, now that STOP blocks -are available. - -=head2 _AUTOLOAD - -_AUTOLOAD prodding. - -=head2 comppadlist - -Fix comppadlist (names in comppad_name can have fake SvCUR -from where newASSIGNOP steals the field). - -=head2 Cached compilation - -Can we install modules as bytecode? - -=head1 Recently Finished Tasks - -=head2 Figure a way out of $^(capital letter) - -Figure out a clean way to extend $^(capital letter) beyond -the 26 alphabets. (${^WORD} maybe?) - -Mark-Jason Dominus sent a patch which went into 5.005_56. - -=head2 Filenames - -Make filenames in the distribution and in the standard module set -be 8.3 friendly where feasible. Good luck changing the standard -modules, though. B. - -=head2 Proper tied array support - -This was B in 5.005 by Nick Ing-Simmons. - -=head2 Foreign lines - -Perl should be more generous in accepting foreign line terminations. -Mostly B in 5.005. - -=head2 Namespace cleanup - - symbol-space: "pl_" prefix for all global vars - "Perl_" prefix for all functions - - CPP-space: stop malloc()/free() pollution unless asked - -=head2 Explain tool - -Given a piece of Perl code, say what it does. B::Deparse is doing -this. B. - -=head2 ISA.pm - -Rename and alter ISA.pm. B. It is now base.pm. - -=head2 Automate maintenance of most PERL_OBJECT code - -B, says Sarathy. - -=head2 -iprefix. - -Added in 5.004_70. B - -=head2 gettimeofday - -See Time::HiRes. - -=head2 reference to compiled regexp - -B This is the qr// support in 5.005. - -=head2 eval qw() at compile time - -qw() is presently compiled as a call to split. This means the split -happens at runtime. Change this so qw() is compiled as a real list -assignment. This also avoids surprises like: - - $a = () = qw(What will $a hold?); - -B. Tom Hughes submitted a patch that went into 5.005_55. - -=head2 autocroak? - -B. This is the Fatal.pm module, so any builtin that that does -not return success automatically die()s. If you're feeling brave, tie -this in with the unified exceptions scheme. - -=head2 Status variable - -$^C to track compiler/checker status. B in 5.005_54. - -=cut +self ties are currently illegal because they caused too many segfaults. Maybe +the causes of these could be tracked down and self-ties on all types re- +instated.