X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=6a0d33d74054511e0b070d74680690c71c7f79b7;hb=584420f022db57225e9644b9c6668ff9f567984a;hp=74e5a8662922ce5e3fbd653b3dea41afcfd6e537;hpb=3236f110cb098d9081961e6c9f4585ecaf729cc5;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 74e5a86..6a0d33d 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -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 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 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 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. Functions are declared in F, variables -in F and F. Quite a few of the functions and variables +in F. Quite a few of the functions and variables are conditionally declared there, using C<#ifdef>. However, F doesn't understand the C macros, so the rules about which symbols are present when is duplicated in F. Writing things twice is bad, m'kay. @@ -158,6 +158,8 @@ then C 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 executable. This could be done little differently. Namely C should be built for HOST and then full C 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 and F 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 -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 Cs in a row, then something -typically requiring 4 byte alignment, and then an odd C later on. -(Cs are typically defined as Cs). 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 still defined in F, 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 and C can probably -become Cs. 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.) +Most probably the right way to do this would be this: +L. + =head2 Unicode in %ENV Currently the %ENV entries are always byte strings. +See L. =head2 Unicode and glob() Currently glob patterns and filenames returned from File::Glob::glob() -are always byte strings. +are always byte strings. See L. =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 regex modifier + +That flag would enable to match whole words, and also to interpolate +arrays as alternations. With it, C

would be roughly equivalent to: + + do { local $"='|'; /\b(?:P)\b/ } + +See L +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". -=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 is a hack - @@ -628,10 +611,51 @@ set. The pad API only takes a C pointer, so that's all bytes too. The tokeniser ignores the UTF-8-ness of C, 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 + +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 is good reading at this point, +in fact, all of L is.) + +This has actually already been implemented (but only for Win32), +take a look at F and F. 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