This Week on perl5-porters - 22-28 May 2006
This isn't supposed to happen, obviously. It's unusual for "Configure"
to pick up libraries that it can't, in fact, use. -- Andy Dougherty,
commenting bug #39195
Topics of Interest
"Scalar::Util::weaken", to have or have not
There was further discussion of the XS version of "Scalar::Util" and
the fact that it offers a "weaken" function which is vital to avoid
resource leaks when freeing self-referential structures.
(Specifically, it offers a method from Perl-space to intervene
directly on the underlying mechanism used for managing garbage
collection).
There were five philosophers at a table
http://xrl.us/mxwq
Adam Kennedy proposed "Task::Weaken" as an elegant way (insofar as a
wart may be considered elegant) of dealing with the problem of trying
to create a dependency on the particular "Scalar::Util" version that
happens to contain the "weaken" routine.
Not the other one
http://xrl.us/mxwr
Following up on thread safety issues and opcode hints
Last month, Nicholas Clark discovered some obscure bugs that could
lead to race problems, with critical memory accesses not protected by
mutexes, or memory allocations going astray. He managed to sort out a
number of problems, and reported that there were a number of issues
that would need to be addressed.
The fearsome five
http://xrl.us/mxws
Regular expression engine improvements
Yves Orton ran a post-mortem on his recent work to convert "/[c]/" to
"/c/", and realised that a lot of the difficulty can be traced back to
the memory allocation strategy used. By its very nature, the strategy
rules out a number of interesting optimisation possibilities, because
a regexp is built with a two-pass compilation, and during the second
pass, too much information has already been discarded, so at that
point it is already too late to be able to consider a certain number
of transforms.
Save more information up front, and then you stand a better chance of
being able to apply some useful optimisations to the resulting
opcodes. Hugo van der Sanden wondered whether it would be possible to
produce an opcode stream that would be amenable to processing by the
existing peephole optimiser.
Yves wanted to push a lot of the smarts from "study_chunk" and
"regtail" into the parse phase. And wrapped up with a patch to tidy
the debug output somewhat, and improve the trie code.
Gentlemen, study your engine
http://xrl.us/mxwt
Andy Lester wanted to add some consting goodness to regcomp.c and
regexec.c, which would have caused Yves considerable pain, since he
was in the middle of some deep core hackery, and didn't want to face
the nightmare of a three-way diff.
Not now
http://xrl.us/mxwu
After that, Yves delivered a verily impressive patch of new, shiny
goodness to the regexp engine. And if that wasn't enough, he also took
Andy's own consting work and folded that in as well. After a bit of
adjustment due to other patches going into "blead" at the same time,
Rafael managed to get everything in place and running nicely.
Right now
http://xrl.us/mxwv
A tutorial on Unicode
Juerd Waalboer wrote a very nice tutorial to help people get started
with Unicode. A number of people contributed ideas and suggestions.
Juerd sifted through these and produced a second version. As we went
to press, inclusion in the core was pending.
Unicode decoded
http://xrl.us/mxww
"sprintf" and tainted format strings
Dave Mitchell revisited the "sprintf('%n')" issue that made the
headlines back in December, and thought that it might be wise to apply
taint checks to the format string (the first argument to "sprintf",
proposed a relaxed or strict interpretation to what tainting would
imply and asked for opinions on the matter.
Andy Lester favoured the strict approach (*any* use of a tainted
format string fails), but recalled that the idea had been dismissed
rapidly when put forward during the previous discussions. Steve Peters
thought that it was more a case of being set aside than anything else,
and expressed surprise at the fact that format strings do not already
have taint checking.
Rick Delaney wondered what exactly did Steve and Dave mean, and put
forward a couple of snippets to see if he understood the issues.
Just when you thought it was safe
http://xrl.us/mxwx
Shooting yourself in the foot with overloading
Jarkko Hietaniemi was led astray by a somewhat unhelpful "Use of
uninitialized value in hash element" warning caused by overloading,
and wondered if a better message could be generated if overloading was
involved.
While not directly answering Jarkko's question, Joshua ben Jore
mentioned that even more overloading fun can be had when using
"Devel::Cover", since applying "defined" to an object will trigger
stringification there, but not during normal execution. Paul Johnson
was most surprised to hear this, and asked for a test case. David
Landgren provided a small example that exposes the problem.
Yves Orton confirmed that he had run into this problem when developing
"Data::Dump::Streamer", and had had to jump through considerable hoops
to work around it.
Gun, meet foot
http://xrl.us/mxwy
Patches of Interest
Test infrastructure improvements
Yves Orton noticed a problem due a recent tweak to "Test::Harness",
and fixed it so as to stop harness from printing the summary table
header for each row. Which does, it should be agreed, get tedious
after a while.
No more excessive scrolling
http://xrl.us/mxwz
At about the same, Andy Lester changed "t/TEST" to queue up the names
of the tests that fail, to dump them at the end of the run. This means
one gets all the failing tests in one convenient chunk.
No more scrolling back
http://xrl.us/mxw2
More goodness from Andy
In his ongoing quest to const, Andy Lester sent in some refactoring
for av.c, which crushed some incorrect uses of "SvREFCNT_inc", removed
unnecessary temporary variables and brought the usual suspects into
line.
http://xrl.us/mxw3
And a parameter to "Perl_magic_existspack" in mg.c that could be made
"const".
http://xrl.us/mxw4
And a similar treatment for "Perl_gv_check" in gv.c.
http://xrl.us/mxw5
"Pod::Html" should not convert "foo" to ``foo''
Gisle Aas hated this mis-feature, since most modern fonts produce a
spectacularly ugly result. After a bit of a detour into the realm of
"troff", it was decided to just use plain double-quotes instead.
http://xrl.us/mxw6
Relaxing the tests in Dynaloader.t
Jarkko found that Sébastien Aperghis-Tramoni's tests in Dynaloader.t
were too platform-specific to be useful. After a bit of discussion it
was decided to loosen up the test which attempted to trap the message
generated when the loading of a non-existent shared library is
attempted.
Eggs, bacon, sausage and spam
http://xrl.us/mxw7
New and old bugs from RT
Memory leak from "eval "sub { \$foo = 22 "" (#37231)
This used to leak memory (that is, trying to "eval" a broken
subroutine definition). Dave Mitchell made it leak less. And then
after sitting back and looking at his handiwork, Dave made completely
water-proof. Nicholas Clark still managed to poke a hole in it.
Unruffled, Dave countered with a King's Gambit that appeared to keep
any remaining errant allocations in cast-iron casing.
http://xrl.us/mxw8
"IPC::Open2::open2" failures (#39127)
Dave Mitchell had a look at the source code, and noted that there was
a race condition depending on whether the child dies before or after
the parent tries to write to it. Furthermore, there is no easy way to
fix the problem as is, which is why "IPC::Run" may be a better
alternative all round. Dave suggested a documentation patch to clarify
the situation.
http://xrl.us/mi7r
"IO::Socket::connect" returns wrong "errno" on timeout (#39178)
"mlelstv" showed some discrepancies in error messages depending on
whether it was the first or subsequent time that a socket connection
failed, and traced it down to a $! not being cleared before a system
call.
http://xrl.us/mxw9
Optimizer bug in "qr//" flags (#39185)
"johnpc" reported a bug in patterns using "qr//" flags. Dave Mitchell
reported that this had been fixed in "blead", but not yet backported
to the maintenance branch.
http://xrl.us/mxxa
CPAN configuration stuck at "Select your continent" (#39186)
Mark-Jason Dominus was in the middle of configuring his "CPAN" client
when things started to go horribly wrong. Andreas Koenig wanted to
have a look at Mark's MIRRORED.BY file. Mark took one look at the file
and saw that it was corrupt (well, empty), and therefore knew what to
do.
Delete and start over
http://xrl.us/mxxb
"perlfunc" on "reverse" in scalar context (#39187)
Ted Pride had never noticed that "reverse" also works on scalars:
my $rev = reverse('forward'); # $rev contains drawrof
mainly because the documentation is slightly too clever for its own
good.
http://xrl.us/mxxc
Error Report (#39195)
Sriram Madduri had configured a perl build, but at link-time the build
failed with some unknown libraries that "Configure" had specified.
Andy Dougherty spotted what he thought was the cause of the problem,
but we didn't hear back from Sriram, so we don't know if it's fixed.
http://xrl.us/mxxd
"File::BOM" hangs during test (#39211)
Redirected to the module author. "File::BOM" isn't core.
y otras chicas del montón
http://xrl.us/mxxe
Null pattern causing expected behaviour (#39212)
If it's causing the expected behaviour...
it's not a bug
http://xrl.us/mxxf
Optimiser doesn't constant fold $] or $^V (#39214)
Benjamin Smith wished that $] or $^V were constant-folded. This could
be useful, because then one could include sections of code for
specific versions of Perl that would be optimised away at compile time
if not applicable. Unfortunately, since these variables are, well,
variable, and not constant (in other words, you may assign to them),
this isn't going to work.
http://xrl.us/mxxg
"Pod::HTML" should use &entities; for quotes (#39215)
Johan Vromans thought that this would be a nice idea. Gisle Aas
explained why it might be a bad idea, and that in any event,
"Pod::HTML" had been tweaked to no longer emit the pugly `` and ''
blots.
http://xrl.us/mxxh
Compiling With "nmake" (#39226)
William C. Smith wanted to compile Perl with "nmake". Yves showed him
how to do just that.
http://xrl.us/mxxi
Perl5 Bug Summary
The previous week's bug summary, omitted from the previous summary
(oops):
7 created + 12 closed = 1507
http://xrl.us/mxxj
And this week:
8 created and 22 (!) closed = 1493
http://xrl.us/mxxk
Hey! we broke through the 1500 barrier!
Now, with added shinyness
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
* Version 0.60 of "version" had a bit of trouble settling down in
"blead", but after smoothing a few rough edges it all came
together.
http://xrl.us/mxxm
* "Test-Harness" 2.60 was released by Andy Lester.
http://xrl.us/mxxn
* "Sys-Syslog" 0.14 was released by Sébastien Aperghis-Tramoni,
featuring a number of bug fixes, and enhancements to the both the
code and test suite.
http://xrl.us/mxxp
In Brief
Marcus Holland-Moritz documented and completed a few holes in the
orthogonality of literal string macros, mainly as a service to XS
developers. Applied.
http://xrl.us/mxxq
Anno Siegel had some difficulties adding a core module because it was
building man pages when it was not supposed to. Rafael provided the
necessary "MakeMaker" magic to make it do the right thing at the right
time.
http://xrl.us/mxxs
Andy Lester's second refactoring of pp_sys.c from last week went in as
change #28279.
http://xrl.us/mrb3
Alberto Simões thought that the problem of regexp slowness with $' and
$` could be solved elegantly by making them lexical. Dave Mitchell
demonstrated why this was not possible (existing code would break).
http://xrl.us/mxxt
Torsten Foertsch wanted to know how to trap a warning generated at
global destruction time. The test infrastructure doesn't appear up to
the task, because at global destruct time, all the tests have long
since finished. chromatic recommended running the test in a child, and
examining its output.
http://xrl.us/mxxu
perlhack.pod was confused about "POPSTACK", so Dave Mitchell and Jan
Dubois tightened the documentation. Deep core hackers rejoiced.
http://xrl.us/mxxv
Dave also improved the "-Dpv" parser debugging output.
http://xrl.us/mxxw
Philip M. Gollucci was having trouble with "Perl_croak" and "nullch"
at patch level 27529.
http://xrl.us/mxxx
Jarkko noticed that there are no execute bits on semaphores on Mac
OS/X, and tweaked the documentation to clarify the situation.
http://xrl.us/mxxy
Alex Davies cooked up a patch to "shrink the object size for
pp_sys.c", but as the savings came at the cost of code legibility,
with no apparent run-time benefit, Rafael chose to decline it.
http://xrl.us/mxxz
About this summary
This summary was written by David Landgren. Yes, late enough to be
next week's summary. Sorry, this week I have been dealing with
assorted crises.
Last week's summary attracted a response from Dave Nicol, who
explained his linked list master plan in more detail.
Action stations
http://xrl.us/mxx2
If you want a bookmarklet approach to viewing bugs and change reports,
there are a couple of bookmarklets that you might find useful on my
page of Perl stuff:
http://www.landgren.net/perl/
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.
--
"It's overkill of course, but you can never have too much overkill."