X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=e92d4742454db18f2dcaeb70171ac91ff80ff5f7;hb=0c2f6559512b2211f892f1a6ae8db4739c5369b4;hp=94c4f9d61f6594ddf805bde6d892caf0c56839e8;hpb=b2ce41205b13ec60dc055bdd1a441b5cf85fbff4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 94c4f9d..e92d474 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -37,7 +37,7 @@ 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. -Requirements: should handle both byte and UTF8 strings. isPRINT() +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. @@ -54,8 +54,8 @@ Possible options, controlled by the flags: - append a "..." to the produced string if the maximum length is exceeded - really fancy: print unicode characters as \N{...} -NOTE: pv_display(), pv_uni_display(), sv_uni_display() are doing -something like the above. +NOTE: pv_display(), pv_uni_display(), sv_uni_display() are already +doing something like the above. =head2 Overloadable regex assertions @@ -87,35 +87,78 @@ C, C. 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). +Mostly implemented (all of 1:1, 1:N, N:1), only the "final sigma" +and locale-specific rules of SpecCase are not implemented. =item * -They have some tricks Perl doesn't yet implement like character -class subtraction. +UTF-8 identifier names should probably be canonicalized: NFC? - http://www.unicode.org/unicode/reports/tr18/ +=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 use Thread for iThreads +=head2 Work out exit/die semantics for threads -Artur Bergman's C module is a start on this, but needs to -be more mature. +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: -=head2 make perl_clone optionally clone ops + use threads wait => 0; -So that pseudoforking, mod_perl, iThreads and nvi will work properly -(but not as efficiently) until the regex engine is fixed to be threadsafe. +Do not wait. -=head2 Work out exit/die semantics for threads + 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 @@ -148,7 +191,7 @@ Reader-writer locks, realtime/asynchronous IO =head2 IPv6 Support -There are non-core modules, such as C, but these will need +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. @@ -161,11 +204,7 @@ Floating point formatting is still causing some weird test failures. 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. + http://oss.software.ibm.com/icu/index.html =head2 Arithmetic on non-Arabic numerals @@ -173,7 +212,7 @@ C<[1234567890]> aren't the only numerals any more. =head2 POSIX Unicode character classes -(C<[=a=]> for equivalance classes, C<[.ch.]> for collation.) +(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) @@ -186,6 +225,22 @@ C and C<[fg]oo> by hand; this could be done automatically. 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 @@ -223,8 +278,8 @@ 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 convertor; the current one duplicates the functionality +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. @@ -287,10 +342,6 @@ 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 pack "(stuff)*" - -That's to say, C would be the same as C - =head2 bitfields in pack =head2 Cross compilation @@ -385,12 +436,6 @@ This is to speed up C already gives us a way of saving compiled regexps, but it should be done automatically. -=head2 Re-entrant functions - -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 Cross-compilation support Bart Schuller reports that using C and a cross-compiler, he @@ -464,10 +509,6 @@ garbage detector into Perl; Alan Burlison has some ideas about this. 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 @@ -517,6 +558,35 @@ 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?) + +=head2 Perform correctly when XSUBs call subroutines that exit via goto(LABEL) and friends + +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. @@ -555,16 +625,6 @@ 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 @@ -602,11 +662,76 @@ modules have tests. 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(). + +=head2 Unicode in Filenames + +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. + +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 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 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 @@ -681,7 +806,7 @@ Benjamin Sugars has done this. Nick Ing-Simmons' C supports an C IO method. -=head2 Byte to/from UTF8 and UTF8 to/from local conversion +=head2 Byte to/from UTF-8 and UTF-8 to/from local conversion C provides this. @@ -691,11 +816,12 @@ Added in 5.7.1 =head2 Mailing list archives -http://lists.perl.org/, http://archive.develooper.com/ +http://lists.perl.org/ , http://archive.develooper.com/ =head2 Bug tracking -Richard Foley has written the bug tracking system at http://bugs.perl.org/ +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 @@ -762,9 +888,11 @@ Damian Conway's text formatting modules seem to be the Way To Go. =head2 Generalised want()/caller()) +Robin Houston's C module does this. + =head2 Named prototypes -These both seem to be delayed until Perl 6. +This seems to be delayed until Perl 6. =head2 Built-in globbing @@ -802,7 +930,7 @@ Use C. =head2 man for perl -See the Perl Power Tools. (http://language.perl.com/ppt/) +See the Perl Power Tools. ( http://language.perl.com/ppt/ ) =head2 my $Package::variable @@ -846,22 +974,8 @@ by SADAHIRO Tomoyuki have been included since 5.8.0. Collation? http://www.unicode.org/unicode/reports/tr10/ Normalization? http://www.unicode.org/unicode/reports/tr15/ -=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 +=head2 pack/unpack tutorial -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(). +Wolfgang Laun finished what Simon Cozens started. =cut