The roadmap to 5.10 envisages feature based releases, as various items in this
TODO are completed.
-=head2 Needed for a 5.9.5 release
+=head2 Needed for the final 5.10.0 release
-=over
-
-=item *
-
-Review smart match semantics in light of Perl 6 developments.
-
-=item *
-
-Review assertions. Review syntax to combine assertions. Assertions could take
-advantage of the lexical pragmas work. L</What hooks would assertions need?>
-
-=item *
-
-C<encoding> should be turned into a lexical pragma (probably).
-
-=back
-
-=head2 Needed for a 5.9.6 release
-
-Stabilisation. If all goes well, this will be the equivalent of a 5.10-beta.
+Review perlguts. Significant changes have occured since 5.8, and we can't
+release a new version without making sure these are covered.
=head1 Tasks that only need Perl knowledge
It would be good to teach C<embed.pl> to understand the conditional
compilation, and hence remove the duplication, and the mistakes it has caused.
+=head2 use strict; and AutoLoad
+
+Currently if you write
+
+ package Whack;
+ use AutoLoader 'AUTOLOAD';
+ use strict;
+ 1;
+ __END__
+ sub bloop {
+ print join (' ', No, strict, here), "!\n";
+ }
+
+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.
+
=head1 Tasks that need a little sysadmin-type knowledge
Or if you prefer, tasks that you would learn from, and broaden your skills
identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
be good.
-=head1 Tasks that need a knowledge of XS
-
-These tasks would need C knowledge, and roughly the level of knowledge of
-the perl API that comes from writing modules that use XS to interface to
-C.
-
-=head2 shrink C<PVBM>s
-
-By removing unused elements and careful re-ordering, the structures for C<AV>s,
-C<HV>s, C<CV>s and C<GV>s have recently been shrunk considerably. C<PVIO>s
-probably aren't worth it, as typical programs don't use more than 8, and
-(at least) C<Filter::Util::Call> uses C<SvPVX>/C<SvCUR>/C<SvLEN> on a C<PVIO>,
-so it would mean code changes to modules on CPAN. C<PVBM>s might have some
-savings to win.
-
-=head2 autovivification
-
-Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
-
-This task is incremental - even a little bit of work on it will help.
-
-=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>.)
-
-=head2 Unicode in %ENV
-
-Currently the %ENV entries are always byte strings.
-
-=head2 use less 'memory'
-
-Investigate trade offs to switch out perl's choices on memory usage.
-Particularly perl should be able to give memory back.
-
-This task is incremental - even a little bit of work on it will help.
-
-=head2 Re-implement C<:unique> in a way that is actually thread-safe
-
-The old implementation made bad assumptions on several levels. A good 90%
-solution might be just to make C<:unique> work to share the string buffer
-of SvPVs. That way large constant strings can be shared between ithreads,
-such as the configuration information in F<Config>.
-
-=head2 Make tainting consistent
+=head2 Use secure CRT functions when building with VC8 on Win32
-Tainting would be easier to use if it didn't take documented shortcuts and
-allow taint to "leak" everywhere within an expression.
-
-=head2 readpipe(LIST)
+Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
+that they were "unsafe" and introduced differently named secure versions of
+them as replacements, e.g. instead of writing
-system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
-running a shell. readpipe() (the function behind qx//) could be similarly
-extended.
+ FILE* f = fopen(__FILE__, "r");
-=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
+one should now write
-Maybe create a utility that checks after each libperl.a creation that
-none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
-ever creep back to libperl.a.
+ FILE* f;
+ errno_t err = fopen_s(&f, __FILE__, "r");
- nm libperl.a | ./miniperl -alne '$o = $F[0] if /:$/; print "$o $F[1]" if $F[0] eq "U" && $F[1] =~ /^(?:strn?c(?:at|py)|v?sprintf|gets)$/'
+Currently, the warnings about these deprecations have been disabled by adding
+-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
+warning suppressant and actually make use of the new secure CRT functions.
-Note, of course, that this will only tell whether B<your> platform
-is using those naughty interfaces.
-
-=head2 Audit the code for destruction ordering assumptions
-
-Change 25773 notes
-
-
-=head2 Allocate OPs from arenas
-
-Currently all new OP structures are individually malloc()ed and free()d.
-All C<malloc> implementations have space overheads, and are now as fast as
-custom allocates so it would both use less memory and less CPU to allocate
-the various OP structures from arenas. The SV arena code can probably be
-re-used for this.
-
-=head2 Improve win32/wince.c
-
-Currently, numerous functions look virtually, if not completely,
-identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
-be good.
+There is also a similar issue with POSIX CRT function names like fileno having
+been deprecated in favour of ISO C++ conformant names like _fileno. These
+warnings are also currently suppressed with the compiler option /wd4996. It
+might be nice to do as Microsoft suggest here too, although, unlike the secure
+functions issue, there is presumably little or no benefit in this case.
=head1 Tasks that need a knowledge of XS
the perl API that comes from writing modules that use XS to interface to
C.
-=head2 shrink C<PVBM>s
-
-By removing unused elements and careful re-ordering, the structures for C<AV>s,
-C<HV>s, C<CV>s and C<GV>s have recently been shrunk considerably. C<PVIO>s
-probably aren't worth it, as typical programs don't use more than 8, and
-(at least) C<Filter::Util::Call> uses C<SvPVX>/C<SvCUR>/C<SvLEN> on a C<PVIO>,
-so it would mean code changes to modules on CPAN. C<PVBM>s might have some
-savings to win.
-
=head2 autovivification
Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
Currently the %ENV entries are always byte strings.
+=head2 Unicode and glob()
+
+Currently glob patterns and filenames returned from File::Glob::glob()
+are always byte strings.
+
=head2 use less 'memory'
Investigate trade offs to switch out perl's choices on memory usage.
Go through the core and look for similar assumptions that SVs have particular
types, as all bets are off during global destruction.
+=head2 Extend PerlIO and PerlIO::Scalar
+
+PerlIO::Scalar doesn't know how to truncate(). Implementing this
+would require extending the PerlIO vtable.
+
+Similarly the PerlIO vtable doesn't know about formats (write()), or
+about stat(), or chmod()/chown(), utime(), or flock().
+
+(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
+would mean.)
+
+PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
+opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
+readlink().
+
+=head2 -C on the #! line
+
+It should be possible to make -C work correctly if found on the #! line,
+given that all perl command line options are strict ASCII, and -C changes
+only the interpretation of non-ASCII characters, and not for the script file
+handle. To make it work needs some investigation of the ordering of function
+calls during startup, and (by implication) a bit of tweaking of that order.
+
+
=head1 Tasks that need a knowledge of the interpreter
These tasks would need C knowledge, and knowledge of how the interpreter works,
or a willingness to learn.
+=head2 Implement $value ~~ 0 .. $range
+
+It would be nice to extend the syntax of the C<~~> operator to also
+understand numeric (and maybe alphanumeric) ranges.
+
=head2 Attach/detach debugger from running program
The old perltodo notes "With C<gdb>, you can attach the debugger to a running
Allow to delete functions. One can already undef them, but they're still
in the stash.
-=head2 Make readpipe overridable
+=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:
-so we can override qx// as well.
+ 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
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.
+
=head1 Big projects
Tasks that will get your name mentioned in the description of the "Highlights
One bit would be to write the missing code in sv.c:Perl_dirp_dup.
+Fix Perl_sv_dup, et al so that threads can return objects.
+
=head2 iCOW
Sarathy and Arthur have a proposal for an improved Copy On Write which
This will allow the use of a regex from inside (?{ }), (??{ }) and
(?(?{ })|) constructs.
-=head2 Add (?YES) (?NO) to regexp enigne
-
-YES/NO would allow a subpattern to be passed/failed but allow backtracking.
-Basically a more efficient (?=), (?!).
-
-demerphq has this on his todo list
-
-=head2 Add (?SUCCEED) (?FAIL) to regexp engine
-
-SUCCEED/FAIL would allow a pattern to be passed/failed but without backtracking.
-Thus you could signal that a pattern has matched or not, and return (regardless
-that there is more pattern following).
-
-demerphq has this on his todo list
-
-=head2 Add (?CUT) (?COMMIT) to regexp engine
-
-CUT would allow a pattern to say "do not backtrack beyond here".
-COMMIT would say match from here or don't, but don't try the pattern from
-another starting pattern.
-
-These correspond to the \v and \V that Jeffrey Friedl mentions in
-Mastering Regular Expressions 2nd edition.
-
-demerphq has this on his todo list
-
=head2 Add class set operations to regexp engine
Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
demerphq has this on his todo list, but right at the bottom.
-
-