Here's the latest status update for Nicholas Clark's Improve Perl 5 grant. As usual, he's gotten quite a bit done.
- Completed "Reblessing references interacts badly with overloading" For blead I've moved the flag for "overloading" from the reference to the referent, which logically is where it should always have been. This isn't binary compatible, so isn't a viable solution for 5.8.x. For that, the flag stays in the same (wrong) place, and I've added a scan routine to find all other references to the same referent and change their flags. The scan is only triggered if the overloading state changes and more than one reference exists, so is unlikely to be triggered except in the conditions where this bug was biting.
- Completed a rewrite of the UTF-8 caching code. The code itself can be disabled at runtime, in case future bugs are found in it. The cache now stores information more efficiently, and the code uses information the cache in a couple of circumstances where previously it uses a brute-force scan.
- Checked that IPv6 support in the core is complete, and that all changes made by the KAME project have not been lost. Most of the work of the KAME project has been incorporated into the Socket6 module on CPAN. The rest is in or superceded by the IO::INET6 module on CPAN.
- Investigated why the changes to $0 broke PAR, resolved the problem, and integrated them to 5.8.x
- Integrated the changes to the regexp engine code that fix bug 3038 to 5.8.x
- Wrapped constant folding in an exception handler, and if folding throws an exception (such as attempting to evaluate 0/0) abort folding and retain the current optree, rather than aborting the whole program.
- Changed Configure to allow specifying include paths relative to the perl binary. This allows a run-time relocatable perl distribution to be built for Unix. H Merijn Brand merged my changes back into the metaconfig units from which Configure is built. He reports that this was the most complex job he's had to do since he took over the metaconfig job around Perl 5.8.0, taking most of a weekend. I am most grateful to him for volunteering his time on this.
- Provided the infrastructure to implement lexical pragamas. In the end it turned out not to be possible to use Robin's existing work on %^H - instead lexical pragma state is saved in a new structure attached to the optree, and retrieved via caller.
- Converted the save_re_context() code to write a single block of data onto the save stack, rather than many small writes. I've rearranged the interpreter structure in blead so that the regular expression variables are stored in the same structure, so saves and restores are now block copies.
What's still on the to do list...
- The UTF-8 caching code is yet to be merged to 5.8.x
- The constant folding changes are yet to be merged to 5.8.x, or adapted to use the "flexible exceptions" system there.
- Merijn's merge and regeneration of Configure has broken the relocatable include code. Specifically two shell variables are not being set, and I've not yet been able to work out why. This code has not yet been merged to 5.8.x We're not sure how to handle packlists when everything is relocatable.
- I'm not confident that the lexical pragma implementation as-is is fully threadsafe, even though it passes all tests. With ithreads the optrees are shared between threads, and I think some minor changes are going to be needed to work properly as a shared structure.
- The merge-able parts of the save_re_context code is not merged to 5.8.x yet. The structure on the save stack isn't duplicated by the threads clone code yet, and there may be other things still to finish.
- The tasks relating to the @INC source filter, the pack "W" changes, magic and localisation, UTF-8 and overloaded stringification, and taint, UTF-8 and TK haven't been started yet.