This Week on perl5-porters - 9-15 October 2006
"May I remind everybody my personal opinion, which is that I see
little to null utility to style patches to C or perl code, but that
they clobber version control history, waste my time, and that in most
I cases will not apply them." -- Rafaël Garcia-Suarez, current
pumpking, on why people should not fiddle with the bloody whitespace.
Topics of Interest
Coding styles and ancient perls
Last week, Dr. Ruud and Yves Orton worked on bringing "makepatch" up
to speed on the Windows platform. For some reason it sparked a long
discussion about the merits of writing code compatible with ancient
versions of Perl and $_ topicalisation.
http://xrl.us/sm5z
5.8.8+ invalid "free()" in "Perl_do_exec3"
Alexey Tourbin spotted a problem with the current 5.8 snapshot that
doesn't show up in the 5.8.8 release. Dave Mitchell thanked him for
picking it up, and fixed it.
Alexey went on to mention that he runs a git repository that tracks
the 5.8 and 5.9 sources, and lamented that he could not quite figure
out to which change corresponded the 5.9.0 release.
ah say git down
http://xrl.us/sm52
Resolving downstream breakages from version.pm changes
Adam Kennedy uses "only.pm" to lock down the versions of modules used
in the code he delivers to clients, and noticed that "only" doesn't
work correctly with changes that have taken place since in "version",
and development on "only" appears to have dragged to a halt.
John Peacock took a look at "only"'s code, saw what was wrong with it,
and at the same time asked Adam wither "version::Limit" might do the
trick instead.
http://xrl.us/sm53
g++ compile and make test 100%
After weeks of patching and tweaking the source, Jarkko Hietaniemi
announced that he had succeeded in performing a C++ compilation of the
perl source, and a completely successful test suite run. Rafaël
Garcia-Suarez noted that "NDBM_File" still had trouble. Jarkko didn't
notice that because it wasn't configured to be built on his platform.
Robin Barker provided a patch to fix it up.
Paul Marquess, Steve Peters and Jesse Vincent reported successes with
other C++ compilers and platforms. H.Merijn Brand found a problem on
Suse Linux, as did Dominic Dunlop on Mac OS/X.
http://xrl.us/sm54
Robin's patches
http://xrl.us/sm55
http://xrl.us/sm56
http://xrl.us/sm57
The curious case of the last close parenthesis
Yves Orton surfaced briefly to discuss some oddities he had found in
the regular expression concerning how opening and closing capturing
parentheses are managed. An optimisation in the engine consists of
throwing the regop codes that denote the parentheses, and tracks them
itself... but doesn't track them all that well.
Over time, this has manifested itself through a variety of bugs, all
of which have been solved in ad hoc ways, as no one really understood
the big picture.
Yves thinks that his hypothesis is right, and wanted to know what Dave
Mitchell thought of it. Ilya Zakharevich remembered that Yves's two
variables, "PL_reglastparen" and "PL_reglastcloseparen" were once upon
a time a single variable, but were split into two, probably when
non-capturing parentheses were introduced. As such, it's quite
possible that the code was not correctly updated in all the required
places. In a patch elsewhere this week, Yves dropped some comment
markers here and there, where he thought the variables should be
updated.
http://xrl.us/sm58
Will the real "Perl_reg_named_buff_sv" please stand up?
Craig A. Berry was having trouble building the "re" extension on VMS,
since the VMS linker didn't like the fact that the
"Perl_reg_named_buff_sv" symbol was defined twice, in two different
object files.
Yves explained that one was derived from the other, in order to
generate the debugging version. His linker, being slightly more lax,
did not complain about this issue, and fixed it up in a subsequent
patch.
http://xrl.us/sm59
Status of Perl 5.10 TODO list
Yves then looked at the TODO list for 5.10 and counted four issues
outstanding. He wanted to know that their status was, and what needs
to be done. Rafaël said three of them were issues he planned to deal
with, and one was less important (lexical encoding pragmas). He also
mentioned that aliases were probably important enough to be taken on
board, as were "UNITCHECK" blocks.
Juerd was very keen to see work done on the "encoding" pragma. He as
released a work-around "encoding::split" to get things to work to his
satisfaction, but would like to see the functionality appear in the
core.
Adriano Ferreira reminded the porters of bug #38945, which notes that
"Configure" is not "x.10" version aware. Andreas König mentioned that
DBI doesn't compile on "blead" (and someone needs to open a ticket on
that).
http://xrl.us/sm6a
Philip M. Gollucci, almost left behind, pointed out that there was an
icky attribute/printf problem that needed to be sorted out as well.
http://xrl.us/sm6b
"SVpvs" vs "SVpvn"
Jim Cromie was looking through the source when he noticed that there
were a number of places where the "newSVpvn" call could be more
profitably replaced by a "newSVpvs", the reason being that this
removes the need to keep hard-coded lengths of strings lying around
(as this can allow bit-rot to creep in).
Nicholas Clark went ahead and made the change. Aaron Sherman pointed
out that the hard-coded length might be a slightly sick way of taking
a substring of a constant, such as
SV *s = newSVpvn("pear",3);
Nicholas had already looked for such cases in the code, and the only
occurrences he found were deliberate tests.
Vadim Konovalov wondered whether the real reason that hard-coded
lengths were used was to avoid possibly costly length computations.
Jim Cromie believed that this was not a problem, since the constructs
tended to be evaluated when the C source is compiled, and boil down to
a constant in the resulting object code.
http://xrl.us/sm6c
New version diagnostic breaks a bunch of modules
Michael G. Schwern wished to register his disgruntledness at the fact
that a diagnostic change caused a number of his modules
("Exporter::Lite", "UNIVERSAL::exports" and "UNIVERSAL::require" for
starters), and wondered how many other modules were in the same boat.
John Peacock was loathe to give up the more informative new error
message. He could get close to matching the old message if certain
conditions were met, but not completely. Michael remarked that
future-proofing the checking of perl error messages is hard.
Never mind localisation
http://xrl.us/sm6d
Off by one in the trie code?
Nicholas Clark wrote a psychotic regular expression to provoke a leak
that was picked up by valgrind, and he wondered if there was an
off-by-one error. Yves promised to have a look at it later.
http://xrl.us/sm6e
Patches of Interest
What Jarkko Hietaniemi did this week
Jarkko tweaked some of Yves's code to get it to compile cleanly with
the more fussy compilers that he has at his disposal.
Do not cross the initialisation boundary, do not collect $200
http://xrl.us/sm6f
Jarkko transformed "Digest::SHA" from K&R C to ANSI, and described the
delicate footwork required to ensure that "blead" and CPAN play nicely
together.
Mark Shelor, "Digest::SHA"'s author, thanked Jarkko for the patch, and
planned to integrate it for the upcoming 5.44 release, so with luck no
one will have to take extra care for very long.
http://xrl.us/sm6g
Jarkko performed similar tweaks for Encode.xs, with a eye on C++.
http://xrl.us/sm6h
http://xrl.us/sm6i
He then gave a few hints to Linux and Solaris to tell C++ how to deal
with "dlerror", noting that if a third platform needs this trickery
then it will be time to push it off into "Configure".
http://xrl.us/sm6j
Moving on through the modules, he then performed a classy act on
"ExtUtils::ParseXS".
http://xrl.us/sm6k
And then ANSIfied the "Text::Soundex" module.
A530 T500 A521 T000 T232 M340
http://xrl.us/sm6m
And an "EXTERN_C" wrapper for something in "re.pm"
http://xrl.us/sm6n
What Yves Orton did to the regular expression engine this week
Yves Orton, the unstoppable feature-adder to the regular expression
engine, added named recursion this week, whereby "<(?&NAME)>" recurses
to the capture buffer defined by "(?<NAME>...)".
No, my brane hurts
http://xrl.us/sm6o
He landed another patch to fix bugs, test code and add more
functionality to deal with conditionals in regular expressions.
http://xrl.us/sm6p
He then added even more documentation, of note is an update to
perlreguts.
http://xrl.us/sm6q
And last but not least, Yves announced that he had added possessive
quantifiers to the engine. He also put floated the idea of removing
the dire warnings about the experimental status of the existing
extensions, since they have been around for a long time and have been
well documented and well explored by large numbers of people.
http://xrl.us/sm6r
Sadahiro-san delivered a patch to remove "leaveit" from
toke.c:scan_const, which deals with escaped characters in patterns.
There were a number of short-comings with the current code, not to
mention breakage. Now it's better.
http://xrl.us/sm6s
New and old bugs from RT
"sprintf" width+precision fails on wide chars (#40473)
Anatoly Vorobey found a bug in the way "sprintf" handles UTF-8
characters and supplied a patch against "blead" to correct it. Applied
by Rafaël.
Why aren't all bug reports like this?
http://xrl.us/sm6t
Regular expression recursion (#40495)
Matthias Urlichs demonstrated a bug in the regular expression engine.
It failed with "x{2}" but went away when replaced by "xx". Dave
Mitchell explained that sometimes the optimiser fails to recognise
such transforms. In any event, with the latest work to the engine in
"blead", the offending pattern works just fine.
Even if it does consume quite a bit of memory
http://xrl.us/sm6u
"Can't locate Foo/Bar.pm" isn't a helpful message (#40516)
Tina thought that this message exposed too much of how things are
implemented, and a beginner might not necessarily realise that there
was a problem loading the "Foo::Bar" module. She thought that adding a
"perhaps Foo::Bar is not installed" to the end of the message would
help improve matters.
Juerd wondered whether this would encourage newbies to hunt down the
Foo/Bar.pm file and dump it in an @INC directory. People already tend
to do this, which leads to problems when modules have XS components
and the result is traffic on mailing lists and other fora.
http://xrl.us/sm6v
Perl5 Bug Summary
1525, bugometric pressure steady
http://xrl.us/sm6w
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
* "version" 0.67_03 from John Peacock,
http://xrl.us/sm6x
* "ExtUtils::MakeMaker" 6.31 from Michael G. Schwern,
http://xrl.us/sm6y
* "CPANPLUS" 0.076 (although not part of core) from Jos I. Boumans,
http://xrl.us/sm6z
* and "XSLoader" 0.07 from Sébastien Aperghis-Tramoni.
http://xrl.us/sm62
In Brief
Tels made a few suggestions about the code in "makepatch" that
received a work-over last week.
http://xrl.us/sm63
Dave Nicol suggested that the source code be formatted according to a
fixed set of rules.
http://xrl.us/sm64
Johan Vromans looked at "Carp::Clan" and thought that its
functionality was so useful that it should be subsumed into the core
"Carp" module, arguing that it is better to extend an existing module
than to introduce a new one that duplicates a lot of the functionality
of the previous one.
http://xrl.us/sm65
Gabor Szabo asked about running "Devel::Cover" on core modules in
blead and Paul Johnson set him straight.
http://xrl.us/sm66
Andreas König found that "change #28976 breaks YAML", but Rafaël was
unable to reproduce the problem. Andreas later discovered that #28997
resolved the problem in any event.
http://xrl.us/sm67
Similarly, David Landgren compiled Template Toolkit on a recent build
of "blead" (change #28998) and watched in blow up. Rafaël noted that
the code in "Template.xs" relied on a macro producing a parenthesised
result, which was used directly in a C "switch" statement, and at some
point the "blead" version of the macro lost the parenthesis wrapper.
So "Template.xs" needs to add in the parentheses itself.
relying on the core to do it for you
http://xrl.us/sm68
Jerry D. Hedden raised "threads" to version 1.44, and
"threads::shared" to version 1.04.
http://xrl.us/sm69
http://xrl.us/sm7a
Juerd Waalboer wondered if he had hit a "B::Deparse" bug, since a
nested hashref/listref structure deparses into a different structure
that in turn deparses to something else...
... and so on to viscosity
http://xrl.us/sm7b
Yves shed some light on why he chose "\k<...>" over C<\k{...}> for
named captures in regular expressions.
Because
http://xrl.us/sm7c
Jos I. Boumans proposed adding "Log::Message" and
"Log::Message::Simple" to the core.
http://xrl.us/sm7d
Mark J. Reed sought more information on the way "File::Find" orders
directories and files, since he could not see a way to process
directories first and then files.
lots of "HACK:" comments
http://xrl.us/sm7e
Jim Cromie wanted to know how does "Configure -O" work.
delete config.sh and Policy.sh beforehand
http://xrl.us/sm7f
Leopold Tötsch was encountering some ambiguous behaviour with
"sprintf" and wondered who was right. Sadahiro Tomoyuki straightened
it out with a sharp patch to the right.
http://xrl.us/sm7g
About this summary
This summary was written by David Landgren.
Weekly summaries are published on http://use.perl.org/ and posted on a
mailing list, (subscription: [EMAIL PROTECTED]). The
archive is at http://dev.perl.org/perl5/list-summaries/. Corrections
and comments are welcome.
If you found this summary useful, please consider contributing to the
Perl Foundation to help support the development of Perl.
--
Much of the propaganda that passes for news in our own society is given
to immobilising and pacifying people and diverting them from the idea
that they can confront power. -- John Pilger