This Week on perl5-porters - 2-8 October 2006
Topics of Interest
"I do not know what crazy things people have done in code I cannot
see. But people are creative in strange ways, and I cause them enough
trouble already by incorporating changes with unintended behaviour
changes." -- Nicholas Clark, on why it pays to be cautious.
Outdated modules in blead
Andreas König noted that there were eight modules in blead that had
more recent counterparts on CPAN, mentioning that one of them,
"Text::Soundex", was intentionally neglected.
The reason for the neglect is that nobody cares about it any more, but
since it is in core, it cannot be removed. Those people who do need it
know enough to go to their local CPAN mirror and pick up the speedier
XS-based version. H.Merijn Brand thought that some effort should
nonetheless be made to keep "blead" and CPAN synchronised.
Steve Peters brought the most of listed modules up to date.
http://xrl.us/r7u3
Upgrade (or not) to threads-shared 1.03
Dave Mitchell went ballistic over the application of this patch, due
to its gratuitous whitespace changes, as this makes it harder to see
what the the true changes are. Similarly, people chasing down bugs in
the future will stumble each time they have to traverse it.
Stop fiddling with the bloody whitespace
http://xrl.us/r7u4
Overloading thread stringification
Jerry D. Hedden asked what the porters thought of overloading "" in
the "threads" module to return the thread identifier, since it would
make some constructs prettier.
John Peacock and Nicholas Clark didn't like the idea, as it seem to
admit the possibility of breaking programs that relied on the existing
behaviour (getting back a string like "threads=SCALAR(0x209e270c)").
Jerry, still not quite getting it, asked if that meant that the
possibility of incompatibility ruled out any chance of improvement. So
he floated the idea of an addition on the CPAN module that would never
be backported to "maint", but that would be akin to a code fork.
Gisle Aas disliked it as well. He had been down this track many years
ago, and has since come to the conclusion that this sort of "feature"
eventually winds up causing more problems that the ones it was
supposed to solve.
Johnathon Stowe summed up the problem neatly, and it is this: no one
can guarantee that there is no code anywhere that does something like
if ("$thread" =~ /^threads/)
regardless of whether this is a desirable way to test for an object
being a thread. With that in mind (and this is really what the
backwards compatibility game is all about), there was little chance
that the patch would be applied. Since behaviour is being changed,
regardless of what merit or value it has, new behaviour can only be
activated by asking for it.
http://xrl.us/r7u5
Despite the arguments against the proposal, Jerry went ahead and made
the change. Rafaël declined to integrate it into "blead". Jerry
finally admitted defeat, and said he'd add an "import()" verb to
activate the change.
http://xrl.us/r7u6
Which in fact, he did. Applied as change #28958.
And they all lived happily ever after, kthnx
http://xrl.us/r7u7
"regmatch()" restructuring complete
Dave "Leakbane" Mitchell announced that his restructuring work on
"regmatch()" was now complete. Now no more recursion fakery is needed,
all backtracking is now done via a single backtracking state stack.
Dave was quite pleased to see that the amount of state required had
been shrunk from 72 bytes down to 44 bytes (on 32-bit systems).
Dave posted the large comment that explains the matching strategy for
we other mere mortals to ponder. Yves Orton was pleased as Punch,
since he realised this would simplify the things he wants to
implement.
Affairs of state
http://xrl.us/r7u8
patch 28900 breaks libwww
Andreas König noticed that change #28900 causes "HTTP::Daemon" to
fail, specifically, a slice of "stat _" gets garbled.
The odd thing was that change #28900 was one of Yves's patches for the
regular expression engine. Neither Yves nor Rafaël Garcia-Suarez could
figure out why that would be, but Andreas was certain, postulating
some weird side-effect.
It turns out to be a poor assumption in the "HTTP::Daemon" code, which
assumed that "_" (the underscore filehandle) is lexically scoped
(which in fact, it never was). So if you call a subroutine and then
access it afterwards, it's possible that the subroutine will have used
it for its own purpose. And that's exactly what happened here.
Yves was relieved, but thought about what he could do to minimise the
impact in the future.
Action at a distance
http://xrl.us/r7u9
Locale-dependent testing
John Peacock reported having worked on "version" objects in the
presence of locales, where commas may be used for decimal points
instead of the anglo-saxon period. The code was easy, (since Rafaël
had done most of the heavy lifting), but John was wondering how to
test it. He asked for a show of hands (off-list) to see who had the
'de_DE' locale present on their machine.
H.Merijn Brand noted that he tended to delete all non-crucial locales
from his machines, since localised software tended to enjoy installing
their documentation in all the locales on the machine for which it had
a corresponding version. This can lead to rampant disk space
consumption, and even require reboots, should the software in question
be kernel-related.
Jarkko Hietaniemi suggested setting up a list of all the locales in
the world that used non-period decimal points, and iterating over them
until one pops up on the machine running the tests. John already had
similar code that does this, so he promised to whip up a development
version of "version", and get people to smoke it for a while and see
what comes out.
http://xrl.us/r7va
"Data::Dumper" might be faster now
Nicholas Clark tweaked "Data::Dumper" slightly to reduce the amount of
"realloc()"s being performed. The results were quite surprising. Andy
Lester acquired the necessary commit bits to update the CPAN version.
Dumpin' goodness
http://xrl.us/r7vb
Patches of Interest
cflags.SH: rethink of the gcc "-std=c89" and "-pedantic"
Jarkko and H.Merijn continued to work on this, getting to the stage
where it was good enough to be applied.
http://xrl.us/r7vc
Named captures in regular expressions
Yves Orton delivered a first cut at implementing named captures in
Perl. This allows the following:
'falange' =~ /(?<end>....$/ and print $+{end} # prints "ange"
This comes in very handy when you have lots of nested capturing
groups, since you no longer have to count parentheses, nor do you have
to renumber your $1, $2, $3, ... when you insert a new capturing group
somewhere in the middle.
H.Merijn Brand thought that this was so cool that it was nearly enough
all by itself as being sufficient reason to upgrade Perl.
The thread became sidetracked into improvements for Johan Vroman's
"makepatch" program. After a number of suggestions from Yves and Dr.
Ruud, Johan promised to release a new version.
http://xrl.us/r7vd
Yves merged his and Dr. Ruud's patch into a single metapatch for
"makepatch".
http://xrl.us/r7ve
Watching the smoke signals
Smoke [5.9.4] 28908 FAIL(XF) linux 2.6.17-1.2187_FC5 [fedora] (i686/1 cpu)
Steve Peters smoked a build with a recent gcc compiler and gouts of
oily black smoke poured out of the vents. Jarkko interpreted this as
meaning the gcc has become more aggressive in its ANSI conformance
checks. That's the good news. The bad news is that the code base uses
the non-ANSI "long long" datatype, for 64 bits of goodness. Jarkko was
hoping that there was some way to placate gcc over this minor
transgression.
Maybe if we slaughtered a chicken
http://xrl.us/r7vf
New and old bugs from RT
perl v5.7.0 +DEVEL8481 on i86pc-solaris-64int 2.9 (#5281)
Steve Peters reasoned that this bug had been fixed, but looking
through the patches, could not determine which one was responsible.
http://xrl.us/r7vg
"read", "fork" and "exit" mismatch file positions (#5999)
The Solaris man page says it all: if you do I/O in a child process
with the file descriptors inherited from the parent, you have to be
very careful how the child exits, otherwise strange surprises await
you.
Aaron Sherman wondered if there was a way of squirrelling the
necessary information away somewhere, so that the child would do the
right thing in this event. Steve Peters cautioned that no one had sat
down and worked through all the delicate intricacies of fork-related
issues, especially when one considers threads at the same time.
http://xrl.us/r7vh
fairly large regex optimization bug with 5.7.3 (#8835)
Steve then returned to a regexp bug filed by Jeffrey Friedl, no less,
and noted that the poor observed performance had been corrected due to
Yves Orton's trie work.
Yves noted that this was indeed the case, yet Jeffrey's analysis of
the problem was indeed correct. There are a number of ways in which an
alternation can be dealt with by the engine, and these work more or
less efficiently depending on the pattern and the target (a bit like
an SQL query planner). It turns out that when non-capturing
parentheses "(?:...)" were added to the engine, the optimiser started
making bad decisions, such as the one noted by Jeffrey.
At first, Yves couldn't see an easy way to make this work without
introducing additional overhead. Hugo van der Sanden thought that it
might be worth examining end anchors and finite maximum match widths
as well. He thought that a number of anchor-related optimisations have
broken since the "\A", "\Z" and "\z" anchors were introduced, and by
the same token that other new optimisations are now possible.
Yves then discovered an cheap, fast, reliable fix to solve the
problem.
Pick all three
http://xrl.us/r7vi
"File::Find" has issues with symlinks (#40417)
Rafaël tried out the supplied patch for this problem, but noted that
it broke three tests in "blead"'s regression tests. He asked for an
updated patch (with more tests) to take this into account.
http://xrl.us/r7vj
Halting perl with control-C sometimes causes crash on windows (#40445)
Alex Davies filed a bug on the problem of Control-C causing core dumps
on Windows. No takers for the moment, but Yves Orton mentioned this
behaviour recently.
http://xrl.us/r7vk
Possible pointer corruption? (#40450)
Benjamin Carter showed how a small script with "redo", "eval" and @_
would crash regularly. Dave Mitchell believes the underlying problem
was fixed by change #24384.
next and redo didn't restore PL_curcop
http://xrl.us/r7vm
Installation of perl 5.8.8 on Linux RH 9 (#40453)
Tasnim was running into problems building perl. Andy Dougherty
suspected that there might be a problem with the config.sh file, and
suggested that Tasnim delete the source tree and start afresh.
http://xrl.us/r7vn
Tasnim followed up with another bug report (#40454), but the porters
didn't hear back from him after their suggestions were given
So maybe it works
http://xrl.us/r7vo
Memory leak with "MULTICALL" (#40469)
Tassilo von Parseval found a memory leak, and thought that "MULTICALL"
was responsible. No takers.
http://xrl.us/r7vp
"glob" misbehaviour regarding special characters and spaces (#40470)
David Serrano found what he thought was a problem in "glob" when files
or directories contain spaces. No takers, possibly because everyone
hates files and directories that contain spaces.
Curse those Redmond boys
http://xrl.us/r7vq
Perl5 Bug Summary
8 more this week
http://xrl.us/r7vr
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
In Brief
Terry Glanfield demonstrated a nifty bug in "Storable" to show that
"Storable::freeze([$r, $r])" doesn't work. Adam Kennedy asked him to
open a ticket on "Storable"'s CPAN RT queue.
http://xrl.us/r7vs
Steve Hay noticed that "threads" tests were hanging in Win32 smokes
again, and wondered if changes #28922 and #28923 had anything to do
with it.
http://xrl.us/r7vt
Dave Mitchell explained to Dave Rolsky that the 5.8 code for closures
has a number of subtle bugs, and will probably always remain that way.
But wait until 5.10
http://xrl.us/r7vu
Paul Green updated the Stratus VOS files.
http://xrl.us/r7vv
Now that it has been ANSIfied, the "zlib" library can be build with
"g++".
http://xrl.us/r7vw
Alan Olsen pointed to a couple of threads on Perl Monks that dealt
with "Exporter" problems, suggesting that the problems raised there,
and the attendant solutions, should be included on the "Exporter"
documentation.
http://xrl.us/r7vx
Paul Marquess added some C++ goodness to "List::Util".
http://xrl.us/r7vy
And Jarkko continued his own peculiar brand of compiler gymnastics.
http://xrl.us/r7vz
The One Laptop Per Child project no longer requires Perl. When you
only have 500Mb of Flash memory to play with...
... every byte counts
http://xrl.us/r7v2
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