Remove support for assertions and -A
[p5sagit/p5-mst-13.2.git] / pod / perltodo.pod
index 74e5a86..6a0d33d 100644 (file)
@@ -38,7 +38,7 @@ Write portable self destruct code for tests to stop them burning CPU in
 infinite loops. This needs to avoid using alarm, as some of the tests are
 testing alarm/sleep or timers.
 
-=head2 POD -> HTML conversion in the core still sucks
+=head2 POD -E<gt> HTML conversion in the core still sucks
 
 Which is crazy given just how simple POD purports to be, and how simple HTML
 can be. It's not actually I<as> simple as it sounds, particularly with the
@@ -134,7 +134,7 @@ for example POSIX passes Exporter some very memory hungry data structures.
 There is a script F<embed.pl> that generates several header files to prefix
 all of Perl's symbols in a consistent way, to provide some semblance of
 namespace support in C<C>. Functions are declared in F<embed.fnc>, variables
-in F<interpvar.h> and F<thrdvar.h>. Quite a few of the functions and variables
+in F<interpvar.h>. Quite a few of the functions and variables
 are conditionally declared there, using C<#ifdef>. However, F<embed.pl>
 doesn't understand the C macros, so the rules about which symbols are present
 when is duplicated in F<makedef.pl>. Writing things twice is bad, m'kay.
@@ -158,6 +158,8 @@ then C<use strict;> isn't in force within the autoloaded subroutines. It would
 be more consistent (and less surprising) to arrange for all lexical pragmas
 in force at the __END__ block to be in force within each autoloaded subroutine.
 
+There's a similar problem with SelfLoader.
+
 =head1 Tasks that need a little sysadmin-type knowledge
 
 Or if you prefer, tasks that you would learn from, and broaden your skills
@@ -301,7 +303,14 @@ C<perl> executable.
 This could be done little differently. Namely C<miniperl> should be built for
 HOST and then full C<perl> with extensions should be compiled for TARGET.
 This, however, might require extra trickery for %Config: we have one config
-first for HOST and then another for TARGET.
+first for HOST and then another for TARGET.  Tools like MakeMaker will be
+mightily confused.  Having around two different types of executables and
+libraries (HOST and TARGET) makes life interesting for Makefiles and
+shell (and Perl) scripts.  There is $Config{run}, normally empty, which
+can be used as an execution wrapper.  Also note that in some
+cross-compilation/execution environments the HOST and the TARGET do
+not see the same filesystem(s), the $Config{run} may need to do some
+file/directory copying back and forth.
 
 =head1 Tasks that need a little C knowledge
 
@@ -330,37 +339,6 @@ such that it's trivial for the Pumpking to flag "this is an official release"
 when making a tarball, yet leave the default source saying "I'm not the
 official release".
 
-=head2 Ordering of "global" variables.
-
-F<thrdvar.h> and F<intrpvarh> define the "global" variables that need to be
-per-thread under ithreads, where the variables are actually elements in a
-structure. As C dictates, the variables must be laid out in order of
-declaration. There is a comment
-C</* Important ones in the first cache line (if alignment is done right) */>
-which implies that at some point in the past the ordering was carefully chosen
-(at least in part). However, it's clear that the ordering is less than perfect,
-as currently there are things such as 7 C<bool>s in a row, then something
-typically requiring 4 byte alignment, and then an odd C<bool> later on.
-(C<bool>s are typically defined as C<char>s). So it would be good for someone
-to review the ordering of the variables, to see how much alignment padding can
-be removed.
-
-It's also worth checking that all variables are actually used. Perl 5.8.0
-shipped with C<PL_nrs> still defined in F<thrdvar.h>, despite it being unused
-since a change over a year earlier. Had this been spotted before release, it
-could have been removed, but now it has to remain in the 5.8.x releases to
-keep the structure the same size, to retain binary compatibility.
-
-It's probably worth checking if all need to be the types they are. For example
-
-    PERLVAR(Ierror_count, I32) /* how many errors so far, max 10 */
-
-might work as well if stored in a signed (or unsigned) 8 bit value, if the
-comment is accurate. C<PL_multi_open> and C<PL_multi_close> can probably
-become C<char>s. Finding variables to downsize coupled with rearrangement
-could shrink the interpreter structure; a size saving which is multiplied by
-the number of threads running.
-
 =head2 Profile Perl - am I hot or not?
 
 The Perl source code is stable enough that it makes sense to profile it,
@@ -451,14 +429,18 @@ filesystem.
 temporarily retired in 5.8.1, and the -C has been repurposed, see
 L<perlrun>.)
 
+Most probably the right way to do this would be this:
+L</"Virtualize operating system access">.
+
 =head2 Unicode in %ENV
 
 Currently the %ENV entries are always byte strings.
+See L</"Virtualize operating system access">.
 
 =head2 Unicode and glob()
 
 Currently glob patterns and filenames returned from File::Glob::glob()
-are always byte strings.
+are always byte strings.  See L</"Virtualize operating system access">.
 
 =head2 use less 'memory'
 
@@ -575,6 +557,16 @@ its performance to be measured, and its bugs to be easily demonstrated.
 Allow to delete functions. One can already undef them, but they're still
 in the stash.
 
+=head2 C</w> regex modifier
+
+That flag would enable to match whole words, and also to interpolate
+arrays as alternations. With it, C</P/w> would be roughly equivalent to:
+
+    do { local $"='|'; /\b(?:P)\b/ }
+
+See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
+for the discussion.
+
 =head2 optional optimizer
 
 Make the peephole optimizer optional. Currently it performs two tasks as
@@ -611,15 +603,6 @@ instated.
 
 The old perltodo notes "Look at the "reification" code in C<av.c>".
 
-=head2 What hooks would assertions need?
-
-Assertions are in the core, and work. However, assertions needed to be added
-as a core patch, rather than an XS module in ext, or a CPAN module, because
-the core has no hooks in the necessary places. It would be useful to
-investigate what hooks would need to be added to make it possible to provide
-the full assertion support from a CPAN module, so that we aren't constraining
-the imagination of future CPAN authors.
-
 =head2 Properly Unicode safe tokeniser and pads.
 
 The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack -
@@ -628,10 +611,51 @@ set. The pad API only takes a C<char *> pointer, so that's all bytes too. The
 tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from
 source filters.  All this could be fixed.
 
+=head2 The yada yada yada operators
+
+Perl 6's Synopsis 3 says:
+
+I<The ... operator is the "yada, yada, yada" list operator, which is used as
+the body in function prototypes. It complains bitterly (by calling fail)
+if it is ever executed. Variant ??? calls warn, and !!! calls die.>
+
+Those would be nice to add to Perl 5. That could be done without new ops.
+
+=head2 Virtualize operating system access
+
+Implement a set of "vtables" that virtualizes operating system access
+(open(), mkdir(), unlink(), readdir(), getenv(), etc.)  At the very
+least these interfaces should take SVs as "name" arguments instead of
+bare char pointers; probably the most flexible and extensible way
+would be for the Perl-facing interfaces to accept HVs.  The system
+needs to be per-operating-system and per-file-system
+hookable/filterable, preferably both from XS and Perl level
+(L<perlport/"Files and Filesystems"> is good reading at this point,
+in fact, all of L<perlport> is.)
+
+This has actually already been implemented (but only for Win32),
+take a look at F<iperlsys.h> and F<win32/perlhost.h>.  While all Win32
+variants go through a set of "vtables" for operating system access,
+non-Win32 systems currently go straight for the POSIX/UNIX-style
+system/library call.  Similar system as for Win32 should be
+implemented for all platforms.  The existing Win32 implementation
+probably does not need to survive alongside this proposed new
+implementation, the approaches could be merged.
+
+What would this give us?  One often-asked-for feature this would
+enable is using Unicode for filenames (and other "names" like %ENV,
+usernames, hostnames, and so forth.)  But this would also allow for
+things like virtual filesystems, virtual networks, and "sandboxes"
+(though as long as dynamic loading of random object code is allowed,
+not very safe sandboxes since external code of course know not of
+Perl's vtables).  An example of a smaller "sandbox" is that this
+feature can be used to implement per-thread working directories:
+Win32 already does this.
+
 =head1 Big projects
 
 Tasks that will get your name mentioned in the description of the "Highlights
-of 5.10"
+of 5.12"
 
 =head2 make ithreads more robust