1=head1 NAME 2 3perltodo - Perl TO-DO List 4 5=head1 DESCRIPTION 6 7This is a list of wishes for Perl. The most up to date version of this file 8is at http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod 9 10The tasks we think are smaller or easier are listed first. Anyone is welcome 11to work on any of these, but it's a good idea to first contact 12I<perl5-porters@perl.org> to avoid duplication of effort, and to learn from 13any previous attempts. By all means contact a pumpking privately first if you 14prefer. 15 16Whilst patches to make the list shorter are most welcome, ideas to add to 17the list are also encouraged. Check the perl5-porters archives for past 18ideas, and any discussion about them. One set of archives may be found at: 19 20 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ 21 22What can we offer you in return? Fame, fortune, and everlasting glory? Maybe 23not, but if your patch is incorporated, then we'll add your name to the 24F<AUTHORS> file, which ships in the official distribution. How many other 25programming languages offer you 1 line of immortality? 26 27=head1 Tasks that only need Perl knowledge 28 29=head2 Improve Porting/cmpVERSION.pl to work from git tags 30 31See F<Porting/release_managers_guide.pod> for a bit more detail. 32 33=head2 Migrate t/ from custom TAP generation 34 35Many tests below F<t/> still generate TAP by "hand", rather than using library 36functions. As explained in L<perlhack/Writing a test>, tests in F<t/> are 37written in a particular way to test that more complex constructions actually 38work before using them routinely. Hence they don't use C<Test::More>, but 39instead there is an intentionally simpler library, F<t/test.pl>. However, 40quite a few tests in F<t/> have not been refactored to use it. Refactoring 41any of these tests, one at a time, is a useful thing TODO. 42 43The subdirectories F<base>, F<cmd> and F<comp>, that contain the most 44basic tests, should be excluded from this task. 45 46=head2 Test that regen.pl was run 47 48There are various generated files shipped with the perl distribution, for 49things like header files generate from data. The generation scripts are 50written in perl, and all can be run by F<regen.pl>. However, because they're 51written in perl, we can't run them before we've built perl. We can't run them 52as part of the F<Makefile>, because changing files underneath F<make> confuses 53it completely, and we don't want to run them automatically anyway, as they 54change files shipped by the distribution, something we seek not do to. 55 56If someone changes the data, but forgets to re-run F<regen.pl> then the 57generated files are out of sync. It would be good to have a test in 58F<t/porting> that checks that the generated files are in sync, and fails 59otherwise, to alert someone before they make a poor commit. I suspect that this 60would require adapting the scripts run from F<regen.pl> to have dry-run 61options, and invoking them with these, or by refactoring them into a library 62that does the generation, which can be called by the scripts, and by the test. 63 64=head2 Automate perldelta generation 65 66The perldelta file accompanying each release summaries the major changes. 67It's mostly manually generated currently, but some of that could be 68automated with a bit of perl, specifically the generation of 69 70=over 71 72=item Modules and Pragmata 73 74=item New Documentation 75 76=item New Tests 77 78=back 79 80See F<Porting/how_to_write_a_perldelta.pod> for details. 81 82=head2 Remove duplication of test setup. 83 84Schwern notes, that there's duplication of code - lots and lots of tests have 85some variation on the big block of C<$Is_Foo> checks. We can safely put this 86into a file, change it to build an C<%Is> hash and require it. Maybe just put 87it into F<test.pl>. Throw in the handy tainting subroutines. 88 89=head2 POD -E<gt> HTML conversion in the core still sucks 90 91Which is crazy given just how simple POD purports to be, and how simple HTML 92can be. It's not actually I<as> simple as it sounds, particularly with the 93flexibility POD allows for C<=item>, but it would be good to improve the 94visual appeal of the HTML generated, and to avoid it having any validation 95errors. See also L</make HTML install work>, as the layout of installation tree 96is needed to improve the cross-linking. 97 98The addition of C<Pod::Simple> and its related modules may make this task 99easier to complete. 100 101=head2 Make ExtUtils::ParseXS use strict; 102 103F<lib/ExtUtils/ParseXS.pm> contains this line 104 105 # use strict; # One of these days... 106 107Simply uncomment it, and fix all the resulting issues :-) 108 109The more practical approach, to break the task down into manageable chunks, is 110to work your way though the code from bottom to top, or if necessary adding 111extra C<{ ... }> blocks, and turning on strict within them. 112 113=head2 Make Schwern poorer 114 115We should have tests for everything. When all the core's modules are tested, 116Schwern has promised to donate to $500 to TPF. We may need volunteers to 117hold him upside down and shake vigorously in order to actually extract the 118cash. 119 120=head2 Improve the coverage of the core tests 121 122Use Devel::Cover to ascertain the core modules' test coverage, then add 123tests that are currently missing. 124 125=head2 test B 126 127A full test suite for the B module would be nice. 128 129=head2 A decent benchmark 130 131C<perlbench> seems impervious to any recent changes made to the perl core. It 132would be useful to have a reasonable general benchmarking suite that roughly 133represented what current perl programs do, and measurably reported whether 134tweaks to the core improve, degrade or don't really affect performance, to 135guide people attempting to optimise the guts of perl. Gisle would welcome 136new tests for perlbench. 137 138=head2 fix tainting bugs 139 140Fix the bugs revealed by running the test suite with the C<-t> switch (via 141C<make test.taintwarn>). 142 143=head2 Dual life everything 144 145As part of the "dists" plan, anything that doesn't belong in the smallest perl 146distribution needs to be dual lifed. Anything else can be too. Figure out what 147changes would be needed to package that module and its tests up for CPAN, and 148do so. Test it with older perl releases, and fix the problems you find. 149 150To make a minimal perl distribution, it's useful to look at 151F<t/lib/commonsense.t>. 152 153=head2 Move dual-life pod/*.PL into ext 154 155Nearly all the dual-life modules have been moved to F<ext>. However, we 156still need to move F<pod/*.PL> into their respective directories 157in F<ext/>. They're referenced by (at least) C<plextract> in F<Makefile.SH> 158and C<utils> in F<win32/Makefile> and F<win32/makefile.ml>, and listed 159explicitly in F<win32/pod.mak>, F<vms/descrip_mms.template> and F<utils.lst> 160 161=head2 POSIX memory footprint 162 163Ilya observed that use POSIX; eats memory like there's no tomorrow, and at 164various times worked to cut it down. There is probably still fat to cut out - 165for example POSIX passes Exporter some very memory hungry data structures. 166 167=head2 embed.pl/makedef.pl 168 169There is a script F<embed.pl> that generates several header files to prefix 170all of Perl's symbols in a consistent way, to provide some semblance of 171namespace support in C<C>. Functions are declared in F<embed.fnc>, variables 172in F<interpvar.h>. Quite a few of the functions and variables 173are conditionally declared there, using C<#ifdef>. However, F<embed.pl> 174doesn't understand the C macros, so the rules about which symbols are present 175when is duplicated in F<makedef.pl>. Writing things twice is bad, m'kay. 176It would be good to teach C<embed.pl> to understand the conditional 177compilation, and hence remove the duplication, and the mistakes it has caused. 178 179=head2 use strict; and AutoLoad 180 181Currently if you write 182 183 package Whack; 184 use AutoLoader 'AUTOLOAD'; 185 use strict; 186 1; 187 __END__ 188 sub bloop { 189 print join (' ', No, strict, here), "!\n"; 190 } 191 192then C<use strict;> isn't in force within the autoloaded subroutines. It would 193be more consistent (and less surprising) to arrange for all lexical pragmas 194in force at the __END__ block to be in force within each autoloaded subroutine. 195 196There's a similar problem with SelfLoader. 197 198=head2 profile installman 199 200The F<installman> script is slow. All it is doing text processing, which we're 201told is something Perl is good at. So it would be nice to know what it is doing 202that is taking so much CPU, and where possible address it. 203 204=head2 enable lexical enabling/disabling of inidvidual warnings 205 206Currently, warnings can only be enabled or disabled by category. There 207are times when it would be useful to quash a single warning, not a 208whole category. 209 210=head1 Tasks that need a little sysadmin-type knowledge 211 212Or if you prefer, tasks that you would learn from, and broaden your skills 213base... 214 215=head2 make HTML install work 216 217There is an C<installhtml> target in the Makefile. It's marked as 218"experimental". It would be good to get this tested, make it work reliably, and 219remove the "experimental" tag. This would include 220 221=over 4 222 223=item 1 224 225Checking that cross linking between various parts of the documentation works. 226In particular that links work between the modules (files with POD in F<lib/>) 227and the core documentation (files in F<pod/>) 228 229=item 2 230 231Work out how to split C<perlfunc> into chunks, preferably one per function 232group, preferably with general case code that could be used elsewhere. 233Challenges here are correctly identifying the groups of functions that go 234together, and making the right named external cross-links point to the right 235page. Things to be aware of are C<-X>, groups such as C<getpwnam> to 236C<endservent>, two or more C<=items> giving the different parameter lists, such 237as 238 239 =item substr EXPR,OFFSET,LENGTH,REPLACEMENT 240 =item substr EXPR,OFFSET,LENGTH 241 =item substr EXPR,OFFSET 242 243and different parameter lists having different meanings. (eg C<select>) 244 245=back 246 247=head2 compressed man pages 248 249Be able to install them. This would probably need a configure test to see how 250the system does compressed man pages (same directory/different directory? 251same filename/different filename), as well as tweaking the F<installman> script 252to compress as necessary. 253 254=head2 Add a code coverage target to the Makefile 255 256Make it easy for anyone to run Devel::Cover on the core's tests. The steps 257to do this manually are roughly 258 259=over 4 260 261=item * 262 263do a normal C<Configure>, but include Devel::Cover as a module to install 264(see F<INSTALL> for how to do this) 265 266=item * 267 268 make perl 269 270=item * 271 272 cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness 273 274=item * 275 276Process the resulting Devel::Cover database 277 278=back 279 280This just give you the coverage of the F<.pm>s. To also get the C level 281coverage you need to 282 283=over 4 284 285=item * 286 287Additionally tell C<Configure> to use the appropriate C compiler flags for 288C<gcov> 289 290=item * 291 292 make perl.gcov 293 294(instead of C<make perl>) 295 296=item * 297 298After running the tests run C<gcov> to generate all the F<.gcov> files. 299(Including down in the subdirectories of F<ext/> 300 301=item * 302 303(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files 304to get their stats into the cover_db directory. 305 306=item * 307 308Then process the Devel::Cover database 309 310=back 311 312It would be good to add a single switch to C<Configure> to specify that you 313wanted to perform perl level coverage, and another to specify C level 314coverage, and have C<Configure> and the F<Makefile> do all the right things 315automatically. 316 317=head2 Make Config.pm cope with differences between built and installed perl 318 319Quite often vendors ship a perl binary compiled with their (pay-for) 320compilers. People install a free compiler, such as gcc. To work out how to 321build extensions, Perl interrogates C<%Config>, so in this situation 322C<%Config> describes compilers that aren't there, and extension building 323fails. This forces people into choosing between re-compiling perl themselves 324using the compiler they have, or only using modules that the vendor ships. 325 326It would be good to find a way teach C<Config.pm> about the installation setup, 327possibly involving probing at install time or later, so that the C<%Config> in 328a binary distribution better describes the installed machine, when the 329installed machine differs from the build machine in some significant way. 330 331=head2 linker specification files 332 333Some platforms mandate that you provide a list of a shared library's external 334symbols to the linker, so the core already has the infrastructure in place to 335do this for generating shared perl libraries. My understanding is that the 336GNU toolchain can accept an optional linker specification file, and restrict 337visibility just to symbols declared in that file. It would be good to extend 338F<makedef.pl> to support this format, and to provide a means within 339C<Configure> to enable it. This would allow Unix users to test that the 340export list is correct, and to build a perl that does not pollute the global 341namespace with private symbols. 342 343=head2 Cross-compile support 344 345Currently C<Configure> understands C<-Dusecrosscompile> option. This option 346arranges for building C<miniperl> for TARGET machine, so this C<miniperl> is 347assumed then to be copied to TARGET machine and used as a replacement of full 348C<perl> executable. 349 350This could be done little differently. Namely C<miniperl> should be built for 351HOST and then full C<perl> with extensions should be compiled for TARGET. 352This, however, might require extra trickery for %Config: we have one config 353first for HOST and then another for TARGET. Tools like MakeMaker will be 354mightily confused. Having around two different types of executables and 355libraries (HOST and TARGET) makes life interesting for Makefiles and 356shell (and Perl) scripts. There is $Config{run}, normally empty, which 357can be used as an execution wrapper. Also note that in some 358cross-compilation/execution environments the HOST and the TARGET do 359not see the same filesystem(s), the $Config{run} may need to do some 360file/directory copying back and forth. 361 362=head2 roffitall 363 364Make F<pod/roffitall> be updated by F<pod/buildtoc>. 365 366=head2 Split "linker" from "compiler" 367 368Right now, Configure probes for two commands, and sets two variables: 369 370=over 4 371 372=item * C<cc> (in F<cc.U>) 373 374This variable holds the name of a command to execute a C compiler which 375can resolve multiple global references that happen to have the same 376name. Usual values are F<cc> and F<gcc>. 377Fervent ANSI compilers may be called F<c89>. AIX has F<xlc>. 378 379=item * C<ld> (in F<dlsrc.U>) 380 381This variable indicates the program to be used to link 382libraries for dynamic loading. On some systems, it is F<ld>. 383On ELF systems, it should be C<$cc>. Mostly, we'll try to respect 384the hint file setting. 385 386=back 387 388There is an implicit historical assumption from around Perl5.000alpha 389something, that C<$cc> is also the correct command for linking object files 390together to make an executable. This may be true on Unix, but it's not true 391on other platforms, and there are a maze of work arounds in other places (such 392as F<Makefile.SH>) to cope with this. 393 394Ideally, we should create a new variable to hold the name of the executable 395linker program, probe for it in F<Configure>, and centralise all the special 396case logic there or in hints files. 397 398A small bikeshed issue remains - what to call it, given that C<$ld> is already 399taken (arguably for the wrong thing now, but on SunOS 4.1 it is the command 400for creating dynamically-loadable modules) and C<$link> could be confused with 401the Unix command line executable of the same name, which does something 402completely different. Andy Dougherty makes the counter argument "In parrot, I 403tried to call the command used to link object files and libraries into an 404executable F<link>, since that's what my vaguely-remembered DOS and VMS 405experience suggested. I don't think any real confusion has ensued, so it's 406probably a reasonable name for perl5 to use." 407 408"Alas, I've always worried that introducing it would make things worse, 409since now the module building utilities would have to look for 410C<$Config{link}> and institute a fall-back plan if it weren't found." 411Although I can see that as confusing, given that C<$Config{d_link}> is true 412when (hard) links are available. 413 414=head2 Configure Windows using PowerShell 415 416Currently, Windows uses hard-coded config files based to build the 417config.h for compiling Perl. Makefiles are also hard-coded and need to be 418hand edited prior to building Perl. While this makes it easy to create a perl.exe 419that works across multiple Windows versions, being able to accurately 420configure a perl.exe for a specific Windows versions and VS C++ would be 421a nice enhancement. With PowerShell available on Windows XP and up, this 422may now be possible. Step 1 might be to investigate whether this is possible 423and use this to clean up our current makefile situation. Step 2 would be to 424see if there would be a way to use our existing metaconfig units to configure a 425Windows Perl or whether we go in a separate direction and make it so. Of 426course, we all know what step 3 is. 427 428=head2 decouple -g and -DDEBUGGING 429 430Currently F<Configure> automatically adds C<-DDEBUGGING> to the C compiler 431flags if it spots C<-g> in the optimiser flags. The pre-processor directive 432C<DEBUGGING> enables F<perl>'s command line C<-D> options, but in the process 433makes F<perl> slower. It would be good to disentangle this logic, so that 434C-level debugging with C<-g> and Perl level debugging with C<-D> can easily 435be enabled independently. 436 437=head1 Tasks that need a little C knowledge 438 439These tasks would need a little C knowledge, but don't need any specific 440background or experience with XS, or how the Perl interpreter works 441 442=head2 Weed out needless PERL_UNUSED_ARG 443 444The C code uses the macro C<PERL_UNUSED_ARG> to stop compilers warning about 445unused arguments. Often the arguments can't be removed, as there is an 446external constraint that determines the prototype of the function, so this 447approach is valid. However, there are some cases where C<PERL_UNUSED_ARG> 448could be removed. Specifically 449 450=over 4 451 452=item * 453 454The prototypes of (nearly all) static functions can be changed 455 456=item * 457 458Unused arguments generated by short cut macros are wasteful - the short cut 459macro used can be changed. 460 461=back 462 463=head2 Modernize the order of directories in @INC 464 465The way @INC is laid out by default, one cannot upgrade core (dual-life) 466modules without overwriting files. This causes problems for binary 467package builders. One possible proposal is laid out in this 468message: 469L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>. 470 471=head2 -Duse32bit* 472 473Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall. 474On these systems, it might be the default compilation mode, and there 475is currently no guarantee that passing no use64bitall option to the 476Configure process will build a 32bit perl. Implementing -Duse32bit* 477options would be nice for perl 5.12. 478 479=head2 Profile Perl - am I hot or not? 480 481The Perl source code is stable enough that it makes sense to profile it, 482identify and optimise the hotspots. It would be good to measure the 483performance of the Perl interpreter using free tools such as cachegrind, 484gprof, and dtrace, and work to reduce the bottlenecks they reveal. 485 486As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops, 487the ops that are most commonly used. The idea is that by grouping them, their 488object code will be adjacent in the executable, so they have a greater chance 489of already being in the CPU cache (or swapped in) due to being near another op 490already in use. 491 492Except that it's not clear if these really are the most commonly used ops. So 493as part of exercising your skills with coverage and profiling tools you might 494want to determine what ops I<really> are the most commonly used. And in turn 495suggest evictions and promotions to achieve a better F<pp_hot.c>. 496 497One piece of Perl code that might make a good testbed is F<installman>. 498 499=head2 Allocate OPs from arenas 500 501Currently all new OP structures are individually malloc()ed and free()d. 502All C<malloc> implementations have space overheads, and are now as fast as 503custom allocates so it would both use less memory and less CPU to allocate 504the various OP structures from arenas. The SV arena code can probably be 505re-used for this. 506 507Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use 508Perl_Slab_alloc() to pack optrees into a contiguous block, which is 509probably superior to the use of OP arenas, esp. from a cache locality 510standpoint. See L<Profile Perl - am I hot or not?>. 511 512=head2 Improve win32/wince.c 513 514Currently, numerous functions look virtually, if not completely, 515identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't 516be good. 517 518=head2 Use secure CRT functions when building with VC8 on Win32 519 520Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis 521that they were "unsafe" and introduced differently named secure versions of 522them as replacements, e.g. instead of writing 523 524 FILE* f = fopen(__FILE__, "r"); 525 526one should now write 527 528 FILE* f; 529 errno_t err = fopen_s(&f, __FILE__, "r"); 530 531Currently, the warnings about these deprecations have been disabled by adding 532-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that 533warning suppressant and actually make use of the new secure CRT functions. 534 535There is also a similar issue with POSIX CRT function names like fileno having 536been deprecated in favour of ISO C++ conformant names like _fileno. These 537warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It 538might be nice to do as Microsoft suggest here too, although, unlike the secure 539functions issue, there is presumably little or no benefit in this case. 540 541=head2 Fix POSIX::access() and chdir() on Win32 542 543These functions currently take no account of DACLs and therefore do not behave 544correctly in situations where access is restricted by DACLs (as opposed to the 545read-only attribute). 546 547Furthermore, POSIX::access() behaves differently for directories having the 548read-only attribute set depending on what CRT library is being used. For 549example, the _access() function in the VC6 and VC7 CRTs (wrongly) claim that 550such directories are not writable, whereas in fact all directories are writable 551unless access is denied by DACLs. (In the case of directories, the read-only 552attribute actually only means that the directory cannot be deleted.) This CRT 553bug is fixed in the VC8 and VC9 CRTs (but, of course, the directory may still 554not actually be writable if access is indeed denied by DACLs). 555 556For the chdir() issue, see ActiveState bug #74552: 557http://bugs.activestate.com/show_bug.cgi?id=74552 558 559Therefore, DACLs should be checked both for consistency across CRTs and for 560the correct answer. 561 562(Note that perl's -w operator should not be modified to check DACLs. It has 563been written so that it reflects the state of the read-only attribute, even 564for directories (whatever CRT is being used), for symmetry with chmod().) 565 566=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf() 567 568Maybe create a utility that checks after each libperl.a creation that 569none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets()) 570ever creep back to libperl.a. 571 572 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)$/' 573 574Note, of course, that this will only tell whether B<your> platform 575is using those naughty interfaces. 576 577=head2 -D_FORTIFY_SOURCE=2, -fstack-protector 578 579Recent glibcs support C<-D_FORTIFY_SOURCE=2> and recent gcc 580(4.1 onwards?) supports C<-fstack-protector>, both of which give 581protection against various kinds of buffer overflow problems. 582These should probably be used for compiling Perl whenever available, 583Configure and/or hints files should be adjusted to probe for the 584availability of these features and enable them as appropriate. 585 586=head2 Arenas for GPs? For MAGIC? 587 588C<struct gp> and C<struct magic> are both currently allocated by C<malloc>. 589It might be a speed or memory saving to change to using arenas. Or it might 590not. It would need some suitable benchmarking first. In particular, C<GP>s 591can probably be changed with minimal compatibility impact (probably nothing 592outside of the core, or even outside of F<gv.c> allocates them), but they 593probably aren't allocated/deallocated often enough for a speed saving. Whereas 594C<MAGIC> is allocated/deallocated more often, but in turn, is also something 595more externally visible, so changing the rules here may bite external code. 596 597=head2 Shared arenas 598 599Several SV body structs are now the same size, notably PVMG and PVGV, PVAV and 600PVHV, and PVCV and PVFM. It should be possible to allocate and return same 601sized bodies from the same actual arena, rather than maintaining one arena for 602each. This could save 4-6K per thread, of memory no longer tied up in the 603not-yet-allocated part of an arena. 604 605 606=head1 Tasks that need a knowledge of XS 607 608These tasks would need C knowledge, and roughly the level of knowledge of 609the perl API that comes from writing modules that use XS to interface to 610C. 611 612=head2 Write an XS cookbook 613 614Create pod/perlxscookbook.pod with short, task-focused 'recipes' in XS that 615demonstrate common tasks and good practices. (Some of these might be 616extracted from perlguts.) The target audience should be XS novices, who need 617more examples than perlguts but something less overwhelming than perlapi. 618Recipes should provide "one pretty good way to do it" instead of TIMTOWTDI. 619 620Rather than focusing on interfacing Perl to C libraries, such a cookbook 621should probably focus on how to optimize Perl routines by re-writing them 622in XS. This will likely be more motivating to those who mostly work in 623Perl but are looking to take the next step into XS. 624 625Deconstructing and explaining some simpler XS modules could be one way to 626bootstrap a cookbook. (List::Util? Class::XSAccessor? Tree::Ternary_XS?) 627Another option could be deconstructing the implementation of some simpler 628functions in op.c. 629 630=head2 Allow XSUBs to inline themselves as OPs 631 632For a simple XSUB, often the subroutine dispatch takes more time than the 633XSUB itself. The tokeniser already has the ability to inline constant 634subroutines - it would be good to provide a way to inline other subroutines. 635 636Specifically, simplest approach looks to be to allow an XSUB to provide an 637alternative implementation of itself as a custom OP. A new flag bit in 638C<CvFLAGS()> would signal to the peephole optimiser to take an optree 639such as this: 640 641 b <@> leave[1 ref] vKP/REFC ->(end) 642 1 <0> enter ->2 643 2 <;> nextstate(main 1 -e:1) v:{ ->3 644 a <2> sassign vKS/2 ->b 645 8 <1> entersub[t2] sKS/TARG,1 ->9 646 - <1> ex-list sK ->8 647 3 <0> pushmark s ->4 648 4 <$> const(IV 1) sM ->5 649 6 <1> rv2av[t1] lKM/1 ->7 650 5 <$> gv(*a) s ->6 651 - <1> ex-rv2cv sK ->- 652 7 <$> gv(*x) s/EARLYCV ->8 653 - <1> ex-rv2sv sKRM*/1 ->a 654 9 <$> gvsv(*b) s ->a 655 656perform the symbol table lookup of C<rv2cv> and C<gv(*x)>, locate the 657pointer to the custom OP that provides the direct implementation, and re- 658write the optree something like: 659 660 b <@> leave[1 ref] vKP/REFC ->(end) 661 1 <0> enter ->2 662 2 <;> nextstate(main 1 -e:1) v:{ ->3 663 a <2> sassign vKS/2 ->b 664 7 <1> custom_x -> 8 665 - <1> ex-list sK ->7 666 3 <0> pushmark s ->4 667 4 <$> const(IV 1) sM ->5 668 6 <1> rv2av[t1] lKM/1 ->7 669 5 <$> gv(*a) s ->6 670 - <1> ex-rv2cv sK ->- 671 - <$> ex-gv(*x) s/EARLYCV ->7 672 - <1> ex-rv2sv sKRM*/1 ->a 673 8 <$> gvsv(*b) s ->a 674 675I<i.e.> the C<gv(*)> OP has been nulled and spliced out of the execution 676path, and the C<entersub> OP has been replaced by the custom op. 677 678This approach should provide a measurable speed up to simple XSUBs inside 679tight loops. Initially one would have to write the OP alternative 680implementation by hand, but it's likely that this should be reasonably 681straightforward for the type of XSUB that would benefit the most. Longer 682term, once the run-time implementation is proven, it should be possible to 683progressively update ExtUtils::ParseXS to generate OP implementations for 684some XSUBs. 685 686=head2 Remove the use of SVs as temporaries in dump.c 687 688F<dump.c> contains debugging routines to dump out the contains of perl data 689structures, such as C<SV>s, C<AV>s and C<HV>s. Currently, the dumping code 690B<uses> C<SV>s for its temporary buffers, which was a logical initial 691implementation choice, as they provide ready made memory handling. 692 693However, they also lead to a lot of confusion when it happens that what you're 694trying to debug is seen by the code in F<dump.c>, correctly or incorrectly, as 695a temporary scalar it can use for a temporary buffer. It's also not possible 696to dump scalars before the interpreter is properly set up, such as during 697ithreads cloning. It would be good to progressively replace the use of scalars 698as string accumulation buffers with something much simpler, directly allocated 699by C<malloc>. The F<dump.c> code is (or should be) only producing 7 bit 700US-ASCII, so output character sets are not an issue. 701 702Producing and proving an internal simple buffer allocation would make it easier 703to re-write the internals of the PerlIO subsystem to avoid using C<SV>s for 704B<its> buffers, use of which can cause problems similar to those of F<dump.c>, 705at similar times. 706 707=head2 safely supporting POSIX SA_SIGINFO 708 709Some years ago Jarkko supplied patches to provide support for the POSIX 710SA_SIGINFO feature in Perl, passing the extra data to the Perl signal handler. 711 712Unfortunately, it only works with "unsafe" signals, because under safe 713signals, by the time Perl gets to run the signal handler, the extra 714information has been lost. Moreover, it's not easy to store it somewhere, 715as you can't call mutexs, or do anything else fancy, from inside a signal 716handler. 717 718So it strikes me that we could provide safe SA_SIGINFO support 719 720=over 4 721 722=item 1 723 724Provide global variables for two file descriptors 725 726=item 2 727 728When the first request is made via C<sigaction> for C<SA_SIGINFO>, create a 729pipe, store the reader in one, the writer in the other 730 731=item 3 732 733In the "safe" signal handler (C<Perl_csighandler()>/C<S_raise_signal()>), if 734the C<siginfo_t> pointer non-C<NULL>, and the writer file handle is open, 735 736=over 8 737 738=item 1 739 740serialise signal number, C<struct siginfo_t> (or at least the parts we care 741about) into a small auto char buff 742 743=item 2 744 745C<write()> that (non-blocking) to the writer fd 746 747=over 12 748 749=item 1 750 751if it writes 100%, flag the signal in a counter of "signals on the pipe" akin 752to the current per-signal-number counts 753 754=item 2 755 756if it writes 0%, assume the pipe is full. Flag the data as lost? 757 758=item 3 759 760if it writes partially, croak a panic, as your OS is broken. 761 762=back 763 764=back 765 766=item 4 767 768in the regular C<PERL_ASYNC_CHECK()> processing, if there are "signals on 769the pipe", read the data out, deserialise, build the Perl structures on 770the stack (code in C<Perl_sighandler()>, the "unsafe" handler), and call as 771usual. 772 773=back 774 775I think that this gets us decent C<SA_SIGINFO> support, without the current risk 776of running Perl code inside the signal handler context. (With all the dangers 777of things like C<malloc> corruption that that currently offers us) 778 779For more information see the thread starting with this message: 780http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html 781 782=head2 autovivification 783 784Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict; 785 786This task is incremental - even a little bit of work on it will help. 787 788=head2 Unicode in Filenames 789 790chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open, 791opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen, 792system, truncate, unlink, utime, -X. All these could potentially accept 793Unicode filenames either as input or output (and in the case of system 794and qx Unicode in general, as input or output to/from the shell). 795Whether a filesystem - an operating system pair understands Unicode in 796filenames varies. 797 798Known combinations that have some level of understanding include 799Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac 800OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to 801create Unicode filenames, what forms of Unicode are accepted and used 802(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used, 803and so on, varies. Finding the right level of interfacing to Perl 804requires some thought. Remember that an OS does not implicate a 805filesystem. 806 807(The Windows -C command flag "wide API support" has been at least 808temporarily retired in 5.8.1, and the -C has been repurposed, see 809L<perlrun>.) 810 811Most probably the right way to do this would be this: 812L</"Virtualize operating system access">. 813 814=head2 Unicode in %ENV 815 816Currently the %ENV entries are always byte strings. 817See L</"Virtualize operating system access">. 818 819=head2 Unicode and glob() 820 821Currently glob patterns and filenames returned from File::Glob::glob() 822are always byte strings. See L</"Virtualize operating system access">. 823 824=head2 use less 'memory' 825 826Investigate trade offs to switch out perl's choices on memory usage. 827Particularly perl should be able to give memory back. 828 829This task is incremental - even a little bit of work on it will help. 830 831=head2 Re-implement C<:unique> in a way that is actually thread-safe 832 833The old implementation made bad assumptions on several levels. A good 90% 834solution might be just to make C<:unique> work to share the string buffer 835of SvPVs. That way large constant strings can be shared between ithreads, 836such as the configuration information in F<Config>. 837 838=head2 Make tainting consistent 839 840Tainting would be easier to use if it didn't take documented shortcuts and 841allow taint to "leak" everywhere within an expression. 842 843=head2 readpipe(LIST) 844 845system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid 846running a shell. readpipe() (the function behind qx//) could be similarly 847extended. 848 849=head2 Audit the code for destruction ordering assumptions 850 851Change 25773 notes 852 853 /* Need to check SvMAGICAL, as during global destruction it may be that 854 AvARYLEN(av) has been freed before av, and hence the SvANY() pointer 855 is now part of the linked list of SV heads, rather than pointing to 856 the original body. */ 857 /* FIXME - audit the code for other bugs like this one. */ 858 859adding the C<SvMAGICAL> check to 860 861 if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) { 862 MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen); 863 864Go through the core and look for similar assumptions that SVs have particular 865types, as all bets are off during global destruction. 866 867=head2 Extend PerlIO and PerlIO::Scalar 868 869PerlIO::Scalar doesn't know how to truncate(). Implementing this 870would require extending the PerlIO vtable. 871 872Similarly the PerlIO vtable doesn't know about formats (write()), or 873about stat(), or chmod()/chown(), utime(), or flock(). 874 875(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership 876would mean.) 877 878PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(), 879opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(), 880readlink(). 881 882See also L</"Virtualize operating system access">. 883 884=head2 -C on the #! line 885 886It should be possible to make -C work correctly if found on the #! line, 887given that all perl command line options are strict ASCII, and -C changes 888only the interpretation of non-ASCII characters, and not for the script file 889handle. To make it work needs some investigation of the ordering of function 890calls during startup, and (by implication) a bit of tweaking of that order. 891 892=head2 Organize error messages 893 894Perl's diagnostics (error messages, see L<perldiag>) could use 895reorganizing and formalizing so that each error message has its 896stable-for-all-eternity unique id, categorized by severity, type, and 897subsystem. (The error messages would be listed in a datafile outside 898of the Perl source code, and the source code would only refer to the 899messages by the id.) This clean-up and regularizing should apply 900for all croak() messages. 901 902This would enable all sorts of things: easier translation/localization 903of the messages (though please do keep in mind the caveats of 904L<Locale::Maketext> about too straightforward approaches to 905translation), filtering by severity, and instead of grepping for a 906particular error message one could look for a stable error id. (Of 907course, changing the error messages by default would break all the 908existing software depending on some particular error message...) 909 910This kind of functionality is known as I<message catalogs>. Look for 911inspiration for example in the catgets() system, possibly even use it 912if available-- but B<only> if available, all platforms will B<not> 913have catgets(). 914 915For the really pure at heart, consider extending this item to cover 916also the warning messages (see L<perllexwarn>, C<warnings.pl>). 917 918=head1 Tasks that need a knowledge of the interpreter 919 920These tasks would need C knowledge, and knowledge of how the interpreter works, 921or a willingness to learn. 922 923=head2 forbid labels with keyword names 924 925Currently C<goto keyword> "computes" the label value: 926 927 $ perl -e 'goto print' 928 Can't find label 1 at -e line 1. 929 930It is controversial if the right way to avoid the confusion is to forbid 931labels with keyword names, or if it would be better to always treat 932bareword expressions after a "goto" as a label and never as a keyword. 933 934=head2 truncate() prototype 935 936The prototype of truncate() is currently C<$$>. It should probably 937be C<*$> instead. (This is changed in F<opcode.pl>) 938 939=head2 decapsulation of smart match argument 940 941Currently C<$foo ~~ $object> will die with the message "Smart matching a 942non-overloaded object breaks encapsulation". It would be nice to allow 943to bypass this by using explictly the syntax C<$foo ~~ %$object> or 944C<$foo ~~ @$object>. 945 946=head2 error reporting of [$a ; $b] 947 948Using C<;> inside brackets is a syntax error, and we don't propose to change 949that by giving it any meaning. However, it's not reported very helpfully: 950 951 $ perl -e '$a = [$b; $c];' 952 syntax error at -e line 1, near "$b;" 953 syntax error at -e line 1, near "$c]" 954 Execution of -e aborted due to compilation errors. 955 956It should be possible to hook into the tokeniser or the lexer, so that when a 957C<;> is parsed where it is not legal as a statement terminator (ie inside 958C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like 959I<';' isn't legal inside an expression - if you need multiple statements use a 960do {...} block>. See the thread starting at 961http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html 962 963=head2 lexicals used only once 964 965This warns: 966 967 $ perl -we '$pie = 42' 968 Name "main::pie" used only once: possible typo at -e line 1. 969 970This does not: 971 972 $ perl -we 'my $pie = 42' 973 974Logically all lexicals used only once should warn, if the user asks for 975warnings. An unworked RT ticket (#5087) has been open for almost seven 976years for this discrepancy. 977 978=head2 UTF-8 revamp 979 980The handling of Unicode is unclean in many places. For example, the regexp 981engine matches in Unicode semantics whenever the string or the pattern is 982flagged as UTF-8, but that should not be dependent on an internal storage 983detail of the string. 984 985=head2 Properly Unicode safe tokeniser and pads. 986 987The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack - 988variable names are stored in stashes as raw bytes, without the utf-8 flag 989set. The pad API only takes a C<char *> pointer, so that's all bytes too. The 990tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from 991source filters. All this could be fixed. 992 993=head2 state variable initialization in list context 994 995Currently this is illegal: 996 997 state ($a, $b) = foo(); 998 999In Perl 6, C<state ($a) = foo();> and C<(state $a) = foo();> have different 1000semantics, which is tricky to implement in Perl 5 as currently they produce 1001the same opcode trees. The Perl 6 design is firm, so it would be good to 1002implement the necessary code in Perl 5. There are comments in 1003C<Perl_newASSIGNOP()> that show the code paths taken by various assignment 1004constructions involving state variables. 1005 1006=head2 Implement $value ~~ 0 .. $range 1007 1008It would be nice to extend the syntax of the C<~~> operator to also 1009understand numeric (and maybe alphanumeric) ranges. 1010 1011=head2 A does() built-in 1012 1013Like ref(), only useful. It would call the C<DOES> method on objects; it 1014would also tell whether something can be dereferenced as an 1015array/hash/etc., or used as a regexp, etc. 1016L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html> 1017 1018=head2 Tied filehandles and write() don't mix 1019 1020There is no method on tied filehandles to allow them to be called back by 1021formats. 1022 1023=head2 Propagate compilation hints to the debugger 1024 1025Currently a debugger started with -dE on the command-line doesn't see the 1026features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't 1027propagated to the debugger. Probably it would be a good thing to propagate 1028hints from the innermost non-C<DB::> scope: this would make code eval'ed 1029in the debugger see the features (and strictures, etc.) currently in 1030scope. 1031 1032=head2 Attach/detach debugger from running program 1033 1034The old perltodo notes "With C<gdb>, you can attach the debugger to a running 1035program if you pass the process ID. It would be good to do this with the Perl 1036debugger on a running Perl program, although I'm not sure how it would be 1037done." ssh and screen do this with named pipes in /tmp. Maybe we can too. 1038 1039=head2 LVALUE functions for lists 1040 1041The old perltodo notes that lvalue functions don't work for list or hash 1042slices. This would be good to fix. 1043 1044=head2 regexp optimiser optional 1045 1046The regexp optimiser is not optional. It should configurable to be, to allow 1047its performance to be measured, and its bugs to be easily demonstrated. 1048 1049=head2 C</w> regex modifier 1050 1051That flag would enable to match whole words, and also to interpolate 1052arrays as alternations. With it, C</P/w> would be roughly equivalent to: 1053 1054 do { local $"='|'; /\b(?:P)\b/ } 1055 1056See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html> 1057for the discussion. 1058 1059=head2 optional optimizer 1060 1061Make the peephole optimizer optional. Currently it performs two tasks as 1062it walks the optree - genuine peephole optimisations, and necessary fixups of 1063ops. It would be good to find an efficient way to switch out the 1064optimisations whilst keeping the fixups. 1065 1066=head2 You WANT *how* many 1067 1068Currently contexts are void, scalar and list. split has a special mechanism in 1069place to pass in the number of return values wanted. It would be useful to 1070have a general mechanism for this, backwards compatible and little speed hit. 1071This would allow proposals such as short circuiting sort to be implemented 1072as a module on CPAN. 1073 1074=head2 lexical aliases 1075 1076Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>. 1077 1078=head2 entersub XS vs Perl 1079 1080At the moment pp_entersub is huge, and has code to deal with entering both 1081perl and XS subroutines. Subroutine implementations rarely change between 1082perl and XS at run time, so investigate using 2 ops to enter subs (one for 1083XS, one for perl) and swap between if a sub is redefined. 1084 1085=head2 Self-ties 1086 1087Self-ties are currently illegal because they caused too many segfaults. Maybe 1088the causes of these could be tracked down and self-ties on all types 1089reinstated. 1090 1091=head2 Optimize away @_ 1092 1093The old perltodo notes "Look at the "reification" code in C<av.c>". 1094 1095=head2 Virtualize operating system access 1096 1097Implement a set of "vtables" that virtualizes operating system access 1098(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very 1099least these interfaces should take SVs as "name" arguments instead of 1100bare char pointers; probably the most flexible and extensible way 1101would be for the Perl-facing interfaces to accept HVs. The system 1102needs to be per-operating-system and per-file-system 1103hookable/filterable, preferably both from XS and Perl level 1104(L<perlport/"Files and Filesystems"> is good reading at this point, 1105in fact, all of L<perlport> is.) 1106 1107This has actually already been implemented (but only for Win32), 1108take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32 1109variants go through a set of "vtables" for operating system access, 1110non-Win32 systems currently go straight for the POSIX/Unix-style 1111system/library call. Similar system as for Win32 should be 1112implemented for all platforms. The existing Win32 implementation 1113probably does not need to survive alongside this proposed new 1114implementation, the approaches could be merged. 1115 1116What would this give us? One often-asked-for feature this would 1117enable is using Unicode for filenames, and other "names" like %ENV, 1118usernames, hostnames, and so forth. 1119(See L<perlunicode/"When Unicode Does Not Happen">.) 1120 1121But this kind of virtualization would also allow for things like 1122virtual filesystems, virtual networks, and "sandboxes" (though as long 1123as dynamic loading of random object code is allowed, not very safe 1124sandboxes since external code of course know not of Perl's vtables). 1125An example of a smaller "sandbox" is that this feature can be used to 1126implement per-thread working directories: Win32 already does this. 1127 1128See also L</"Extend PerlIO and PerlIO::Scalar">. 1129 1130=head2 Investigate PADTMP hash pessimisation 1131 1132The peephole optimiser converts constants used for hash key lookups to shared 1133hash key scalars. Under ithreads, something is undoing this work. 1134See http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html 1135 1136=head2 Store the current pad in the OP slab allocator 1137 1138=for clarification 1139I hope that I got that "current pad" part correct 1140 1141Currently we leak ops in various cases of parse failure. I suggested that we 1142could solve this by always using the op slab allocator, and walking it to 1143free ops. Dave comments that as some ops are already freed during optree 1144creation one would have to mark which ops are freed, and not double free them 1145when walking the slab. He notes that one problem with this is that for some ops 1146you have to know which pad was current at the time of allocation, which does 1147change. I suggested storing a pointer to the current pad in the memory allocated 1148for the slab, and swapping to a new slab each time the pad changes. Dave thinks 1149that this would work. 1150 1151=head2 repack the optree 1152 1153Repacking the optree after execution order is determined could allow 1154removal of NULL ops, and optimal ordering of OPs with respect to cache-line 1155filling. The slab allocator could be reused for this purpose. I think that 1156the best way to do this is to make it an optional step just before the 1157completed optree is attached to anything else, and to use the slab allocator 1158unchanged, so that freeing ops is identical whether or not this step runs. 1159Note that the slab allocator allocates ops downwards in memory, so one would 1160have to actually "allocate" the ops in reverse-execution order to get them 1161contiguous in memory in execution order. 1162 1163See http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131975.html 1164 1165Note that running this copy, and then freeing all the old location ops would 1166cause their slabs to be freed, which would eliminate possible memory wastage if 1167the previous suggestion is implemented, and we swap slabs more frequently. 1168 1169=head2 eliminate incorrect line numbers in warnings 1170 1171This code 1172 1173 use warnings; 1174 my $undef; 1175 1176 if ($undef == 3) { 1177 } elsif ($undef == 0) { 1178 } 1179 1180used to produce this output: 1181 1182 Use of uninitialized value in numeric eq (==) at wrong.pl line 4. 1183 Use of uninitialized value in numeric eq (==) at wrong.pl line 4. 1184 1185where the line of the second warning was misreported - it should be line 5. 1186Rafael fixed this - the problem arose because there was no nextstate OP 1187between the execution of the C<if> and the C<elsif>, hence C<PL_curcop> still 1188reports that the currently executing line is line 4. The solution was to inject 1189a nextstate OPs for each C<elsif>, although it turned out that the nextstate 1190OP needed to be a nulled OP, rather than a live nextstate OP, else other line 1191numbers became misreported. (Jenga!) 1192 1193The problem is more general than C<elsif> (although the C<elsif> case is the 1194most common and the most confusing). Ideally this code 1195 1196 use warnings; 1197 my $undef; 1198 1199 my $a = $undef + 1; 1200 my $b 1201 = $undef 1202 + 1; 1203 1204would produce this output 1205 1206 Use of uninitialized value $undef in addition (+) at wrong.pl line 4. 1207 Use of uninitialized value $undef in addition (+) at wrong.pl line 7. 1208 1209(rather than lines 4 and 5), but this would seem to require every OP to carry 1210(at least) line number information. 1211 1212What might work is to have an optional line number in memory just before the 1213BASEOP structure, with a flag bit in the op to say whether it's present. 1214Initially during compile every OP would carry its line number. Then add a late 1215pass to the optimiser (potentially combined with L</repack the optree>) which 1216looks at the two ops on every edge of the graph of the execution path. If 1217the line number changes, flags the destination OP with this information. 1218Once all paths are traced, replace every op with the flag with a 1219nextstate-light op (that just updates C<PL_curcop>), which in turn then passes 1220control on to the true op. All ops would then be replaced by variants that 1221do not store the line number. (Which, logically, why it would work best in 1222conjunction with L</repack the optree>, as that is already copying/reallocating 1223all the OPs) 1224 1225(Although I should note that we're not certain that doing this for the general 1226case is worth it) 1227 1228=head2 optimize tail-calls 1229 1230Tail-calls present an opportunity for broadly applicable optimization; 1231anywhere that C<< return foo(...) >> is called, the outer return can 1232be replaced by a goto, and foo will return directly to the outer 1233caller, saving (conservatively) 25% of perl's call&return cost, which 1234is relatively higher than in C. The scheme language is known to do 1235this heavily. B::Concise provides good insight into where this 1236optimization is possible, ie anywhere entersub,leavesub op-sequence 1237occurs. 1238 1239 perl -MO=Concise,-exec,a,b,-main -e 'sub a{ 1 }; sub b {a()}; b(2)' 1240 1241Bottom line on this is probably a new pp_tailcall function which 1242combines the code in pp_entersub, pp_leavesub. This should probably 1243be done 1st in XS, and using B::Generate to patch the new OP into the 1244optrees. 1245 1246=head1 Big projects 1247 1248Tasks that will get your name mentioned in the description of the "Highlights 1249of 5.12" 1250 1251=head2 make ithreads more robust 1252 1253Generally make ithreads more robust. See also L</iCOW> 1254 1255This task is incremental - even a little bit of work on it will help, and 1256will be greatly appreciated. 1257 1258One bit would be to write the missing code in sv.c:Perl_dirp_dup. 1259 1260Fix Perl_sv_dup, et al so that threads can return objects. 1261 1262=head2 iCOW 1263 1264Sarathy and Arthur have a proposal for an improved Copy On Write which 1265specifically will be able to COW new ithreads. If this can be implemented 1266it would be a good thing. 1267 1268=head2 (?{...}) closures in regexps 1269 1270Fix (or rewrite) the implementation of the C</(?{...})/> closures. 1271 1272=head2 A re-entrant regexp engine 1273 1274This will allow the use of a regex from inside (?{ }), (??{ }) and 1275(?(?{ })|) constructs. 1276 1277=head2 Add class set operations to regexp engine 1278 1279Apparently these are quite useful. Anyway, Jeffery Friedl wants them. 1280 1281demerphq has this on his todo list, but right at the bottom. 1282 1283 1284=head1 Tasks for microperl 1285 1286 1287[ Each and every one of these may be obsolete, but they were listed 1288 in the old Todo.micro file] 1289 1290 1291=head2 make creating uconfig.sh automatic 1292 1293=head2 make creating Makefile.micro automatic 1294 1295=head2 do away with fork/exec/wait? 1296 1297(system, popen should be enough?) 1298 1299=head2 some of the uconfig.sh really needs to be probed (using cc) in buildtime: 1300 1301(uConfigure? :-) native datatype widths and endianness come to mind 1302 1303