X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=7c7dc96e3ff286fa90f67225dd83019c7c5427f3;hb=e40b81a3dd247b1a29fc78399677b77b78b5f183;hp=a675b7a77e01319693f4f873672fb10d1159be0c;hpb=b2e2905cd6316367cb36fd419288b5b5df9c574c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index a675b7a..7c7dc96 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -25,32 +25,10 @@ programming languages offer you 1 line of immortality? 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 * - -Implement L - -=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 - -=item * - -C 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 @@ -163,10 +141,22 @@ when is duplicated in F. Writing things twice is bad, m'kay. It would be good to teach C 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 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 @@ -308,10 +298,10 @@ arranges for building C for TARGET machine, so this C is assumed then to be copied to TARGET machine and used as a replacement of full C executable. -This should be done litle differently. Namely C should be built for +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. =head1 Tasks that need a little C knowledge @@ -389,23 +379,6 @@ as part of exercising your skills with coverage and profiling tools you might want to determine what ops I are the most commonly used. And in turn suggest evictions and promotions to achieve a better F. -=head2 Shrink struct context - -In F, we have - - struct context { - U32 cx_type; /* what kind of context this is */ - union { - struct block cx_blk; - struct subst cx_subst; - } cx_u; - }; - -There are less than 256 values for C, and the constituent parts -C and C both contain some C and C fields, -so it should be possible to move them to the first word, and share space with -a C C, saving 1 word. - =head2 Allocate OPs from arenas Currently all new OP structures are individually malloc()ed and free()d. @@ -420,21 +393,35 @@ Currently, numerous functions look virtually, if not completely, identical in both C and C files, which can't be good. +=head2 Use secure CRT functions when building with VC8 on Win32 + +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 + + FILE* f = fopen(__FILE__, "r"); + +one should now write + + FILE* f; + errno_t err = fopen_s(&f, __FILE__, "r"); + +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. + +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 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 Cs - -By removing unused elements and careful re-ordering, the structures for Cs, -Cs, Cs and Cs have recently been shrunk considerably. Cs -probably aren't worth it, as typical programs don't use more than 8, and -(at least) C uses C/C/C on a C, -so it would mean code changes to modules on CPAN. Cs might have some -savings to win. - =head2 autovivification Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; @@ -468,6 +455,11 @@ L.) 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. @@ -493,8 +485,57 @@ system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid running a shell. readpipe() (the function behind qx//) could be similarly extended. +=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf() + +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. + + 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)$/' + +Note, of course, that this will only tell whether B platform +is using those naughty interfaces. + +=head2 Audit the code for destruction ordering assumptions + +Change 25773 notes + + /* Need to check SvMAGICAL, as during global destruction it may be that + AvARYLEN(av) has been freed before av, and hence the SvANY() pointer + is now part of the linked list of SV heads, rather than pointing to + the original body. */ + /* FIXME - audit the code for other bugs like this one. */ + +adding the C check to + + if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) { + MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen); + +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 @@ -502,6 +543,11 @@ extended. 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, you can attach the debugger to a running @@ -519,32 +565,16 @@ slices. This would be good to fix. The old perltodo notes that lvalue functions don't work in the debugger. This would be good to fix. -=head2 _ prototype character - -Study the possibility of adding a new prototype character, C<_>, meaning -"this argument defaults to $_". - =head2 regexp optimiser optional The regexp optimiser is not optional. It should configurable to be, to allow its performance to be measured, and its bugs to be easily demonstrated. -=head2 UNITCHECK - -Introduce a new special block, UNITCHECK, which is run at the end of a -compilation unit (module, file, eval(STRING) block). This will correspond to -the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the -O.pm/B.pm backend framework depends on it. - =head2 delete &function Allow to delete functions. One can already undef them, but they're still in the stash. -=head2 Make readpipe overridable - -so we can override qx// as well. - =head2 optional optimizer Make the peephole optimizer optional. Currently it performs two tasks as @@ -598,6 +628,16 @@ 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. + =head1 Big projects Tasks that will get your name mentioned in the description of the "Highlights @@ -612,6 +652,8 @@ will be greatly appreciated. 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 @@ -626,3 +668,9 @@ Fix (or rewrite) the implementation of the C closures. This will allow the use of a regex from inside (?{ }), (??{ }) and (?(?{ })|) constructs. + +=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.