This Fortnight on perl5-porters - 3-16 April 2006
The porters concentrate on the Coverity reports, cleaning up a
collection of crazy, curious and crufty code constructs.
Topics of Interest
Even more recursion removed from the regex engine
Dave Mitchell continued his quest to improve the regexp engine. In
this batch of changes, he used slab allocations to deal with the
hassle of saving the context required for dealing with backtracking.
With a couple of other improvements, the performance is now back to
where it was when the engine used a recursive approach, so the
efficiency is the same now as it was then. More importantly, he also
removed the final recursion path triggered by "(??(..code..})"
assertions. This opens the way to a number of other improvements.
The only downside is that at the moment it looks like the changes are
so extensive that it is unlikely to be backported to "maint".
Watch this space
http://xrl.us/kw8f
Andy Lester later scavenged a bit of unused code in regexec.c, which
made Dave realise that the code was only unused because he had
accidentally deleted some other code that referred to it. So he
reverted Andy's change and restored the code he had removed.
Whatever gets you there
http://xrl.us/kw8g
Empty keys in %Config
Brendan O'Dea forwarded a wacky bug from Debian, in that %Config has
some place-holders for paths to programs like tail(1) or sendmail(1),
but Configure never probes for them, so they are left empty. One would
have to run something like
Configure -Dtail=/usr/local/bin/tail
and then write code like
my $tail = $Config{tail} || '/usr/bin/tail';
in order to make any use of it, and thus wanted to know what the idea
was. Despite his best "Configure"-fu, H.Merijn Brand was at a loss to
explain why these (but not all) values were empty, because it was set
up to in fact probe for them.
Andy Dougherty provided the missing pieces of the puzzle, which was
sufficient for H.Merijn to figure out what was happening, and how to
fix it.
H.Merijn gets some more -fu
http://xrl.us/kw8h
Some time prior to the above thread, H.Merijn made a plea to get
people to test "Configure", as it has received a good working over
recently, and some things may have been broken in the process.
Test this
http://xrl.us/kw8i
Coverity defect scan of Perl
A while back, Coverity announced that it had applied its source code
analysis tool to a number of high-profile open source projects. At the
outset, Perl had a very favourable ratio of defects to lines of source
code.
Nicholas Clark noted with dismay that a number of other projects (PHP,
PostgreSQL and Samba) had since addressed every single reported
defect, thereby pushing Perl to the back of the pack. Benjamin Holzman
and Andy Dougherty went looking to see what they could do.
"Issue" is probably more accurate than "defect"
http://xrl.us/kw8j
The current state of play
http://scan.coverity.com/
Acting upon the Coverity findings
Andy Lester started working through the warnings produced by the
Coverity source code analysis tool. The first thing he dealt with was
some dubious "#ifdef"s dealing with "SOCKS5"-specific code,
Clean socks
http://xrl.us/kw8k
and tightened up some code in pp.c that should be clearer to both
humans and source code analysis tools,
Everyone's a winner
http://xrl.us/kw8m
and tidied up some code in pp.c that, while not officially *wrong*,
was certainly of dubious merit.
Barely legal
http://xrl.us/kw8n
Jarkko fixed locale.c,
http://xrl.us/kw8o
and since he enjoyed it so much, he did it again,
http://xrl.us/kw8p
and then examined another issue that arose when you set "$/ = \0", and
documented that as well,
One less undocumented feature
http://xrl.us/kw8q
and continued by adding "NULL" guards to calls to "IoIFP" in pp_sys.c,
http://xrl.us/kw8r
not to mention a similar problem concerning formats, also in pp_sys.c,
Little wonder this was never encountered
http://xrl.us/kw8s
and added an "assert" in perlio.c, which should be sufficient for
Coverity to understand what is going on. Alas, Nicholas noted that it
doesn't appear to believe perl's special home-grown "assert". So
Jarkko added a comment that should be understandable by a human (and
tough beans for Coverity),
http://xrl.us/kw8t
Andy then guarded a pointer dereference, by ensuring that it points to
something useful (that is, something other than "NULL") in regcomp.c,
http://xrl.us/kw8u
attempted to indicate that "listsv" is never "NULL", elsewhere in the
same file,
http://xrl.us/kw8v
but amended it following a suggestion by Nicholas.
http://xrl.us/kw8w
In regexec.c, Jarkko moved a "NULL" check in the hope that it would
allow Coverity to make better sense of the code,
http://xrl.us/kw8x
but that appeared insufficient, and so he hoisted the check even
further up in the routine, blowing away Andy's delicate "const"ing
work in the process,
Real Men don't use const
http://xrl.us/kw8y
and added another "NULL" check. Dave Mitchell thought that this was
slightly pointless, for if the variable in question really was "NULL"
at that time, then the pattern was in such trouble that stopping to
check whether the variable contains "NULL" is just rearranging the
deck-chairs.
http://xrl.us/kw8z
Jarkko then plugged up a leaking file handle in
ext/XS/Typemap/Typemap.xs. Unfortunately, the obvious one line fix was
also incredibly wrong, causing bad things to happen, which left Jarkko
and Nicholas scratching their heads.
Tim Jenness recalled that there was a discussion on this issue a few
years back, and the gist of the problem is that when a handle is
created in XS, the core takes over and claims the responsibility of of
closing it for you. A mechanism to prevent this delegation from
occurring is available for XS authors who need it, but it is not ideal
in the general case, as it prevents useful DWIMmery from taking place,
such as (surprise!) closing the file.
Too clever, or not clever enough
http://xrl.us/kw82
Jarkko carried on and clarified a pointer aliasing issue, by removing
a temporary alias hanging around in perlio.c,
http://xrl.us/kw83
and another temporary in the same file that caused Coverity to think
there was a resource leak.
http://xrl.us/kw84
and yet another problem of allocated but unused memory, also in
perlio.c. This time Jarkko tried to edit the diff after generation,
but was caught out by Coverit^WNicholas, who applied the change that
Jarkko meant to make in the first place.
http://xrl.us/kw84
Coverity fussed over a section of code in doop.c that in fact only
scratched the surface of the main problem. Jarkko added a slew of
tests to bop.t and fixed the real problem in the code.
http://xrl.us/kw85
Yitzchak Scott-Thoennes followed up on ext/Filter/Util/Call/Call.c
where calling "filter_read(-1)" would indeed produce spectacular
badness. The solution probably lies in removing the signedness from
the variable used, but in any event, some sort of sanity checking
should be added.
http://xrl.us/kw86
Yitzchak also found a problem with "NULL" in ext/Socket/Socket.c, and
wondered whether the code was over-engineered, and chopping out a
conditional would improve matters. Again, a defensive approach to bad
data will be required.
http://xrl.us/kw87
Yitzchak also prodded Nicholas into making a change to clear up an
issue in ext/IO/IO.c. While it appears out that many of these issues
are in fact "Can't Happen" problems from within perl, since they are
guarded against elsewhere, it may wind up helping the development of
XS modules, since garbage values may be caught earlier, rather than a
core dump 20000 statements later on.
http://xrl.us/kw88
Benjamin Holzman came back with a fix for what is probably a "Can't
Happen" bug in "Storable",
http://xrl.us/kw8n
and another safety check in pp_sys.c that could only be triggered by
XS code going out to lunch.
http://xrl.us/kw89
Andy Dougherty looked at toke.c and found that Coverity incorrectly
flagged some code in a loop as dead when in fact it could be reached
the second time around. He therefore wanted to add a Coverity-friendly
message to signal that it was legitimately "ENOTABUG" so that Coverity
would not count it as a defect in the following round.
Two possibilities are available, either a C comment that adheres to a
specific format à la "lint", or adding an entry to their on-line
database.
He wondered whether, as a matter of policy, the comment should appear
in the source (thus making a visible reference to what is, at the end
of the day, a commercial product, and therefore giving them a
sprinkling of mindshare), or just using the database. He favoured the
comment approach.
Andy Lester voted against the idea, arguing that tools come and go,
but comments tend to remain (and worse, drift out of date). John
Peacock voted for, arguing that if Coverity were to disappear
tomorrow, we could always "grep" the codebase to strip them out.
Hugo van der Sanden remarked that he had regularly spent time chasing
through the source to determine whether a possible path between two
points of code existed, and thought that Coverity was probably unable
to perform the required gymnastics to arrive at a similar conclusion.
Be that as it may, an occasional comment in the source, explaining
these matters to future porters, would not go amiss. If Coverity can't
figure it out, that's their problem.
Adam Kennedy was against the comment idea too, offering the hypothesis
of what was not a bug initially, becoming a real bug in six months
time due to an innocuous change elsewhere, but the report being
suppressed due to the initial Coverity comment. This reminds me of
advice from Klortho, #11922: You don't suppress error messages, you
dumbass, you PAY ATTENTION and try to understand them.
The correct use of comments
http://xrl.us/kw9a
Andy D. then found what was probably a genuine problem, at least as
far as clarity of intent is concerned, in utf8.c.
http://xrl.us/kw9b
Andy also looked at an issue in hv.c, which he traced to change #24810
made by Nicholas last year, but the simple fix would create a visible
change in behaviour from the public API, and the complex fix was too
much for him to deal with without assistance.
It turns out that Coverity was right, and Nicholas resolved it with
change #27761, adding a regression test that exercised some code which
until now had always remained unvisited by the test suite.
Bonus statement coverage improvement
http://xrl.us/kw9c
After his initial call to arms, Nicholas had a closer look at some of
the defects. One in particular caught his eye made his wonder whether
the problem was not in fact a bug in Coverity's analysis, and whether
it should be reported to Coverity. David Landgren noted that on the
"postfix-users" mailing list, Wietse Venema had announced a new
release of Postfix, that in part dealt with Coverity findings, many of
which were false positives.
Wietse's thoughts on Coverity
http://comments.gmane.org/gmane.mail.postfix.user/139710
A first cut at "state" variables
For a long time, the only technique for creating static variables in
functions à la C was to use the dubious (and now, deprecated) "my $var
if 0" construct. (The officially sanctioned approach is to use an
outer ("BEGIN" or bare) block and hoist the variable outside the
function).
This situation started to change this week, when Rafael Garcia-Suarez
landed his first draft to add "state" variable to perl. Now you can do
the following:
$ bleadperl -le 'sub f { state $x = 10; print $x++ } f; f; f'
10
11
12
This will be available via "use feature 'state'". I thought it was
nifty. A couple of people threw up their hands in horror.
In order to proceed, what is needed are more tests, and to implement
state arrays and hashes as well.
A little rough around the edges
http://xrl.us/kw9d
Underscores in version numbers
Jan Dubois kicked off an interesting thread concerning underscores in
version numbers, the problems they pose, how to work around those
problems, what happens with dual-lifed modules, the CPAN indexer and a
mythical script belonging to Randal that checks if the universe is in
sync.
I never know which version I'm going to be
http://xrl.us/kw9e
Benchmarking "perlbench"
Jim Cromie presented some benchmarks concerning his work to replace
"S_new_HE" with "Perl_new_body" and asked for some advice as to how to
proceed, and received none.
http://xrl.us/kw9f
Following on from these efforts, Jim looked at benchmarking the same
executable against itself five times. He was happy that the overall
averages all came out to 100%, but many individual tests showed
variations of up to 2%.
Jim felt that this constituted a threshold noise factor, below which
differences are worthless. Jim then wondered whether different CPUs
and platforms would have different thresholds, and whether such
information should be collected in a more systematic manner.
Benchmarking perlbench
http://xrl.us/kw9g
Doing battle with old AIX compilers
Jarkko discovered that AIX's "xlc" C compiler will do the following:
#define FOO(n) printf("n = %d\n", n)
FOO(10); # expands to "10 = 10\10"
which is, while apparently legal, also quite useless. He therefore
patched a couple of files to work around the breakage this introduces.
Lukas Mai cited the C standard, chapter and verse (ISO 9899:1999, page
152, footnote 144) that indicates that the above compiler behaviour is
indeed incorrect.
Nick Ing-Simmons said that it used to be legal, but ANSI/ISO tightened
the specification in a latter revision to the standard, and the
compiler is adhering to the previous standard. H.Merijn Brand pointed
out that other "old" compilers continue to be supported as capable of
compiler perl, and offered some insights into the issues surrounding C
compilers on AIX.
What could you do with a macro like that?
http://xrl.us/kw9h
"open(FH, ...)" in not like "open FH, (...)"
Ken Williams was trying to concoct a multi-argument open function to
avoid using backticks, and the attendant shell-quoting problems, but
was having trouble sneaking it past 5.005. It wouldn't actually have
to run on 5.005, but everything Ken tried resulted in compile-time
errors, or else if it was accepted by 5.005, it didn't do anything
useful on 5.6+.
Mike Guy offered a venerably ancient technique that would possibly
still work with punched cards, and had an added bonus of separating
out the "open" and "fork" into discrete steps, thereby permitting
fine-grained error checking.
Revise your classics
http://xrl.us/kw9i
Looking for cut-and-paste programming
Jarkko launched "cpd" (cut-and-paste-detector) at a recent copy of
"blead" to see what would happen. Andy Lester was so impressed he
wanted a Makefile "cpd" target so that he could see how it was
invoked. Jarkko deferred, saying that the tool is still a little
fragile, being unable to parse perl's source code completely. At the
moment he's working with the author to shake out the remaining bugs.
Stand back
http://xrl.us/kw9j
Andy then took the chainsaw to dump.c. which had acquired some
duplicated code in the process of incorporating Larry Wall's MAD work.
(In case I haven't mentioned it already, MAD stands for Misc Attribute
Decoration and is the process of hanging sufficient information off
the op-tree to be able to recover the source code afterwards. Up until
now, the compilation phase has simply been required to produce
bytecode for the run-time interpreter, and it's usually impossible to
figure out by inspecting the bytecode to figure out what the original
Perl source would have looked like (think: peep-hole optimisations).
Being able to go from source code to bytecode back to source code is
an important step in getting Perl 6 to run Perl 5 code).
http://xrl.us/kw9k
The first time through, the patch didn't stick, so Andy did it again.
http://xrl.us/kw9m
CPD project page
http://pmd.sourceforge.net/cpd.html
Measuring code complexity
Jarkko finished with a discussion on code complexity, noting that
Coverity gives you the McCabe Cyclomatic Complexity, the Halstead
Effort and the Halstead Error Estimate. The results of for perl seem
about right: "Perl_keyword" in toke.c is as complex as the following
thirteen most complex functions combined (featuring such family
favourites as "Perl_magic_get", "Perl_is_gv_magical" and
"S_looks_like_bool").
Yitzchak wanted to know whether macros were expanded or not in
calculating the indices, because in a codebase with such heavy uses of
macros as perl's, the differences in perceived complexity are
significant. Jarkko thought that they weren't. Anything that attempted
to resolve the macros in sv.c would blow a fuse.
Statistician's delight
http://xrl.us/kw9n
Patches of Interest
Wrapping up the "IO::Socket" tests on "Win32"
Yves Orton polished his patch to make the "IO::Socket" tests pass on
"Win32". Jim Cromie updated concise-xs.t, because the "B::Concise"
tests picked up the API changes that Yves introduced.
All sockets are go
http://xrl.us/kqp4
In another sub-thread on this topic, Nick Ing-Simmons circled back to
the problem of how to determine whether a Windows perl can "fork" or
not. The problem is one of semantics: yes, perl on Windows can "fork",
but without creating a new process, or allocating a new memory space,
so it hardly counts as a POSIX "fork", even if it looks the same at a
certain distance.
For this reason, the $Config{d_fork} should not be used on "Win32".
Andy Dougherty nevertheless maintained that *something* in %Config
should be available, such as a putative $Config{d_pseudofork} key, the
idea being that people shouldn't have to grovel through
$Config{ccflags} to try to determine whether particular combination of
flags present or absent means that a specific feature or behaviour is
available.
So I guess we need a meta $Config{some_sort_of_fork}
http://xrl.us/kw9o
Overridable filetest operators
Salvador Fandiño pitched his patch to add "/", "^" and 1 as prototypes
for user function to allow them to mimic accurately the built-in
functions.
Warnocked
http://xrl.us/kw9p
Renaming variables in some mg.c routines
Andy Lester noted that in a couple of routines, nothing is ever read
from the "mg" parameters that are passed in, and worse, are used by
the code to stash intermediate calculations. So Andy marked them as
Unused, and declared some new local variables whose names better
reflect their purpose.
Refactoring at its finest
http://xrl.us/kw9q
New and old bugs from RT
"chr(65535)" should be allowed in regexes (#38293)
Back in January, Marc Lehmann filed a bug report concerning the
possibilities available for matching (or not) "chr(65535)".
Sadahiro-san, resident UTF-8 guru, examined the problem in depth,
uncovered a number of inconsistencies surrounding such Unicode
code-points and wrote a patch to clean it up. Said patch includes
tests (yay!) to ensure the problem doesn't come back, and more tests
(double yay!) for a related bug (#37836).
Rafael wondered whether perlunicode.pod should be updated to document
more precisely what happens when "use warnings 'utf8'" is in force,
but Tomoyuki answered that it would probably be better to rework perl
to deal with Unicode non-characters more reasonably, as per the
standard.
http://xrl.us/kw9r
At the same time, Ilya Zakharevich ran into this exact problem on
"comp.lang.perl.misc".
It's a small world
http://xrl.us/kw9s
"/(??{ "(PAT)" })/" doesn't set $1 (#37407)
Dominic Dunlop returned to this bug, noting that
my $dot = qr{ () }x;
"" =~ /(??{ $dot })/x;
no longer dumps core on "blead", but then again it doesn't dump core
for 5.8.6 or 5.8.8 either. On the other hand,
"a" =~ /(??{ "(a)" })/
which was Abigail's original problem in the bug report doesn't capture
the 'a' into $1. Hugo thought that, given the documentation, this was
not a bug: the implementation just isn't up to this sort of caper.
Dominic thought that the documentation should be tightened up to
explain more precisely how "(??{})" currently behaves. Abigail
conceded the point, but offered a specific real world example where
the ability would come in handy (matching shortened IPv6 addresses).
http://xrl.us/kw9t
Memory leak occurs when an "eval" statement exits by a signal (#38854)
Itsuro Oda reported a problem when dying via a "SIGALRM" handler in an
"eval" block, with a nice short test case to show the good and the
bad.
Warnocked
http://xrl.us/kw9u
Failing to build lib/File/Basename.pm (#38891)
Cliff Liu tried to build perl, and it failed with some peculiar errors
when building lib/File/Basename.pm.
http://xrl.us/kw9v
Those bleeding greedy quantifiers (#38906)
Japhy found an odd corner-case in the regexp engine where greediness
and quantifiers get confused and located the likely culprit in
regexec.c. "Animator" took a stab at resolving the problem, which is
no mean feat considering it was h(?:er|is) first attempt at patching
the regexp engine. Dave Mitchell took it and cleaned it up for "blead"
and included Japhy's original test-case bug snippets.
http://xrl.us/kw9w
Perl5 Bug Summary
The week before last (twenty less than the previous week, all hail
Steve Peters):
http://xrl.us/kw9x
Last week (six more closed):
http://xrl.us/kw9y
The remaining 1537 are here
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
* ExtUtils-Install version 1.38 uploaded by Yves Orton. This
handles the problems on Win32 dealing with the unlinking of
open files, and also adds an "INSTALL.SKIP" directive that
users of revision control systems should appreciate.
Following a query from Rafael, Yves explained the difference
between "INSTALL.SKIP" and "MANIFEST.SKIP".
http://xrl.us/kw9z
* H.Merijn Brand uploaded The latest and greatest "dor" patch
(the "$var //= $eigenvalue" trick from Perl 6) for application
to to the current "maint" snapshot. Not exactly a module, but
hard to live without once you've grown used to it.
http://xrl.us/kw92
In Brief
The "use sort 'stable'" sorting in reverse bug was fixed by Robin
Houston.
http://xrl.us/kw93
Jarkko Hietaniemi patched "ext/IO/t/io_unix.t" to fall back and use
/tmp should the current working directory have permissions too
restrictive to allow sockets to be created.
http://xrl.us/kw94
The issue with "pow" failures on AIX, and how to work around it, was
sorted out.
http://xrl.us/kw95
Jim Cromie supplied a long update to his current obsession (arenas for
op-codes), and a patch to sv.c.
http://xrl.us/kw96
Nicholas Clark noted that a better strategy for testing "Perl_ss_dup"
is required, as it never gets called on Unix, as its main use is in
association with the pseudo-forking code on Windows.
http://xrl.us/kw97
Hugo van der Sanden fixed a problem setting %ENV keys to "undef" that
was causing the test suite to emit a faint burning smell.
http://xrl.us/kw98
Jerry D. Hedden reposted his patch to sync "blead"'s "threads" with
CPAN. Rafael found that it did not compile on older versions of HP-UX
(that is, 10.20, unsupported by HP for a couple of years now). This
will be cleaned up in a subsequent patch.
http://xrl.us/kw99
More changes here:
http://xrl.us/kxaa
Jan Dubois patched threads.pm to overload the "!=" operator as "==" is
overloaded to allow threads to be compared by thread id, since
overload.pm cannot (or does not) implicitly derive "!=" from "==".
http://xrl.us/kxab
In doing so, tidied up the placement of the documentation for "~~"
(smart match).
http://xrl.us/kxac
Joshua ben Jore arranged things so that "foreach (...)" isn't a
"B::Lint" warning anymore. Hugo and Rafael both commented on the
proposal, and Joshua defended his position with ease.
http://xrl.us/kxad
Steve Hay was struggling with the "PERL_UNUSED_DECL" change (27649)
breaking threaded builds on Win32 with gcc-3.4.2.
In space no-one can hear you scream
http://xrl.us/kxae
Ravi Sastry had a problem with lib/ExtUtils/t/Constant.t on z/OS.
Sadahiro-san, resident EBCDIC guru, spotted an suspect ASCIIism in a
complemented character class and spelt it out longhand. A conversation
on the finer points of EBCDICisms ensued, and Ravi finally got it
working to his satisfaction.
http://xrl.us/kxaf
Continuing on z/OS, Mohammad Haseen had problems with
"-DPERL_EXTERNAL_GLOB", which dictates to perl whether it should
handle globbing itself or defer to an external process.
http://xrl.us/kxag
He was also having problems with lib/ExtUtils/t/Embed.t. Nick
Ing-Simmons was suspicious of the compiler switches used, and
suggested some work-arounds.
http://xrl.us/kxah
Nick Ing-Simmons carefully explained the advantages and differences of
dynamic versus static builds of Perl.
http://xrl.us/kxai
Upcoming versions of Solaris will permit 32-bit processes to open more
than 256 "stdio" file handles. Alan Burlison sent in a pre-emptive
patch to allow "gcc" to deal with the change.
Your standard preprocessor trickery
http://xrl.us/kxaj
Dominic Dunlop went through RT looking for tickets involving postponed
regexes "(??{...})" and found nine. He then summarised the situation
of each one.
http://xrl.us/kxak
Yann Combarnous offered a patch to silence an "uninitialized value"
warning in CGI.pm (bug #38865).
http://xrl.us/kxam
Chris Dolan identified a problem with changing $0 on Darwin leads to
excessive padding in "ps" (bug #38868)
http://xrl.us/kxan
Jan Dubois posted a patch to ease the combination of UTF-16 with
":crlf". Nick Ing-Simmons started to have second thoughts on the
approach.
http://xrl.us/kxao
John E. Malmberg published an RFC concerning UTF-8 file specifications
on VMS. Steve Hay wanted the same for "Win32". Nicholas Clark helped
John finalise his patch.
http://xrl.us/kxap
Steffen Ullrich posted a bug showing how to crash perl by having $1
bound to an out-of-scope variable. (bug #38869)
http://xrl.us/kxaq
Joshua ben Jore is a sick person. He uses emacs for a start. On top of
that, he h(ij)?acked his syntax checking minor mode to refuse to save
the file if it doesn't lint cleanly. Download his code, and you can
too!
http://xrl.us/kxar
Dan Kogai was happy to discover that search.cpan.org now groks the
"=encoding" directive, which improved the presentation of his modules
there. Tels rushed off to add Unicode examples to his POD.
http://xrl.us/kxas
In between bouts of jousting with Coverity, Andy still found some time
to deliver some consting goodness in regcomp.c. Dave applied most of
it, but held back on one part as he's about to let more regcomp.c
improvements escape from the basement.
http://xrl.us/kxat
Philip M. Gollucci ran into trouble, due to the recent changes
concerning "PERL_UNUSED_DECL" when compiling Apache's "apreq". It is
apparently something to do with ppport.h, but his diff appeared to
rewrite ppport.h in its entirety, so I'm not sure anyone knew what to
do with it.
http://xrl.us/kxau
Torsten Foertsch was having problems with "("x"x32769)=~/\A(.)\1*\z/s
and print "$1\n"" and wondered what to do about it. Hugo explained
what was going wrong, and realised in passing that the diagnostics.pm
diagnostic needs a bit of work, following on from Dave's
recursive-to-iterative transformation of the regexp engine.
http://xrl.us/kxav
Jerry D. Hedden took a third attempt at synching "blead" with CPAN's
"threads". Rafael put it through the wringer and came up with some
problems in conjunction with "PERL_TRACK_MEMPOOL" and offered advice
as to where things could be breaking. Rafael made a couple of other
comments on the changes and finished with a word of thanks, because
few people have had the courage to venture into this code and attempt
to clean it up.
http://xrl.us/kxaw
Andy tweaked the "FIT_ARENA" macros. Jim Cromie explained that what
Andy had done was to re-merge a macro that H.Merijn had previously
split apart into two, but could no longer recall what necessity had
driven H.Merijn to do such a thing.
http://xrl.us/kxax
Linda Walsh tweaked Benchmark.pl to remove spurious warning that
occurs when the ":hireswallclock" option is used.
http://xrl.us/kxay
Jan Dubois taught "Pod::Html::depod()" how to deal with multi-line
strings and update the test suite to boot,
http://xrl.us/kxaz
and also fixed up anchor generation in "Pod::Html" for "=item item 2".
http://xrl.us/kxa2
Hervé Guillemet had a problem with nested closures losing their
references to outer variables, noted in bug (#38895). Yitzchak
explained that the problem had been fixed in "blead", but that the
change was unlikely to make it back to "maint", and offered a simple
technique to route around the damage.
http://xrl.us/kxa3
Andy Lester made a simple, but elegant improvement to mg.c to make it
clearer what was being returned in "Perl_magic_scalarpack", and
elsewhere to split the use of variable that had been pressed into use
in two distinct roles into two separate variables. This is has been
pretty much the overall aim of Andy's refactorisations over the past
months; it's only now that he's starting to get there.
http://xrl.us/kxa4
H.Merijn implemented a trick in "Configure" to introduce a new
"-DEBUGGING" switch that would be an improvement over "-DDEBUGGING".
Many people appeared to appreciate the concept.
http://xrl.us/kxa5
Slaven Rezic tweaked "perlfaq8" via bug report #38901 to improve how
to discover if I'm running interactively or not.
http://xrl.us/kxa6
Jerrad Pierce looked at "Module::Corelist" through the lens of perl
4.036 and came up with a number of additions for it, arguing that it
would have a certain educational value. Rafael remained somewhat
unconvinced.
http://xrl.us/kxa7
Nicholas Clark revived and old thread started by Jos I. Boumans
concerning a Bug or Limitation of Filehandles in "pp_require".
http://xrl.us/kxa8
This then segued into code references in @INC and source filters. Nick
Ing-Simmons mentioned a truly mind-boggling use that he had put it to.
http://xrl.us/kxa9
So Nicholas went ahead and changed what he said he'd change, but then
discovered "Filter::Simple" error messages getting mangled inside
"require" (#38920).
http://xrl.us/kxba
Andy Lester cached a pointer dereference to a bitfield, in the hope of
improving the performance of "is_list_assignment" in op.c. Nicholas
knew from bitter experience that it is hard to outsmart compilers
these days, but applied the patch anyway.
Take 1
http://xrl.us/kxbb
Take 2
http://xrl.us/kxbc
Andy finished by removing an unused variable in a macro.
http://xrl.us/kxbd
Feedback from the previous summary
H.Merijn Brand carefully explained just what it takes to pull a
"Configure" script out the constituent pieces,
http://xrl.us/kxbe
bug #34349 is still open,
http://xrl.us/kxbf
I flipped a bit concerning the layer problem Jan Dubois found,
http://xrl.us/kxbg
and Jerry Hedden explained that thread stack size sizing is even
trickier than first thought.
http://xrl.us/kxbh
About this summary
This summary was written by David Landgren. Last week I was in England
on holiday. As I was wandering around Salisbury cathedral, I kept
thinking "Hmm, I hope there won't be too much traffic on p5p this
week". HA!
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 or enjoyable, 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."