This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
doc nits
[perl5.git] / pod / perltodo.pod
index a8bfbab..e92d474 100644 (file)
@@ -20,15 +20,7 @@ of archives may be found at:
 C<perlio> provides this, but the interface could be a lot more
 straightforward.
 
-=head2 Eliminate need for "use utf8";
-
-While the C<utf8> pragma is autoloaded when necessary, it's still needed
-for things like Unicode characters in a source file. The UTF8 hint can
-always be set to true, but it needs to be set to false when F<utf8.pm>
-is being compiled. (To stop Perl trying to autoload the C<utf8>
-pragma...)
-
-=head2 Autoload byte.pm
+=head2 Autoload bytes.pm
 
 When the lexer sees, for instance, C<bytes::length>, it should
 automatically load the C<bytes> pragma.
@@ -39,6 +31,32 @@ Danger, Will Robinson! Discussing the semantics of C<"\x{F00}">,
 C<"\xF00"> and C<"\U{F00}"> on P5P I<will> lead to a long and boring
 flamewar.
 
+=head2 Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags)
+
+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 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.
+
+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{...}
+
+NOTE: pv_display(), pv_uni_display(), sv_uni_display() are already
+doing something like the above.
+
 =head2 Overloadable regex assertions
 
 This may or may not be possible with the current regular expression
@@ -46,30 +64,102 @@ 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.
 
-=head2 Unicode collation and normalization
+=head2 Unicode
 
-Simon Cozens promises to work on this.
+=over 4
 
-    Collation?     http://www.unicode.org/unicode/reports/tr10/
-    Normalization? http://www.unicode.org/unicode/reports/tr15/
+=item *
+
+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 *
 
-=head2 Unicode case mappings 
+Allow for the metaproperties: C<XID Start>, C<XID Continue>,
+C<NF*_NO>, C<NF*_MAYBE> (require the DerivedCoreProperties and
+DerviceNormalizationProperties files).
+
+There are also multiple value properties still unimplemented:
+C<Numeric Type>, C<East Asian Width>.
+
+=item *
 
     Case Mappings? http://www.unicode.org/unicode/reports/tr21/
 
-=head2 Unicode regular expression character classes
+Mostly implemented (all of 1:1, 1:N, N:1), only the "final sigma"
+and locale-specific rules of SpecCase are not implemented.
 
-They have some tricks Perl doesn't yet implement.
+=item *
 
-       http://www.unicode.org/unicode/reports/tr18/
+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 ...;
 
-=head2 use Thread for iThreads
+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.
 
-Artur Bergman's C<iThreads> module is a start on this, but needs to
-be more mature.
+=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 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
@@ -101,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.
 
@@ -114,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
 
@@ -126,7 +212,7 @@ C<[1234567890]> aren't the only numerals any more.
 
 =head2 POSIX Unicode character classes
 
-([=a=] for equivalance classes, [.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)
@@ -139,20 +225,31 @@ 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
 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<libperl> DLL it's
+Windows needs a way to know what version of an XS or C<libperl> DLL it's
 loading.
 
 =head2 Introduce @( and @)
@@ -171,7 +268,7 @@ 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().
+As of Perl 5.6.1, there is a Perl macro, Perl_isnan().
 
 =head2 IV/UV preservation
 
@@ -181,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.
 
@@ -237,7 +334,7 @@ mark-and-sweep GC implementation.
 
 Alan notes that: The basic idea was to extend the parser token stack
 (C<YYSTYPE>) to include a type field so we knew what sort of thing each
-element of the stack was.  The F<<perly.c> code would then have to be
+element of the stack was.  The F<perly.c> 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.
@@ -245,16 +342,12 @@ 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
 
 Make Perl buildable with a cross-compiler. This will play havoc with
-Configure, which needs to how how the target system will respond to
+Configure, which needs to know how the target system will respond to
 its tests; maybe C<microperl> will be a good starting point here.
 (Indeed, Bart Schuller reports that he compiled up C<microperl> for
 the Agenda PDA and it works fine.)  A really big spanner in the works
@@ -262,6 +355,12 @@ 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
@@ -274,11 +373,11 @@ 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
+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<memcpy> vs. C<bcopy>.  There are others, mostly in
-F<<pp_sys.c>.
+F<pp_sys.c>.
 
 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
@@ -296,10 +395,18 @@ has changed. Detecting a change is perhaps the difficult bit.
 
 =head2 All ARGV input should act like E<lt>E<gt>
 
+eg C<read(ARGV, ...)> 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
@@ -329,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
@@ -388,7 +489,7 @@ Look at the "reification" code in C<av.c>
 
 Currently, indirect object syntax bypasses prototype checks.
 
-=head2 Install HMTL
+=head2 Install HTML
 
 HTML versions of the documentation need to be installed by default; a
 call to C<installhtml> from C<installperl> may be all that's necessary.
@@ -408,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
@@ -455,6 +552,41 @@ Hugo van der Sanden plans to look at this.
 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?)
+
+=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.
@@ -464,7 +596,7 @@ Ideas which have been discussed, and which may or may not happen.
 It's unclear what this should do or how to do it without breaking old
 code.
 
-=head2 Make tr/// return histogram
+=head2 Make tr/// return histogram of characters in list context
 
 There is a patch for this, but it may require Unicodification.
 
@@ -493,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
@@ -540,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
@@ -559,11 +746,11 @@ can be found on the CPAN.
 
 =head2 gettimeofday
 
-C<Time::Hires> has been integrated into the core.
+C<Time::HiRes> has been integrated into the core.
 
 =head2 setitimer and getimiter
 
-Adding C<Time::Hires> got us this too.
+Adding C<Time::HiRes> got us this too.
 
 =head2 Testing __DIE__ hook
 
@@ -619,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.
 
@@ -629,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
 
@@ -700,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
 
@@ -740,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
 
@@ -753,6 +943,7 @@ Suggesting this on P5P B<will> 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
 
@@ -760,8 +951,31 @@ C<ByteLoader> covers this.
 
 =head2 Lazy evaluation / tail recursion removal
 
-C<List::Util> in core gives some of these; tail recursion removal is
-done manually, with C<goto &whoami;>. (However, MJD has found that
-C<goto &whoami> introduces a performance penalty, so maybe there should
-be a way to do this after all: C<sub foo {START: ... goto START;> is
-better.)
+C<List::Util> gives first() (a short-circuiting grep); tail recursion
+removal is done manually, with C<goto &whoami;>. (However, MJD has
+found that C<goto &whoami> introduces a performance penalty, so maybe
+there should be a way to do this after all: C<sub foo {START: ... goto
+START;> is better.)
+
+=head2 Make "use utf8" the default
+
+Because of backward compatibility this is difficult: scripts could not
+contain B<any legacy eight-bit data> (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.
+
+    Collation?     http://www.unicode.org/unicode/reports/tr10/
+    Normalization? http://www.unicode.org/unicode/reports/tr15/
+
+=head2 pack/unpack tutorial
+
+Wolfgang Laun finished what Simon Cozens started.
+
+=cut