X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=1f252739e7a6013c15f9cf5c7e78ad978f4c76e1;hb=3a89a73cb887422a8ff6ad0a1a2725cc8f177fb7;hp=e92d4742454db18f2dcaeb70171ac91ff80ff5f7;hpb=1e8e823624ada1d9231e47a66cb2b9e3ab42701a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index e92d474..1f25273 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -13,675 +13,75 @@ of archives may be found at: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ -=head1 To do during 5.6.x +=head1 assertions -=head2 Support for I/O disciplines +Clean up and finish support for assertions. See L. -C provides this, but the interface could be a lot more -straightforward. +=head1 iCOW -=head2 Autoload bytes.pm +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. -When the lexer sees, for instance, C, it should -automatically load the C pragma. +=head1 (?{...}) closures in regexps -=head2 Make "\u{XXXX}" et al work +Fix (or rewrite) the implementation of the C closures. -Danger, Will Robinson! Discussing the semantics of C<"\x{F00}">, -C<"\xF00"> and C<"\U{F00}"> on P5P I lead to a long and boring -flamewar. +=head1 A re-entrant regexp engine -=head2 Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags) +This will allow the use of a regex from inside (?{ }), (??{ }) and +(?(?{ })|) constructs. -For displaying PVs with control characters, embedded nulls, and Unicode. -This would be useful for printing warnings, or data and regex dumping, -not_a_number(), and so on. +=head1 pragmata -Requirements: should handle both byte and UTF-8 strings. isPRINT() -characters printed as-is, character less than 256 as \xHH, Unicode -characters as \x{HHH}. Don't assume ASCII-like, either, get somebody -on EBCDIC to test the output. +=head2 lexical pragmas -Possible options, controlled by the flags: -- whitespace (other than ' ' of isPRINT()) printed as-is -- use isPRINT_LC() instead of isPRINT() -- print control characters like this: "\cA" -- print control characters like this: "^A" -- non-PRINTables printed as '.' instead of \xHH -- use \OOO instead of \xHH -- use the C/Perl-metacharacters like \n, \t -- have a maximum length for the produced string (read it from *lenp) -- append a "..." to the produced string if the maximum length is exceeded -- really fancy: print unicode characters as \N{...} +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. -NOTE: pv_display(), pv_uni_display(), sv_uni_display() are already -doing something like the above. +=head2 use less 'memory' -=head2 Overloadable regex assertions +Investigate trade offs to switch out perl's choices on memory usage. +Particularly perl should be able to give memory back. -This may or may not be possible with the current regular expression -engine. The idea is that, for instance, C<\b> needs to be -algorithmically computed if you're dealing with Thai text. Hence, the -B<\b> assertion wants to be overloaded by a function. +=head1 prototypes and functions -=head2 Unicode +=head2 _ prototype character -=over 4 +Study the possibility of adding a new prototype character, C<_>, meaning +"this argument defaults to $_". -=item * +=head2 inlining autoloaded constants -Allow for long form of the General Category Properties, e.g -C<\p{IsOpenPunctuation}>, not just the abbreviated form, e.g. -C<\p{IsPs}>. - -=item * - -Allow for the metaproperties: C, C, -C, C (require the DerivedCoreProperties and -DerviceNormalizationProperties files). - -There are also multiple value properties still unimplemented: -C, C. - -=item * - - Case Mappings? http://www.unicode.org/unicode/reports/tr21/ - -Mostly implemented (all of 1:1, 1:N, N:1), only the "final sigma" -and locale-specific rules of SpecCase are not implemented. - -=item * - -UTF-8 identifier names should probably be canonicalized: NFC? - -=item * - -UTF-8 in package names and sub names? The first is problematic -because of the mapping to pathnames, ditto for the second one if -one does autosplitting, for example. Some of this works already -in 5.8.0, but essentially it is unsupported. Constructs to consider, -at the very least: - - use utf8; - package UnicodePackage; - sub new { bless {}, shift }; - sub UnicodeMethod1 { ... $_[0]->UnicodeMethod2(...) ... } - sub UnicodeMethod2 { ... } # in here caller(0) should contain Unicode - ... - package main; - my $x = UnicodePackage->new; - print ref $x, "\n"; # should be Unicode - $x->UnicodeMethod1(...); - my $y = UnicodeMethod3 UnicodePackage ...; - -In the above all I contain (identifier-worthy) characters -beyond the code point 255, for example 256. Wherever package/class or -subroutine names can be returned needs to be checked for Unicodeness. - -=back - -See L for what's -there and what's missing. Almost all of Levels 2 and 3 is missing, -and as of 5.8.0 not even all of Level 1 is there. -They have some tricks Perl doesn't yet implement, such as character -class subtraction. - - http://www.unicode.org/unicode/reports/tr18/ - -=head2 Work out exit/die semantics for threads - -There are some suggestions to use for example something like this: -default to "(thread exiting first will) wait for the other threads -until up to 60 seconds". Other possibilities: - - use threads wait => 0; - -Do not wait. - - use threads wait_for => 10; - -Wait up to 10 seconds. - - use threads wait_for => -1; - -Wait for ever. - -http://archive.develooper.com/perl5-porters@perl.org/msg79618.html - -=head2 Better support for nonpreemptive threading systems like GNU pth - -To better support nonpreemptive threading systems, perhaps some of the -blocking functions internally in Perl should do a yield() before a -blocking call. (Now certain threads tests ({basic,list,thread.t}) -simply do a yield() before they sleep() to give nonpreemptive thread -implementations a chance). - -In some cases, like the GNU pth, which has replacement functions that -are nonblocking (pth_select instead of select), maybe Perl should be -using them instead when built for threading. - -=head2 Typed lexicals for compiler - -=head2 Compiler workarounds for Win32 - -=head2 AUTOLOADing in the compiler - -=head2 Fixing comppadlist when compiling - -=head2 Cleaning up exported namespace - -=head2 Complete signal handling - -Add C to opcodes which loop; replace C with -C; check C for signal safety. - -=head2 Out-of-source builds - -This was done for 5.6.0, but needs reworking for 5.7.x - -=head2 POSIX realtime support - -POSIX 1003.1 1996 Edition support--realtime stuff: POSIX semaphores, -message queues, shared memory, realtime clocks, timers, signals (the -metaconfig units mostly already exist for these) - -=head2 UNIX98 support - -Reader-writer locks, realtime/asynchronous IO - -=head2 IPv6 Support - -There are non-core modules, such as C, but these will need -integrating when IPv6 actually starts to really happen. See RFC 2292 -and RFC 2553. - -=head2 Long double conversion - -Floating point formatting is still causing some weird test failures. - -=head2 Locales - -Locales and Unicode interact with each other in unpleasant ways. -One possible solution would be to adopt/support ICU: - - http://oss.software.ibm.com/icu/index.html - -=head2 Arithmetic on non-Arabic numerals - -C<[1234567890]> aren't the only numerals any more. - -=head2 POSIX Unicode character classes - -(C<[=a=]> for equivalence classes, C<[.ch.]> for collation.) -These are dependent on Unicode normalization and collation. - -=head2 Factoring out common suffices/prefices in regexps (trie optimization) - -Currently, the user has to optimize C and C into -C and C<[fg]oo> by hand; this could be done automatically. - -=head2 Security audit shipped utilities - -All the code we ship with Perl needs to be sensible about temporary file -handling, locking, input validation, and so on. - -=head2 Sort out the uid-setting mess - -Currently there are several problems with the setting of uids ($<, $> -for the real and effective uids). Firstly, what exactly setuid() call -gets invoked in which platform is simply a big mess that needs to be -untangled. Secondly, the effects are apparently not standard across -platforms, (if you first set $< and then $>, or vice versa, being -uid == euid == zero, or just euid == zero, or as a normal user, what are -the results?). The test suite not (usually) being run as root means -that these things do not get much testing. Thirdly, there's quite -often a third uid called saved uid, and Perl has no knowledge of that -feature in any way. (If one has the saved uid of zero, one can get -back any real and effective uids.) As an example, to change also the -saved uid, one needs to set the real and effective uids B-- in -most systems, that is: in HP-UX that doesn't seem to work. - -=head2 Custom opcodes - -Have a way to introduce user-defined opcodes without the subroutine call -overhead of an XSUB; the user should be able to create PP code. Simon -Cozens has some ideas on this. - -=head2 DLL Versioning - -Windows needs a way to know what version of an XS or C DLL it's -loading. - -=head2 Introduce @( and @) - -C<$(> may return "foo bar baz". Unfortunately, since groups can -theoretically have spaces in their names, this could be one, two or -three groups. - -=head2 Floating point handling - -C and C support is particularly troublesome. -(fp_classify(), fp_class(), fp_class_d(), class(), isinf(), -isfinite(), finite(), isnormal(), unordered(), , - (there are metaconfig units for all these) (I think), -fp_setmask(), fp_getmask(), fp_setround(), fp_getround() -(no metaconfig units yet for these). Don't forget finitel(), fp_classl(), -fp_class_l(), (yes, both do, unfortunately, exist), and unorderedl().) - -As of Perl 5.6.1, there is a Perl macro, Perl_isnan(). - -=head2 IV/UV preservation - -Nicholas Clark has done a lot of work on this, but work is continuing. -C<+>, C<-> and C<*> work, but guards need to be in place for C<%>, C, -C<&>, C, C and C. - -=head2 Replace pod2html with something using Pod::Parser - -The CPAN module C may be a more suitable basis for a -C converter; the current one duplicates the functionality -abstracted in C, which makes updating the POD language -difficult. - -=head2 Automate module testing on CPAN - -When a new Perl is being beta tested, porters have to manually grab -their favourite CPAN modules and test them - this should be done -automatically. - -=head2 sendmsg and recvmsg - -We have all the other BSD socket functions but these. There are -metaconfig units for these functions which can be added. To avoid these -being new opcodes, a solution similar to the way C was added -would be preferable. (Autoload the C module.) - -=head2 Rewrite perlre documentation - -The new-style patterns need full documentation, and the whole document -needs to be a lot clearer. - -=head2 Convert example code to IO::Handle filehandles - -=head2 Document Win32 choices - -=head2 Check new modules - -=head2 Make roffitall find pods and libs itself - -Simon Cozens has done some work on this but it needs a rethink. - -=head1 To do at some point - -These are ideas that have been regularly tossed around, that most -people believe should be done maybe during 5.8.x - -=head2 Remove regular expression recursion - -Because the regular expression engine is recursive, badly designed -expressions can lead to lots of recursion filling up the stack. Ilya -claims that it is easy to convert the engine to being iterative, but -this has still not yet been done. There may be a regular expression -engine hit squad meeting at TPC5. - -=head2 Memory leaks after failed eval - -Perl will leak memory if you C. This is -partially because it attempts to build up an op tree for that code and -doesn't properly free it. The same goes for non-syntactically-correct -regular expressions. Hugo looked into this, but decided it needed a -mark-and-sweep GC implementation. - -Alan notes that: The basic idea was to extend the parser token stack -(C) to include a type field so we knew what sort of thing each -element of the stack was. The F code would then have to be -postprocessed to record the type of each entry on the stack as it was -created, and the parser patched so that it could unroll the stack -properly on error. - -This is possible to do, but would be pretty messy to implement, as it -would rely on even more sed hackery in F. - -=head2 bitfields in pack - -=head2 Cross compilation - -Make Perl buildable with a cross-compiler. This will play havoc with -Configure, which needs to know how the target system will respond to -its tests; maybe C will be a good starting point here. -(Indeed, Bart Schuller reports that he compiled up C for -the Agenda PDA and it works fine.) A really big spanner in the works -is the bootstrapping build process of Perl: if the filesystem the -target systems sees is not the same what the build host sees, various -input, output, and (Perl) library files need to be copied back and forth. - -As of 5.8.0 Configure mostly works for cross-compilation -(used successfully for iPAQ Linux), miniperl gets built, -but then building DynaLoader (and other extensions) fails -since MakeMaker knows nothing of cross-compilation. -(See INSTALL/Cross-compilation for the state of things.) - -=head2 Perl preprocessor / macros - -Source filters help with this, but do not get us all the way. For -instance, it should be possible to implement the C operator somehow; -source filters don't (quite) cut it. - -=head2 Perl lexer in Perl - -Damian Conway is planning to work on this, but it hasn't happened yet. - -=head2 Using POSIX calls internally - -When faced with a BSD vs. SysV -style interface to some library or -system function, perl's roots show in that it typically prefers the BSD -interface (but falls back to the SysV one). One example is getpgrp(). -Other examples include C vs. C. There are others, mostly in -F. - -Mostly, this item is a suggestion for which way to start a journey into -an C<#ifdef> forest. It is not primarily a suggestion to eliminate any of -the C<#ifdef> forests. - -POSIX calls are perhaps more likely to be portable to unexpected -architectures. They are also perhaps more likely to be actively -maintained by a current vendor. They are also perhaps more likely to be -available in thread-safe versions, if appropriate. - -=head2 -i rename file when changed - -It's only necessary to rename a file when inplace editing when the file -has changed. Detecting a change is perhaps the difficult bit. - -=head2 All ARGV input should act like EE - -eg C doesn't currently read across multiple files. - -=head2 Support for rerunning debugger - -There should be a way of restarting the debugger on demand. - -=head2 Test Suite for the Debugger - -The debugger is a complex piece of software and fixing something -here may inadvertently break something else over there. To tame -this chaotic behaviour, a test suite is necessary. - -=head2 my sub foo { } - -The basic principle is sound, but there are problems with the semantics -of self-referential and mutually referential lexical subs: how to -declare the subs? - -=head2 One-pass global destruction - -Sweeping away all the allocated memory in one go is a laudable goal, but -it's difficult and in most cases, it's easier to let the memory get -freed by exiting. - -=head2 Rewrite regexp parser - -There has been talk recently of rewriting the regular expression parser -to produce an optree instead of a chain of opcodes; it's unclear whether -or not this would be a win. - -=head2 Cache recently used regexps - -This is to speed up - - for my $re (@regexps) { - $matched++ if /$re/ - } - -C already gives us a way of saving compiled regexps, but it should -be done automatically. - -=head2 Cross-compilation support - -Bart Schuller reports that using C and a cross-compiler, he -got Perl working on the Agenda PDA. However, one cannot build a full -Perl because Configure needs to get the results for the target platform, -for the host. - -=head2 Bit-shifting bitvectors - -Given: - - vec($v, 1000, 1) = 1; - -One should be able to do - - $v <<= 1; - -and have the 999'th bit set. - -Currently if you try with shift bitvectors you shift the NV/UV, instead -of the bits in the PV. Not very logical. - -=head2 debugger pragma - -The debugger is implemented in Perl in F; turning it into a -pragma should be easy, but making it work lexically might be more -difficult. Fiddling with C<$^P> would be necessary. - -=head2 use less pragma - -Identify areas where speed/memory tradeoffs can be made and have a hint -to switch between them. - -=head2 switch structures - -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 Cache eval tree - -=head2 rcatmaybe - -=head2 Shrink opcode tables - -=head2 Optimize away @_ - -Look at the "reification" code in C - -=head2 Prototypes versus indirect objects - -Currently, indirect object syntax bypasses prototype checks. - -=head2 Install HTML - -HTML versions of the documentation need to be installed by default; a -call to C from C may be all that's necessary. - -=head2 Prototype method calls - -=head2 Return context prototype declarations - -=head2 magic_setisa - -=head2 Garbage collection - -There have been persistent mumblings about putting a mark-and-sweep -garbage detector into Perl; Alan Burlison has some ideas about this. - -=head2 IO tutorial - -Mark-Jason Dominus has the beginnings of one of these. - -=head2 Rewrite perldoc - -There are a few suggestions for what to do with C: maybe a -full-text search, an index function, locating pages on a particular -high-level subject, and so on. - -=head2 Install .3p manpages - -This is a bone of contention; we can create C<.3p> manpages for each -built-in function, but should we install them by default? Tcl does this, -and it clutters up C. - -=head2 Unicode tutorial - -Simon Cozens promises to do this before he gets old. - -=head2 Update POSIX.pm for 1003.1-2 - -=head2 Retargetable installation - -Allow C<@INC> to be changed after Perl is built. - -=head2 POSIX emulation on non-POSIX systems - -Make C behave as POSIXly as possible everywhere, meaning we -have to implement POSIX equivalents for some functions if necessary. - -=head2 Rename Win32 headers +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. =head2 Finish off lvalue functions -They don't work in the debugger, and they don't work for list or hash -slices. - -=head2 Update sprintf documentation - -Hugo van der Sanden plans to look at this. - -=head2 Use fchown/fchmod internally - -This has been done in places, but needs a thorough code review. -Also fchdir is available in some platforms. - -=head2 Make v-strings overloaded objects - -Instead of having to guess whether a string is a v-string and thus -needs to be displayed with %vd, make v-strings (readonly) objects -(class "vstring"?) with a stringify overload. - -=head2 Allow restricted hash assignment - -Currently you're not allowed to assign to a restricted hash at all, -even with the same keys. - - %restricted = (foo => 42); # error - -This should be allowed if the new keyset is a subset of the old -keyset. May require more extra code than we'd like in pp_aassign. - -=head2 Should overload be inheritable? - -Should overload be 'contagious' through @ISA so that derived classes -would inherit their base classes' overload definitions? What to do -in case of overload conflicts? - -=head2 Taint rethink - -Should taint be stopped from affecting control flow, if ($tainted)? -Should tainted symbolic method calls and subref calls be stopped? -(Look at Ruby's $SAFE levels for inspiration?) +The old perltodo notes "They don't work in the debugger, and they don't work for +list or hash slices." -=head2 Perform correctly when XSUBs call subroutines that exit via goto(LABEL) and friends +=head1 Unicode and UTF8 -If an XSUB calls a subroutine that exits using goto(LABEL), -last(LABEL) or next(LABEL), then the interpreter will very probably crash -with a segfault because the execution resumes in the XSUB instead of -never returning there. - -=head1 Vague ideas - -Ideas which have been discussed, and which may or may not happen. - -=head2 ref() in list context - -It's unclear what this should do or how to do it without breaking old -code. - -=head2 Make tr/// return histogram of characters in list context - -There is a patch for this, but it may require Unicodification. - -=head2 Compile to real threaded code - -=head2 Structured types - -=head2 Modifiable $1 et al. - - ($x = "elephant") =~ /e(ph)/; - $1 = "g"; # $x = "elegant" - -What happens if there are multiple (nested?) brackets? What if the -string changes between the match and the assignment? - -=head2 Procedural interfaces for IO::*, etc. - -Some core modules have been accused of being overly-OO. Adding -procedural interfaces could demystify them. - -=head2 RPC modules - -=head2 Attach/detach debugger from running program +=head2 Implicit Latin 1 => Unicode translation -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. +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). -=head2 GUI::Native +=head2 UTF8 caching code -A non-core module that would use "native" GUI to create graphical -applications. - -=head2 foreach(reverse ...) - -Currently - - foreach (reverse @_) { ... } - -puts C<@_> on the stack, reverses it putting the reversed version on the -stack, then iterates forwards. Instead, it could be special-cased to put -C<@_> on the stack then iterate backwards. - -=head2 Constant function cache - -=head2 Approximate regular expression matching - -=head1 Ongoing - -These items B need doing: - -=head2 Update guts documentation - -Simon Cozens tries to do this when possible, and contributions to the -C documentation is welcome. - -=head2 Add more tests - -Michael Schwern will donate $500 to Yet Another Society when all core -modules have tests. - -=head2 Update auxiliary tools - -The code we ship with Perl should look like good Perl 5. - -=head2 Create debugging macros - -Debugging macros (like printsv, dump) can make debugging perl inside a -C debugger much easier. A good set for gdb comes with mod_perl. -Something similar should be distributed with perl. - -The proper way to do this is to use and extend Devel::DebugInit. -Devel::DebugInit also needs to be extended to support threads. - -See p5p archives for late May/early June 2001 for a recent discussion -on this topic. - -=head2 truncate to the people - -One can emulate ftruncate() using F_FREESP and F_CHSIZ fcntls -(see the UNIX FAQ for details). This needs to go somewhere near -pp_sys.c:pp_truncate(). - -One can emulate truncate() easily if one has ftruncate(). -This emulation should also go near pp_sys.pp_truncate(). +The string position/offset cache is not optional. It should be. =head2 Unicode in Filenames @@ -706,276 +106,206 @@ filesystem. temporarily retired in 5.8.1, and the -C has been repurposed, see L.) -=head1 Unicode in %ENV +=head2 Unicode in %ENV Currently the %ENV entries are always byte strings. -=head1 Recently done things - -These are things which have been on the todo lists in previous releases -but have recently been completed. - -=head2 Alternative RE syntax module - -The C module, available from the CPAN, provides this: - - my $re = Regexp::English - -> start_of_line - -> literal('Flippers') - -> literal(':') - -> optional - -> whitespace_char - -> end - -> remember - -> multiple - -> digit; - - /$re/; - -=head2 Safe signal handling - -A new signal model went into 5.7.1 without much fanfare. Operations and -Cs are no longer interrupted by signals, which are handled -between opcodes. This means that C now actually does -something. However, there are still a few things that need to be done. - -=head2 Tie Modules - -Modules which implement arrays in terms of strings, substrings or files -can be found on the CPAN. - -=head2 gettimeofday - -C has been integrated into the core. +=head1 Regexps -=head2 setitimer and getimiter +=head2 regexp optimiser optional -Adding C got us this too. +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 Testing __DIE__ hook +=head1 POD -Tests have been added. +=head2 POD -> HTML conversion still sucks -=head2 CPP equivalent in Perl +Which is crazy given just how simple POD purports to be, and how simple HTML +can be. -A C Yardley will probably have done this by the time you can read this. -This allows for a generalization of the C constant detection used in -building C. +=head1 Misc medium sized projects -=head2 Explicit switch statements +=head2 UNITCHECK -C has been integrated into the core to give you all manner of -C semantics. +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. -=head2 autocroak +=head2 optional optimizer -This is C. +Make the peephole optimizer optional. -=head2 UTF/EBCDIC +=head2 You WANT *how* many -Nick Ing-Simmons has made UTF-EBCDIC (UTR13) work with Perl. +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. - EBCDIC? http://www.unicode.org/unicode/reports/tr16/ +=head2 lexical aliases -=head2 UTF Regexes +Allow lexical aliases (maybe via the syntax C. -Although there are probably some small bugs to be rooted out, Jarkko -Hietaniemi has made regular expressions polymorphic between bytes and -characters. +=head2 no 6 -=head2 perlcc to produce executable +Make C and C work (opposite of C, etc.). -C was recently rewritten, and can now produce standalone -executables. +=head2 IPv6 -=head2 END blocks saved in compiled output +Clean this up. Check everything in core works -=head2 Secure temporary file module +=head2 entersub XS vs Perl -Tim Jenness' C is now in core. +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 Integrate Time::HiRes +=head2 @INC source filter to Filter::Simple -This module is now part of core. +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. -=head2 Turn Cwd into XS +=head2 bincompat functions -Benjamin Sugars has done this. +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? -=head2 Mmap for input - -Nick Ing-Simmons' C supports an C IO method. - -=head2 Byte to/from UTF-8 and UTF-8 to/from local conversion - -C provides this. - -=head2 Add sockatmark support - -Added in 5.7.1 - -=head2 Mailing list archives - -http://lists.perl.org/ , http://archive.develooper.com/ - -=head2 Bug tracking - -Since 5.8.0 perl uses the RT bug tracking system from Jesse Vincent, -implemented by Robert Spier at http://bugs.perl.org/ - -=head2 Integrate MacPerl - -Chris Nandor and Matthias Neeracher have integrated the MacPerl changes -into 5.6.0. - -=head2 Web "nerve center" for Perl - -http://use.perl.org/ is what you're looking for. - -=head2 Regular expression tutorial - -C, provided by Mark Kvale. - -=head2 Debugging Tutorial - -C, written by Richard Foley. - -=head2 Integrate new modules - -Jarkko has been integrating madly into 5.7.x - -=head2 Integrate profiler - -C is now a core module. - -=head2 Y2K error detection - -There's a configure option to detect unsafe concatenation with "19", and -a CPAN module. (C) - -=head2 Regular expression debugger - -While not part of core, Mark-Jason Dominus has written C and has -also come up with a generalised strategy for regular expression -debugging. - -=head2 POD checker - -That's, uh, F - -=head2 "Dynamic" lexicals - -=head2 Cache precompiled modules +=head2 Use fchown/fchmod internally -=head1 Deprecated Wishes +The old perltodo notes "This has been done in places, but needs a thorough +code review. Also fchdir is available in some platforms." -These are items which used to be in the todo file, but have been -deprecated for some reason. +=head2 Constant folding -=head2 Loop control on do{} +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;> -This would break old code; use C instead. +=head1 Tests -=head2 Lexically scoped typeglobs +=head2 Make Schwern poorer -Not needed now we have lexical IO handles. +Tests for everything, At which point Schwern coughs up $500 to TPF. -=head2 format BOTTOM +=head2 test B -=head2 report HANDLE +A test suite for the B module would be nice. -Damian Conway's text formatting modules seem to be the Way To Go. +=head2 common test code for timed bailout -=head2 Generalised want()/caller()) +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. -Robin Houston's C module does this. +=head1 Installation -=head2 Named prototypes +=head2 compressed man pages -This seems to be delayed until Perl 6. +Be able to install them -=head2 Built-in globbing +=head2 Make Config.pm cope with differences between build and installed perl -The C module has been used to replace the C function. +=head2 Relocatable perl -=head2 Regression tests for suidperl +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? -C is deprecated in favour of common sense. +=head2 make HTML install work -=head2 Cached hash values +And look at the splitting of perlfunc in chunks. It needs fixing. -We have shared hash keys, which perform the same job. +=head2 put patchlevel in -v -=head2 Add compression modules +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. -The compression modules are a little heavy; meanwhile, Nick Clark is -working on experimental pragmata to do transparent decompression on -input. +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. -=head2 Reorganise documentation into tutorials/references +=head1 Incremental things -Could not get consensus on P5P about this. +Some tasks that don't need to get done in one big hit. -=head2 Remove distinction between functions and operators +=head2 autovivification -Caution: highly flammable. +Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; -=head2 Make XS easier to use +=head2 fix tainting bugs -Use C instead, or SWIG. +Fix the bugs revealed by running the test suite with the C<-t> switch (via +C). -=head2 Make embedding easier to use +=head2 Make tainting consistent -Use C. +Tainting would be easier to use if it didn't take documented shortcuts and allow +taint to "leak" everywhere within an expression. -=head2 man for perl +=head2 Dual life everything -See the Perl Power Tools. ( http://language.perl.com/ppt/ ) +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. -=head2 my $Package::variable +=head1 Vague things -Use C instead. +Some more nebulous ideas -=head2 "or" tests defined, not truth +=head2 threads -Suggesting this on P5P B cause a boring and interminable flamewar. +Make threads more robust. -=head2 "class"-based lexicals +=head2 POSIX memory footprint -Use flyweight objects, secure hashes or, dare I say it, pseudo-hashes instead. -(Or whatever will replace pseudohashes in 5.10.) +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. -=head2 byteperl +=head2 Optimize away @_ -C covers this. +The old perltodo notes "Look at the "reification" code in C". -=head2 Lazy evaluation / tail recursion removal +=head2 switch ops -C gives first() (a short-circuiting grep); tail recursion -removal is done manually, with C. (However, MJD has -found that C introduces a performance penalty, so maybe -there should be a way to do this after all: C is better.) +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 Make "use utf8" the default +=head2 Attach/detach debugger from running program -Because of backward compatibility this is difficult: scripts could not -contain B (like Latin-1) anymore, even in -string literals or pod. Also would introduce a measurable slowdown of -at least few percentages since all regular expression operations would -be done in full UTF-8. But if you want to try this, add --DUSE_UTF8_SCRIPTS to your compilation flags. +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. -=head2 Unicode collation and normalization +=head2 A decent benchmark -The Unicode::Collate and Unicode::Normalize modules -by SADAHIRO Tomoyuki have been included since 5.8.0. +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. - Collation? http://www.unicode.org/unicode/reports/tr10/ - Normalization? http://www.unicode.org/unicode/reports/tr15/ +=head2 readpipe(LIST) -=head2 pack/unpack tutorial +system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid +running a shell. readpipe() (the function behind qx//) could be similarly +extended. -Wolfgang Laun finished what Simon Cozens started. +=head2 Self ties -=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.