This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Todo tweaks.
[perl5.git] / pod / perltodo.pod
index 44a7d10..314ac1e 100644 (file)
@@ -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
 
@@ -94,28 +94,55 @@ to another single Unicode character.  See lib/unicore/SpecCase.txt
 
 =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.
 
 =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.
 
-=head2 use Thread for iThreads
+       http://www.unicode.org/unicode/reports/tr18/
 
-Artur Bergman's C<iThreads> module is a start on this, but needs to
-be more mature.
+=head2 Work out exit/die semantics for threads
 
-=head2 make perl_clone optionally clone ops
+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:
 
-So that pseudoforking, mod_perl, iThreads and nvi will work properly
-(but not as efficiently) until the regex engine is fixed to be threadsafe.
+    use threads wait => 0;
 
-=head2 Work out exit/die semantics for threads
+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
 
@@ -148,7 +175,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.
 
@@ -163,17 +190,13 @@ 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.)
+(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 +209,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
@@ -213,7 +252,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
 
@@ -223,8 +262,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.
 
@@ -279,7 +318,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.
@@ -287,10 +326,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
@@ -322,11 +357,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
@@ -385,12 +420,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
@@ -444,7 +473,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.
@@ -464,10 +493,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 +542,28 @@ 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?)
+
 =head1 Vague ideas
 
 Ideas which have been discussed, and which may or may not happen.
@@ -555,16 +602,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 +639,73 @@ 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, qx,
+readdir, readlink, rename, rmdir, stat, symlink, sysopen, system,
+truncate, unlink, utime.  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.
+
+Note that in Windows the -C command line flag already does quite
+a bit of the above (but even there the support is not complete:
+for example the exec/spawn are not Unicode-aware) by turning on
+the so-called "wide API support". 
+
 =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
@@ -621,11 +720,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
 
@@ -691,7 +790,7 @@ 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
 
@@ -762,9 +861,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 +903,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,16 +947,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.
+=head2 pack/unpack tutorial
 
-See p5p archives for late May/early June 2001 for a recent discussion
-on this topic.
+Wolfgang Laun finished what Simon Cozens started.
 
 =cut