Don't show code closing STD{IN,OUT} before reopening, because
[p5sagit/p5-mst-13.2.git] / pod / perltodo.pod
index 94c4f9d..e92d474 100644 (file)
@@ -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<Numeric Type>, C<East Asian Width>.
 
     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<UnicodeXxx> 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<perlunicode/UNICODE REGULAR EXPRESSION SUPPORT LEVEL> 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<iThreads> 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<Net::IPv6>, but these will need
+There are non-core modules, such as C<Socket6>, 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<f(?:oo|ar)> 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<twice>-- 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<oct>, C<hex> and C<pack>.
 
 =head2 Replace pod2html with something using Pod::Parser
 
-The CPAN module C<Malik::Pod::Html> may be a more suitable basis for a
-C<pod2html> convertor; the current one duplicates the functionality
+The CPAN module C<Marek::Pod::Html> may be a more suitable basis for a
+C<pod2html> converter; the current one duplicates the functionality
 abstracted in C<Pod::Parser>, 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<perly.fixer>.
 
-=head2 pack "(stuff)*"
-
-That's to say, C<pack "(sI)40"> would be the same as C<pack "sI"x40>
-
 =head2 bitfields in pack
 
 =head2 Cross compilation
@@ -385,12 +436,6 @@ This is to speed up
 C<qr//> 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<microperl> 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<perldoc>: 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<gdb>, 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<perlrun>.)
+
+=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<Regexp::English> 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<perlio> supports an C<mmap> 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<Encode> 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<Want> 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<Inline::CPR>.
 
 =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