X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=1f252739e7a6013c15f9cf5c7e78ad978f4c76e1;hb=9137345a080bfc646c2f9440cdb7bd90b8b37428;hp=1f57c0c1eacd42e8b9c78257e756140afb9233ac;hpb=f34dec15bb9e49ae0039c78141053106a14a4caf;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 1f57c0c..1f25273 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -13,852 +13,299 @@ 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 UTF8 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. -=head2 Overloadable regex assertions +=head2 use less 'memory' -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. +Investigate trade offs to switch out perl's choices on memory usage. +Particularly perl should be able to give memory back. -=head2 Unicode +=head1 prototypes and functions -=over 4 +=head2 _ prototype character -=item * +Study the possibility of adding a new prototype character, C<_>, meaning +"this argument defaults to $_". -Allow for long form of the General Category Properties, e.g -C<\p{IsOpenPunctuation}>, not just the abbreviated form, e.g. -C<\p{IsPs}>. +=head2 inlining autoloaded constants -=item * +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. -Allow for the metaproperties C and C, and C; -C, C, C, C (note that -are large classes than the general categories C and C), -C, C, C, C, -C, , C, C, -C, C, C, C. - -There are also enumerated properties: C, -C, C, C. These -properties have multiple values: for uniqueness the property -value should be appended. For example, C<\p{IsAlphabetic}> -wouldbe the binary property, while C<\p{AlphabeticLineBreak}> -would mean the enumerated property. - -=item * - - Case Mappings? http://www.unicode.org/unicode/reports/tr21/ - -lc(), uc(), lcfirst(), and ucfirst() work only for some of the -simplest cases, where the mapping goes from a single Unicode character -to another single Unicode character. See lib/unicore/SpecCase.txt -(and CaseFold.txt). - -=item * - -They have some tricks Perl doesn't yet implement like character -class subtraction. - - http://www.unicode.org/unicode/reports/tr18/ - -=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. - -=head2 use Thread for iThreads - -Artur Bergman's C module is a start on this, but needs to -be more mature. - -=head2 make perl_clone optionally clone ops - -So that pseudoforking, mod_perl, iThreads and nvi will work properly -(but not as efficiently) until the regex engine is fixed to be threadsafe. - -=head2 Work out exit/die semantics for threads - -=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/developerworks/opensource/icu/project/ - -=head2 Thread-safe regexes - -The regular expression engine is currently non-threadsafe. - -=head2 Arithmetic on non-Arabic numerals - -C<[1234567890]> aren't the only numerals any more. - -=head2 POSIX Unicode character classes - -([=a=] for equivalance classes, [.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 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 spawnvp() on Win32 - -Win32 has problems spawning processes, particularly when the arguments -to the child process contain spaces, quotes or tab characters. - -=head2 DLL Versioning - -Windows needs a way to know what version of a 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 is a Perl macro, Perl_isnan(). +=head2 Finish off lvalue functions -=head2 IV/UV preservation +The old perltodo notes "They don't work in the debugger, and they don't work for +list or hash slices." -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. +=head1 Unicode and UTF8 -=head2 Replace pod2html with something using Pod::Parser +=head2 Implicit Latin 1 => Unicode translation -The CPAN module C may be a more suitable basis for a -C convertor; the current one duplicates the functionality -abstracted in C, which makes updating the POD language -difficult. +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 Automate module testing on CPAN +=head2 UTF8 caching code -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. +The string position/offset cache is not optional. It should be. -=head2 sendmsg and recvmsg +=head2 Unicode in Filenames -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.) +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 Rewrite perlre documentation +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. -The new-style patterns need full documentation, and the whole document -needs to be a lot clearer. +(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.) -=head2 Convert example code to IO::Handle filehandles +=head2 Unicode in %ENV -=head2 Document Win32 choices +Currently the %ENV entries are always byte strings. -=head2 Check new modules +=head1 Regexps -=head2 Make roffitall find pods and libs itself +=head2 regexp optimiser optional -Simon Cozens has done some work on this but it needs a rethink. +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. -=head1 To do at some point +=head1 POD -These are ideas that have been regularly tossed around, that most -people believe should be done maybe during 5.8.x +=head2 POD -> HTML conversion still sucks -=head2 Remove regular expression recursion +Which is crazy given just how simple POD purports to be, and how simple HTML +can be. -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. +=head1 Misc medium sized projects -=head2 Memory leaks after failed eval +=head2 UNITCHECK -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. +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. -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. +=head2 optional optimizer -This is possible to do, but would be pretty messy to implement, as it -would rely on even more sed hackery in F. +Make the peephole optimizer optional. -=head2 pack "(stuff)*" +=head2 You WANT *how* many -That's to say, C would be the same as C +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. -=head2 bitfields in pack +=head2 lexical aliases -=head2 Cross compilation +Allow lexical aliases (maybe via the syntax C. -Make Perl buildable with a cross-compiler. This will play havoc with -Configure, which needs to how 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. +=head2 no 6 -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.) +Make C and C work (opposite of C, etc.). -=head2 Perl preprocessor / macros +=head2 IPv6 -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. +Clean this up. Check everything in core works -=head2 Perl lexer in Perl +=head2 entersub XS vs Perl -Damian Conway is planning to work on this, but it hasn't happened yet. +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 Using POSIX calls internally +=head2 @INC source filter to Filter::Simple -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<. +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. -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. +=head2 bincompat functions -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. +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 -i rename file when changed +=head2 Use fchown/fchmod internally -It's only necessary to rename a file when inplace editing when the file -has changed. Detecting a change is perhaps the difficult bit. +The old perltodo notes "This has been done in places, but needs a thorough +code review. Also fchdir is available in some platforms." -=head2 All ARGV input should act like EE +=head2 Constant folding -eg C doesn't currently read across multiple files. +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;> -=head2 Support for rerunning debugger +=head1 Tests -There should be a way of restarting the debugger on demand. +=head2 Make Schwern poorer -=head2 Test Suite for the Debugger +Tests for everything, At which point Schwern coughs up $500 to TPF. -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 test B -=head2 my sub foo { } +A test suite for the B module would be nice. -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 common test code for timed bailout -=head2 One-pass global destruction +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. -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. +=head1 Installation -=head2 Rewrite regexp parser +=head2 compressed man pages -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. +Be able to install them -=head2 Cache recently used regexps +=head2 Make Config.pm cope with differences between build and installed perl -This is to speed up +=head2 Relocatable perl - for my $re (@regexps) { - $matched++ if /$re/ - } +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 already gives us a way of saving compiled regexps, but it should -be done automatically. +=head2 make HTML install work -=head2 Re-entrant functions +And look at the splitting of perlfunc in chunks. It needs fixing. -Add configure probes for C<_r> forms of system calls and fit them to the -core. Unfortunately, calling conventions for these functions and not -standardised. +=head2 put patchlevel in -v -=head2 Cross-compilation support +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. -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. +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 Bit-shifting bitvectors +=head1 Incremental things -Given: +Some tasks that don't need to get done in one big hit. - vec($v, 1000, 1) = 1; +=head2 autovivification -One should be able to do +Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; - $v <<= 1; +=head2 fix tainting bugs -and have the 999'th bit set. +Fix the bugs revealed by running the test suite with the C<-t> switch (via +C). -Currently if you try with shift bitvectors you shift the NV/UV, instead -of the bits in the PV. Not very logical. +=head2 Make tainting consistent -=head2 debugger pragma +Tainting would be easier to use if it didn't take documented shortcuts and allow +taint to "leak" everywhere within an expression. -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 Dual life everything -=head2 use less pragma +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. -Identify areas where speed/memory tradeoffs can be made and have a hint -to switch between them. +=head1 Vague things -=head2 switch structures +Some more nebulous ideas -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 threads -=head2 Cache eval tree +Make threads more robust. -=head2 rcatmaybe +=head2 POSIX memory footprint -=head2 Shrink opcode tables +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 Optimize away @_ -Look at the "reification" code in C +The old perltodo notes "Look at the "reification" code in C". -=head2 Prototypes versus indirect objects +=head2 switch ops -Currently, indirect object syntax bypasses prototype checks. - -=head2 Install HMTL - -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 pack/unpack tutorial - -Simon Cozens 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 - -=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. - -=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 +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 Attach/detach debugger from running program -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. - -=head2 Alternative RE syntax module - - use Regex::Newbie; - $re = Regex::Newbie->new - ->start - ->match("foo") - ->repeat(Regex::Newbie->class("char"),3) - ->end; - /$re/; - -=head2 GUI::Native - -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. - -=head1 Recently done things - -These are things which have been on the todo lists in previous releases -but have recently been completed. - -=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. - -=head2 setitimer and getimiter - -Adding C got us this too. - -=head2 Testing __DIE__ hook - -Tests have been added. - -=head2 CPP equivalent in Perl - -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. - -=head2 Explicit switch statements - -C has been integrated into the core to give you all manner of -C semantics. - -=head2 autocroak - -This is C. - -=head2 UTF/EBCDIC - -Nick Ing-Simmons has made UTF-EBCDIC (UTR13) work with Perl. - - EBCDIC? http://www.unicode.org/unicode/reports/tr16/ - -=head2 UTF Regexes - -Although there are probably some small bugs to be rooted out, Jarkko -Hietaniemi has made regular expressions polymorphic between bytes and -characters. - -=head2 perlcc to produce executable - -C was recently rewritten, and can now produce standalone -executables. - -=head2 END blocks saved in compiled output - -=head2 Secure temporary file module - -Tim Jenness' C is now in core. - -=head2 Integrate Time::HiRes - -This module is now part of core. - -=head2 Turn Cwd into XS - -Benjamin Sugars has done this. - -=head2 Mmap for input - -Nick Ing-Simmons' C supports an C IO method. - -=head2 Byte to/from UTF8 and UTF8 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 - -Richard Foley has written the bug tracking system 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 - -=head1 Deprecated Wishes - -These are items which used to be in the todo file, but have been -deprecated for some reason. - -=head2 Loop control on do{} - -This would break old code; use C instead. - -=head2 Lexically scoped typeglobs - -Not needed now we have lexical IO handles. - -=head2 format BOTTOM - -=head2 report HANDLE - -Damian Conway's text formatting modules seem to be the Way To Go. - -=head2 Generalised want()/caller()) - -=head2 Named prototypes - -These both seem to be delayed until Perl 6. - -=head2 Built-in globbing - -The C module has been used to replace the C function. - -=head2 Regression tests for suidperl - -C is deprecated in favour of common sense. - -=head2 Cached hash values - -We have shared hash keys, which perform the same job. - -=head2 Add compression modules - -The compression modules are a little heavy; meanwhile, Nick Clark is -working on experimental pragmata to do transparent decompression on -input. - -=head2 Reorganise documentation into tutorials/references - -Could not get consensus on P5P about this. - -=head2 Remove distinction between functions and operators - -Caution: highly flammable. - -=head2 Make XS easier to use - -Use C instead, or SWIG. - -=head2 Make embedding easier to use - -Use C. - -=head2 man for perl - -See the Perl Power Tools. (http://language.perl.com/ppt/) - -=head2 my $Package::variable - -Use C instead. - -=head2 "or" tests defined, not truth - -Suggesting this on P5P B cause a boring and interminable flamewar. - -=head2 "class"-based lexicals - -Use flyweight objects, secure hashes or, dare I say it, pseudo-hashes instead. -(Or whatever will replace pseudohashes in 5.10.) - -=head2 byteperl - -C covers this. - -=head2 Lazy evaluation / tail recursion removal - -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.) - -=head2 Make "use utf8" the default - -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. - -=head2 Unicode collation and normalization - -The Unicode::Collate and Unicode::Normalize modules -by SADAHIRO Tomoyuki have been included since 5.8.0. +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. - Collation? http://www.unicode.org/unicode/reports/tr10/ - Normalization? http://www.unicode.org/unicode/reports/tr15/ +=head2 A decent benchmark -=head2 Create debugging macros +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. -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. +=head2 readpipe(LIST) -The proper way to do this is to use and extend Devel::DebugInit. -Devel::DebugInit also needs to be extended to support threads. +system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid +running a shell. readpipe() (the function behind qx//) could be similarly +extended. -See p5p archives for late May/early June 2001 for a recent discussion -on this topic. +=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.