"Improve Perl 5" status report
- 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
- 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
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
- 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.