Front page | perl.perl5.porters |
Postings from May 2008
This Week on perl5-porters - 11-17 May 2008
Thread Next
From:
David Landgren
Date:
May 24, 2008 11:48
Subject:
This Week on perl5-porters - 11-17 May 2008
Message ID:
483862FE.9060104@landgren.net
This Week on perl5-porters - 11-17 May 2008
Dominic Dunlop: Trouble is, some of it is CGI, and people whinge
loudly when previously-clean CGI starts warning.
Ed Avis: Ha ha ha. I think any possible programmer mistake can be
found in a Perl CGI program somewhere.
Topics of Interest
5.8.9-to-be on Irix
David Cantrell took the time to track down the failures (regarding
"Sys::Syslog") with the upcoming 5.8.9 release. Versions 0.13 (bundled
with 5.8.8) through 0.18 both pass on 5.8.8 and 5.8.9-tobe on Irix.
0.19 and beyond fail on both versions. But 0.24 (the current version)
does pass on platforms other than Irix.
David provided an additional clue, in that the compiler moaned that
something was wrong with a variable named "RETVAL" (a name that will
strike fear into any author starting out in XS).
Sébastien Aperghis-Tramoni, the current maintainer, wailed in despair,
since 0.18-0.19 was a monster release, introducing support for the
Win32 platform. After a couple of hours of serious work (and some
minor goofing off), he offered a Subversion version for David to try.
David announced that it worked, although the compiler was still a
little suspicious of "RETVAL". Sébastien fixed that as well.
And Sébastien will buy David a beer at the next London Perl Workshop.
you know this will go down on your permanent record
http://xrl.us/bkysu
File::Path::mkpath() incompatibility in perl-5.10
Gisle Aas ran into grief over old-style/new-style interface for
"File::Path". As a result, David Landgren learnt that sometimes it
doesn't pay to be too Clever when trying to introduce new features
while maintaining pure backwards compatibility at the same time.
Thus, the next release of File::Path will guarantee total backwards
compatability, and those wishing to live on the cutting edge will have
to say so, one way or another.
http://xrl.us/bkysw
On the almost impossibility to write correct XS modules
Hmm. Lot of traffic next week on this one (sometimes it comes in handy
to run late).
http://xrl.us/bkysy
"eval "require Foo"" with binary-incompatible XS modules
Niko Tyni was running into problems setting up Debian packages in
order to upgrade from 5.8.8 to 5.10.0. The main reason being that
Debian don't use a $Config{vendorarch}, which was designed to resolve
the problem of keeping binary-incompatible XS code apart.
There were a number of suggestions as to what could be done to fix up
the situation, but Nicholas Clark was hesitant to endorse any of them,
pointing out quite rightly that Debian had already survived the
5.6-to-5.8 upgrade.
http://xrl.us/bkys2
Method call overloading
Following on from last week's musings, Ricardo Signes released a first
cut at testing method call overloading to allow one's own dispatching
techniques.
TIMTOWTdispatchI
http://xrl.us/bkys4
After pondering the issue for a couple of hours, he released a second
version with a new, improved class-based scheme. Unfortunately, in
Ricardo's eyes, the syntax sucks. With a bit of encouragement from the
parser, it might be possible to come up with something beautiful.
classy work
http://xrl.us/bkys6
Division by zero folding deferred to run-time
Eric Brine wondered what the reasoning was behind deferring constant
folding (such as 1/0) until run-time, when it could be caught at
compilation time (as, in fact, it used to in 5.8).
Nicholas Clark explained that the concept as such was an optimisation,
and as such it should not affect the behaviour of a program. For
instance:
print 1/0 if $ARGV[0] > 10;
... could not be compiled at all on 5.8, even though in some
circumstances the code may never be executed in the first place.
The point in question is that such a construct might be hidden behind
two constants subs that have different values depending on the
platform the code is running on. In that case, the code might be
uncompilable even though the program itself could run perfectly well.
early decisions bad, late decisions good
http://xrl.us/bkys8
Compiling perl (5.10.x) with gcc <= 3.2.3
After sparring with the RT bug database, Bram began to install as many
versions of "gcc" as he could lay his hands on, to see how they fared
compiling perl.
When he got as far back as version 3.2.3, the "Configure" and "make"
succeeded, but the test suite spat out numerous "libgcc_s.so.1: cannot
open shared object file" errors.
Andy Dougherty suggested a riff on the "-fstack-protector" problems
seen elsewhere this week, but that didn't do any better. Since the
compiler in question was released five years ago, Andy suggested just
adding a note in the INSTALL file.
H.Merijn Brand committed change #33841 to note the fact in
README.linux, but wasn't really happy with the idea, since gcc runs on
other platforms as well. But that's ok, because he will have to revert
the change, since Bram figured out a simple recipe that allows 3.2.3
to work.
http://xrl.us/bkyta
Empty pattern and /o
Bram lifted an old bug out of obscurity, concerning the empty pattern
("//") and the "/o" modifier, the point in question being the
interactions observed when "use re 'eval'" comes into play.
Yves Orton grumbled that all these things were complicated to begin
with, so one can grasp the potential for mischief when they interact
in a single expression.
Abigail thought it would be nice to downplay the importance of "/o" in
the documentation, since it invariably led people to find out about
it, and then proceed to use it incorrectly.
Similarly, Abigail thought that "//" (match again with the same
pattern that was used previously) doesn't have any use in the real
world; most canonical examples being somewhat contrived. What does
happen with annoying regularity is that people use "/$var/", and $var
turns out to be empty, thus triggering an unexpected action at a
distance.
Yves Orton wanted to make "/o" a true no-op, and make the magic empty
pattern behaviour only kick in if the pattern was well and truly a
"//" as parsed. And it probably comes as no surprise that Yves had a
couple of perfectly reasonable use cases where "//" patterns are very
useful:
if (m/$some_big_nasty_pattern/ and $1 eq $something) {
s///;
}
and
if (m/$pat1/ or m/$pat2/ or m/$pat3/) {
s///;
}
Yves was careful to point out that he only used empty pattern magic
with the substitution operator. For the match operator, he thought the
empty pattern should warn all the time.
And "/o" can't be no-op'ed just yet, since it still adds a tiny
smidgen of performance, even in 5.10. So first of all Yves needs to
fix the underlying problems that make it useful in the first place, at
which point it could be deprecated.
http://xrl.us/bkytc
TODO of the week
Remove duplication of test setup
Schwern notes that there's duplication of code - lots and lots of
tests have some variation on the big block of $Is_Foo checks. We can
safely put this into a file, change it to build an %Is hash and
require it. Maybe just put it into test.pl. Throw in the handy
tainting subroutines.
Patches of Interest
Add Some Links to External (WWW) Resources to the Perldocs
Shlomi Fish responded to the criticism of his patch (it should not be
accepted since it has a higher maintenance burden due to linkrot),
arguing that a quality product requires maintenance, and a high
quality product requires more maintenance.
Quoting Nicholas Clark:
There is a fundamental conflict in the Perl documentation as is.
People are tugging it in both ways - it's trying both to be a
reference manual (terse, to the point), and an introduction/tutorial.
It can't be both. It certainly can't be all things to all people.
[...]
We have to assume some level of intelligence on the part of the
readership. If they don't know a concept, they will be smart enough to
research it for themselves.
rejected
http://xrl.us/bkyte
Compress/Raw/Zlib/Zlib.xs // comment fix
Andy Dougherty replaced some C++ comments with good old-fashioned C
comments. Paul Marquess thanked him and updated his own repository.
H.Merijn Brand applied the change, and idly wondered whether it will
be possible with git to reject a patch that contains such base sins.
/* TIOOWTDI */
http://xrl.us/bkytg
"h2ph": recognise the quote mark delimiter on #include directives
Niko Tyni saw that "h2ph" had trouble when system headers include file
names in quotes rather than angle brackets. He wrote some code to fix
up the problem and this allowed a number of regexp experts to show off
their skills. In the process, the patch was thoroughly reviewed and
made it in.
#include "peer-review.h"
http://xrl.us/bkyti
New and old bugs from RT
uc/lc/ucfirst/lcfirst fail on typeglobs (#39019)
Bram tried to sneak this one past as being resolved, since it
certainly looked like it. Nicholas Clark disagreed, explaining that
there was a problem with it, although likely one that only he could
fix.
So Bram asked Nicholas to explain more clearly what the problem was,
or rather, given what input produces incorrect output?
an open question
http://xrl.us/bkytk
"bleadperl -Dm -e1" segfaults on win32 (#39806)
Bram asked for Win32 porters (which these days is Strawberry, right?),
and/or Linux+threads porters to see if this problem persists.
call me in the morning
http://xrl.us/bkytn
glob() should do taint checking (#39821)
Bram asked for a resolution on this issue. Andy Dougherty replied that
functions don't fail on tainted args unless they have an impact on the
outside world. "glob" pulls information in from the outside world, so
we don't care about what we ask of it. On the other hand, what "glob"
returns is viewed with the utmost suspicion.
live free or die
http://xrl.us/bkytp
Bug in "File::Find" on Windows when targetdir is bare drive letter and
"no_chdir = 1" (#41555)
Bram implemented David Landgren's suggestion (or something resembling
it) to create a regression test for the code to deal with a directory
search starting with a volume name and a relative directory (that is,
something like "D:right\here".
Rafael thought the patch looked sane enough to apply; the smokers will
soon find out if it causes severe burns.
http://xrl.us/bkytr
"NDBM_File" fails to build (#50180)
Andy Dougherty created a pair of patches to teach "NDBM_File" how to
build itself, and he believed that the patches were safe to apply to
all perl versions. H.Merijn Brand applied the patch to blead.
http://xrl.us/bkytt
Deparse interpolation in regex literal (#51848)
Ambrus Zsbán had filed a report about "B::Deparse" failing to
restitute "/${x}y/" correctly. Rafael Garcia-Suarez commented this
week, saying that it failed because the optree was missing an
"op_concat", and this threw everything else off. Rafael proposed a
first fix, with ugly cutting and pasting, but then sat down like a
good boy and did a proper refactoring and wrote some regression tests
as well (change #33851).
This did lead him to wonder, all the same, *why* the opcode was no
longer there. Yves Orton blamed Dave Mitchell. Dave replied saying
that yes, it was his fault. The change was a result of some initial
work some time ago to make "(??{...})" work better. The idea is to had
the regexp compiler a list of tokens that comprise the code block,
instead of a single blob of uselessness.
http://xrl.us/bkytv
op/pwent.t should use the DirectoryService on OS X (#53500)
Tom Wyant read about this problem in the perl5-porters summary, and
was inspired enough to write a patch to fix the issue. Yay him! Rafael
applied the patch to blead, hoping that no Leopards, Tigers or other
such beasts would be hurt in the process.
w00t
http://xrl.us/bkytx
"elseif" should be "elsif" (#53808)
Ben Aveling got mixed up between Perl and Ruby or PHP or ASP or TCL or
not Javascript and wrote "elseif" instead of "elsif". Instead of
receiving a boring syntax error, Ben was slightly puzzled by the fact
that he received an explicit recommendation to change "elseif" to
"elsif". His reasoning was that if the lexer is so smart to
second-guess the programmer, why not just emit the elsif token and be
done with it.
Abigail pointed out that doing this would break any code that defined
a sub named "elseif" (although it could be argued that any programmer
doing so should be taken out the back and beaten severely about the
head with a blunt object). David Nicol gave "Macrame" a plug, showing
how one could write a macro for this situation. Yitzchak
Scott-Thoennes pointed out that a language change of this nature would
break syntax-highlighters.
we'll leave it at that
http://xrl.us/bkytz
Bug in "Time::HiRes" 5.11 (#53962)
Dmitry Karasik thought he found a bug in "Time::HiRes" on 5.10 and
blead (bug #53962) and thought the underlying code looked pretty
horrible. Dominic Dunlop replied that many different systems handle
high resolution time measurements in many weird and wonderful ways.
Given this extra bit of information, Dmitry was able to refine his
patch. But the patch didn't solve Reini Urban's ongoing "Time::HiRes"
failures on Cygwin.
adapt to reality
http://xrl.us/bkyt3
"pod2man" nroff =head2 with two C<> blocks (#53974)
Kevin Ryde looked at a POD heading with two C directives and noticed
that the bold was switched off after the first one. He was brave
enough to delve into Pod/Man.pm and produce a patch that fixed things
up.
Unfortunately he wasn't entirely certain that this wouldn't cause
problems elsewhere, and the copious tests available did not help
clarify the issue.
http://xrl.us/bkyt5
Respawning processes with negative return values on Win32. (#54028)
Alistair showed how a very short C++ program whose main claim to fame
was to return -1 as a status code to the operating system could be
called twice, even though the Perl code contains only a single
"system" call. He delved into the code in win32.c and found some
suspicious code that appears to interact with $!.
skeletons in the closet
http://xrl.us/bkyt7
Misparsing of sort comparison subroutine intention (#54040)
Ken Williams tripped up over the difference between the use of a
function used to compare pairs in a sort and sorting the results of
what a function returns. David Nicol was hard pressed to classify the
problem as a bug from either a documentation or implementation
standpoint.
Aristotle Pagaltzis admitted to having been bitten by the bug before,
Abigail suggested using the secret "+" operator to disambiguate the
meaning. David finished with a revised wording for the documentation,
and there the thread ended.
care is required when sorting the list returned from a function
http://xrl.us/bkyt9
"usethread=no" Configure compiler test file try.c is missing. (#54042)
Reini Urban saw that deactivating threads with MAD triggered an
internal Configure script bug, and so he reported it. Alas, no porter
with sufficient Configure-fu responded.
please report this
http://xrl.us/bkyub
"perl -wle '%::=();//'" crash (#54044)
Reini also recorded the fact that resetting the main stash and then
running an empty match will cause perl to dump core. He wasn't sure
which way out was the best, but thought that he could do better than
just segfaulting.
Yves Orton recalled reading about someone who built up some Markov
chains using real Perl code to produce slightly bogus code to try and
trigger segfaults. Nicholas Clark pointed Yves to the perl5-porters
post, a mere five minutes later.
match my stash
http://xrl.us/bkyud
semi-panic: attempt to dup freed string (#54114)
Nicholas Clark suspects this bug is yet another case of the stack not
being reference counted.
wontfix
http://xrl.us/bkyuf
Need more "-fstack-protector" (#54120)
Andy Dougherty sent in a patch to fix up undefined symbols from
occurring when "-fstack-protector" is used. The correction was to use
compiler flags to ensure the use of the switch was propagated out to
XS modules.
Nicholas Clark pointed out a flaw in the plan that forced Andy back to
the drawing board.
http://xrl.us/bkyuh
"IO::Seekable" + "POSIX" == constant subroutines redefined (#54186)
Niko Tyni showed how the incestuous relation between (what in fact
actually turned out to be) "Fcntl" and "POSIX" would generate lots of
messy warnings.
Nicholas Clark fixed things up so that "POSIX" now imports what it
needs from "Fcntl" instead of reinventing wheels badly. In the process
of cleaning things up, he realised that there was scope for doing the
same kind of decrufting elsewhere in the codebase, which should worth
another TODO.
http://xrl.us/bkyuj
"readlink()" returns result along with garbage (#54198)
Denis Melnikov noticed that using "readlink" in the Linux /proc
filesystem can lead to some strange results. After some investigation
it was decided that the observed behaviour was quite appropriate.
although not really documented
http://xrl.us/bkyum
segfault in "perl_clone()", probably due to running out of memory (#54224)
This week, Niko Tyni also uncovered another way to generate a
segfault, but admitted that it wasn't a very important issue.
but a core dump is a core dump
http://xrl.us/bkyuo
Panic opt close in regex "/(?:(o){2})?/" (#54228)
Niko also rediscovered the bug involving a capture group and a curly
specifier in a regexp. Apart from the fact that no-one can provide a
definition of what such an expression should do, it certainly
shouldn't dump core.
David Landgren grovelled through his memory and old summaries and
identified bug #39233 as an earlier instance of the same underlying
problem. Yves Orton assigned himself the bug so as not to forget about
it.
http://xrl.us/bkyuq
Perl5 Bug Summary
Bram's been busy again this week.
279 + 1383 = 1662 (+8 -44)
http://xrl.us/bkyus
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
"threads::shared" 1.21
Jerry D. Hedden shares some more threads goodness.
http://xrl.us/bkyuu
"Thread::Queue" 2.08
and this allowed him to push a new release of this one, too.
http://xrl.us/bkyuw
"IO::Compress::*" 2.011
Following on from the C++ comment, Paul Marquess release 2.011,
which also fixed a slew of problems reported on RT.
http://xrl.us/bkyuy
In Brief
(My damned wireless network at home kept flaking out this week,
causing my ssh sessions to die. At some point during an evening's
summarising, I noticed that the file was truncated right about here.
I've restored the rest of it from a backup, but some items I wrote
between then and now were wiped out. Sorry about that. Since what goes
here is usually short, and resolved, it's not so bad).
Rafael Garcia-Suarez took chromatic's patch to add ..., !!!, and ???
operators and applied it.
I want a blah blah blah operator
http://xrl.us/bkyu2
Reini Urban pleaded for the change that fixes the crash when
localizing a symtab entry (bug #52740) to be backported to 5.10.x.
one for Dave
http://xrl.us/bkyu4
Yves Orton announced that he was out of action but back in the saddle
again a bit. Marvellous. Now he'll go and add a slew of regexp verbs,
and I still haven't digested the first lot.
onya!
http://xrl.us/bkyu6
Bram says bleadperl crash in "Perl_pp_entersub()" (#40493) is fixed.
http://xrl.us/bkyu8
Bram looked at a perl -d bug on Mandriva Cooker with 5.8.8 (bug
#39758) and said it looked pretty good (although the jury was still
out on 5.8.9-tobe)
so, the smoke finished?
http://xrl.us/bkyva
He also delivered some promised TODO tests to record the fact that
"print Does::Not::Exist, ''" does, when it shouldn't (bug #53806).
http://xrl.us/bkyvc
He also repackaged another suggestion from a previous week concerning
the AIX Hints file (libm package).
awaiting comments
http://xrl.us/bkyve
Bram wrote a documentation patch to clarify the use of reverse in
scalar context. Yves applied it. Which allowed Bram to close bug
#39187.
http://xrl.us/bkyvg
Edward Peschko wanted to know if a particular debugger that promised
seamless XS debugging ever made it out into the wild.
http://xrl.us/bkyvi
Matt Kraai made some edits in the FAQ to link "perlfunc" to the
correct section of "perlop".
q//, qq//, qx//, and qw//
http://xrl.us/bkyvk
Last week's summary
Hmm, seems it never made it to the list. It did turn up on
summary-only mailing list if you need to hunt down a copy. And yes,
the archive on dev.perl.org is not being updated. I'll get to that...
eventually.
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: perl5-summary-subscribe@perl.org). 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 or attending a YAPC to help support the development of
Perl.
--
stubborn tiny lights vs. clustering darkness forever ok?
Thread Next
-
This Week on perl5-porters - 11-17 May 2008
by David Landgren