This Week on perl5-porters - 6-12 March 2006
Larry returns to p5p
Topics of Interest
Routines that accept a file name or a filehandle
Salvador Fandino was trying to override "CORE::GLOBAL::stat" when he
discovered that there is no way to be able to distinguish between a
filename 'Foo' and a bareword filehandle "Foo".
Salvador patched the prototyping mechanism to permit
C<sub my_stat (/) {...}>
to mean that a bareword will be converted to a typeglob. Rafael
Garcia-Suarez replied that "stat" already had a prototype of "*"
(star). Salvador showed why that didn't work the way he wanted. Rafael
thought that it would be better to fix the '*' prototype rather than
introduce a new one, on the basis that replacements of built-ins
really are supposed to behave identically the built-ins they are
replacing.
Salvador was worried that changing the behaviour of "*" would
introduce backwards compatibility problems, and maintained his "/"
idea. Rafael asked for examples where problems could arise, and
remained somewhat unconvinced. Salva showed what the problem was from
his perspective, and admitted that his solution was a bit ugly, but
couldn't think of anything better, if backwards compatibility were to
be maintained.
Nick Ing-Simmons suggested that the replacement do just what "stat"
does -- checks to see whether the string exists as a glob, but
Salvador maintained that such a check had the potential for error, and
pointed out in the code why things can get messed up.
Nick began to accept the validity of Salva's argument, saying only
that he didn't like the choice of "/" (slash) as the prototype key.
H.Merijn Brand ruled out a number of characters that would cause grief
for simple-minded syntax highlighters. Nick suggested "+" (like a
star) or "?" (conditional globbing could be occurring).
Who gets the colon?
http://xrl.us/kgk8
Overriding filetest operators
Salvador also supplied a patch to allow the filetest operators to be
overridden. Given the previous thread about overriding "stat", Nick
Ing-Simmons wanted to get to the bottom of things and find out what
Salvador really needed to do.
It turns out that Salvador is writing a module to manipulate remote
file systems transparently via "sftp". In the process of doing so he
had uncovered various oddities, which was the reason for patches.
Nick and Yitzchak Scott-Thoennes thought that a more promising
approach would be to use the IO abstractions available in PerlIO,
rather than the approach based on "tie"s that Salva was using.
The thread continued on for quite some time, debating whether or not
Perl 5 is an evolving language and whether the prototype scheme was in
need of tweaking.
Ties are out, layers are in
http://xrl.us/kgk9
Threads and VMS
We left John E. Malmberg and Craig A. Berry last week trying to build
a threaded core that didn't splatter itself out over the landscape.
Considerable progress was made this week: John spotted some memory
leaks, Craig saw that some memory was being allocated before the
threads subsystem was fully operational, which caused grief when that
memory was later "free"ed, since the thread housekeeping code knew
nothing about it.
John was still getting some errors in the test suite in the end.
http://xrl.us/kgma
Another problem John ran into was that he was able to provoke
"Perl_safesysfree" into freeing memory allocated by "malloc", because
a race condition in updating an internal linked list structure. Dave
Mitchell thought that the linked lists in question were allocated on a
per-thread basis, so they should be safe.
John eventually traced the problem to a completely different piece of
code that he had been working on, and therefore suggested that the
linked list "next" and "prev" pointers be poisoned (that is,
overwritten with garbage values) so that the use of already-freed
memory would be noticed the first time it was attempted.
Die fast
http://xrl.us/kgmb
Source code analysis with Coverity
Andy Lester had a look at the results of applying Coverity (a static
source code analysis tool) to see what came out the other end. He
found an unnecessary "NULL" check in "Digest::SHA".
http://xrl.us/kgmc
David Dyck looked at a "NULL" dereference in Zlib.xs and wondered
whether it too had unnecessary code guards around it. Marcus
Holland-Moritz showed that the checks were indeed necessary. Paul
Marquess fixed up his local copy of "Compress::Zlib" to guard against
what Marcus had discovered.
http://xrl.us/kgmd
Andy found another code fragment in pp_hot.c that could be tightened
up, resulting in a cascade that caused another pointer to go "const".
http://xrl.us/kgme
Elsewhere, in toke.c, he pulled some variable declarations down into
tighter scopes. In the process of applying the patch, Nicholas
discovered another tiny tweak.
A cycle here, a cycle there
http://xrl.us/kgmf
Allocating op-codes from an arena
One of things to do in the huge evergrowing pulsating TODO list is to
allocate OPs from an arena. Nicholas Clark thought that there might be
a big win due to the resulting simplification of allocation and
freeing of ops.
Jim Cromie, who has been spending a lot of time recently on these
matters thought that it might be an overall loss, due the fact that
the CPU would probably wind up trampling over a far larger section of
memory and thus ruining the cache.
All the same, he wrote a patch to allow the arenarisation of op
allocations to allow the issue to be explored in more detail.
http://xrl.us/kgmg
Mentioning the new constant routines in "perlxstut"
Achim Grolms filed a bug report after looking at "perlxstut" should
made no mention of new constant subroutine construction mechanism
"newCONSTSUB". He felt it deserved a mention. Marcus Holland-Moritz
told him to send the documentation patches to the list (the maintainer
e-mail address in "perlxstut" was bouncing).
http://xrl.us/kgmh
Coroutine support in the perl core
Marc Lehmann, author of the "Coro" module, had a wishlist of items
that, if implemented, would improve the its functionality. Part of the
effort of getting "Coro" to work involves from reusing code from the
guts of perl, which leads to problems when said guts undergo changes.
Marc was hoping to have something more stable upon which to hang his
work.
Nick Ing-Simmons noted the similarities between Marc's needs, and
those of threads and wondered whether the current
global/interpreter/thread variable model needs a new "coro" category
as a subset of thread variables. Marc said that sometimes he needs to
copy variables, sometimes he needs to clone them. Nick wondered
whether a new "weird" category was also needed. All this probably only
makes sense if you understand coroutines already -- I had to reread
Dan Sugalski's blog.
Yuval Kogman added his own wishlist to the Coro module: to make them
serialisable. Marc was of the opinion that such a thing was
theoretically impossible. To do it in practice would involve giving up
a certain number of features, such as closures.
Yves Orton said that "Data::Dump::Streamer" was able to serialise
closures, although he wasn't sure whether it was applicable in the
current instance. Marc posted a snippet showing that it doesn't work.
Things batted back and forth a bit Yves saying it could, Marc saying
it couldn't. Looking at the code posted by both Marc and Yves it looks
to me as if they're both correct, they're just not talking about the
same things.
Yves was showing that it was possible to recreate the universe. March
was showing how it's not possible to take something from the universe
and then put it back again.
http://xrl.us/kgmi
Dan Sugalski's "What the heck is a coroutine"
http://www.sidhe.org/~dan/blog/archives/000178.html
Should "truncate" perform a "seek"
H.Merijn Brand was having problems with the fact that after truncating
a file, the file pointer (à la "seek" and "tell") was now pointing
into limbo. This would mean that a subsequent print would create a
sparse file. Gellyfish, er, Johnathon Stowe thought that the problem
was more one of documentation than implementation.
Gisle Aas produced an explanation that was sufficient to make H.Merijn
change his mind.
Seek and ye shall truncate
http://xrl.us/kgmj
Larry's Perl 5 to Perl 5 convertor
In preparation for Perl 6, Larry Wall has been writing a Perl 5 to
Perl 5 convertor. Nicholas Clark had the unenviable task of merging
Larry's work into "blead" (in that the code base has moved around
around considerably since Larry took a copy to work on). It's now
available if you compile with -Dmad (Misc Attribute Decoration -- I
suspect we'll be hearing a lot about this in the future).
Alas, the code was not working as expected. After some serious grief
and punishment, Nicholas got it all working correctly. Yay!
They're mad I tell you
http://xrl.us/kgmk
Andy cranked up the warn-o-meter and found an uninitialised variable
in "S_my_kid", but didn't know what to do about it.
http://xrl.us/kgmm
Elsewhere (as we segue into what Andy did this week), Andy spotted an
inconsistency between embed.fnc and doio.c, where the parameters
didn't agree.
http://xrl.us/kgmn
And an unnecessary "switch" was flicked.
http://xrl.us/kgmo
Madly duplicated files
Dave Mitchell started to look at the new MAD code and was worried at
the presence of files that had been copied and then modified, such as
regen_perly.pl becoming regen_madly.pl.
Dave pleaded for some creative "#ifdef"ing to merge the two files back
into one, to avoid them drifting out of sync.
Nicholas Clark tended to agree. So did Larry. It seems that for some
files, simple "#ifdef"s should suffice, but there will be some cases
where the only solution is to create a meta-file that can be processed
to emit, say, perly.y or madly.y, depending on what the build
requires.
One file to rule them
http://xrl.us/kgmp
P5RE.pm and P5re.pm don't mix
Craig A. Berry was running into trouble following on from change
#27453. The two files P5RE.pm and P5re.pm map to the same name on a
case-insensitive file system, which results in either
last-one-standing wins, or infinite loops when synching the "blead"
repository with "rsync".
Larry replied that the correct file to use was P5re.pm, the other one
can be axed, which is exactly what Nick Clark went ahead and did.
http://xrl.us/kgmq
Fixing "ExtUtils::Install" on Win32
Adam Kennedy reported that his Vanilla Perl, a Windows installer for
Perl and MinGW was almost ready, except for a problem with
"ExtUtils::Install", and the fact that it's difficult to replace a
file that is in use. He wanted to know what the status of
"ExtUtils::Install" was, and whether any progress had been made on
this front.
Randy Sims said that Yves Orton had done all the necessary footwork,
but Michael Schwern is still the putative owner and things are in
limbo at the moment, since Michael is apparently lost in the Worlds of
Warcraft.
Randy took Yves' second patch and applied it against "blead" with some
minor additions. Yves spotted a couple of problems and Randy promised
to fix them up. It all finally wound up looking good.
Paging Mr. Schwern, white courtesy phone.
Vanilla Perl approaches beta
http://xrl.us/kgmr
New and old bugs from RT
perl 5.8.8 build fails at "dynaloader" (#38687)
Andy Ford posted the tail end of what appeared to be an ordinary build
on Linux that died when building "dynaloader". No takers. Perhaps Andy
didn't post enough of the log for people to figure out what was going
wrong.
http://xrl.us/kgms
Test failures on AFS (#38698)
Peter Scott traced a test failure involving sockets back to change
#22258.
http://xrl.us/kgmt
Pre-extending an array should fill it with "undef" (#38703)
Marc Lehmann wanted to know where it in the documentation it explains
that
perl -e '@a = (undef); map $_->{x}, @a'
runs without error, but
perl -e '$#a = 1; map $_->{x}, @a'
dies with a "Modification of a read-only value attempted". He wondered
whether they should behave in the same manner. Larry Wall replied
saying that it was vaguely implied by reading the documentation for
"exists", in that it allows for testing for the presence of an element
in an array, regardless of whether it is some value or "undef".
This in turn permits sparse arrays to be implemented with arrays, and
not just with hashes.
Marc more or less agreed, but still had trouble tying it back to
pre-extended arrays. Nicholas Clark agreed that the error Marc ran
could be interpreted as an artifact of the implementation, and
probably should be fixed.
http://xrl.us/kgmu
Opening "|-" triggers unjustified taint check (#38709)
Martin Hasch discovered that opening "|-" will trigger an $ENV{PATH}
taint check, even though no "PATH" dependency is involved. He noticed
that the problem started to occur from 5.8.7 onwards, including
"blead". Furthermore, he tracked the problem down to what may have
been an over-optimisation in doio.c, restored the previous behaviour,
and added a couple of tests to ensure it continues to work.
Rick Delaney confirmed Martin's hypothesis, tracing the problem to
change #23725, which accidently lost an single character (a "!", thus
inverting the truth of a conditional).
For the want of a character, the program was lost
http://xrl.us/kgmv
More on the "Term::ReadKey"/"Term::ReadLine" bug
Adam Kennedy forwarded the thread to Ilya Zakharevich that Johnathon
Stowe started last week, concerning "Term::ReadKey" and
"Term::ReadLine" on Win32. Ilya said that the bug wasn't in
"Term::ReadLine", but rather the Windows "CON" device driver, and
suggested where to add a work-around.
Johnathon confirmed that Ilya was correct, and nearly had the bug
nailed, except for a nagging problem with carriage returns that
remains to be solved.
Routing around damage
http://xrl.us/kgmw
"local"ised stash slices (#38710)
Hugo van der Sanden discovered a way to make localised stash slices go
dreadfully wrong, and suggested where to start looking, along with
some new tests to guide the way.
If the tests pass, ship it
http://xrl.us/kgmx
Threads calling LWP causes exception (#38712)
Steve Haneman posted a short program demonstrating how "LWP", the
"https" protocol and threads do not mix.
http://xrl.us/kgmy
Perl5 Bug Summary
1556 open tickets
http://xrl.us/kgmz
In glorious Technicolor
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
* Jos I. Boumans announced the release of "CPANPLUS" version
0.060. No, it's not core, but it is nonetheless a major
release.
http://xrl.us/kgm2
* "Module::Build" 0.27_09
Ken Williams released a new version that contains a number of
minor fixes.
http://xrl.us/kgm3
In Brief
Continuing on from last week, Jarkko Hietaniemi reported a technique
to give "Devel::DProf" indigestion using "XSLoader::load()" and its
"goto &$name" trickery.
http://xrl.us/kgm4
Marcus Holland-Moritz took "DEBUG_LEAKING_SCALARS" for a spin. He
wrote a short section that leaked an "SV" and then wondered why he
didn't get any debug output. Dave Mitchell showed another snippet that
did. Marcus ran Dave's code, which died with a segmentation fault.
This led Marcus to ask what the use of it was for.
http://xrl.us/kgm5
Tels realised that bug #1808 can be closed, but lacked the necessary
auth bit to do so himself
http://xrl.us/kgm6
As mentioned last week, Jerry D. Hedden announced that he had
completed the preparatory ground work for uploading a version of
"threads.pm" to CPAN. There's some new functionality in there, plus
some documentation and test suite improvements.
http://xrl.us/kgm7
Jan Dubois noticed that change #24576 zapped #24576 (which deals with
"USE_SITECUSTOMIZE"). H.Merijn Brand applied a liberal dose of his
config-fu to ensure that it sticks around this time.
http://xrl.us/kgm8
John E. Malmberg was having test failures with "Compress::Zlib". Craig
Berry reasoned correctly that the problem was to do with shell
redirections. Finally after a certain amount of work, John started
from a clean directory tree and achieved success.
http://xrl.us/kgm9
Shlomi Fish posted a pathological regular expression pattern in bug
#38717 that caused perl to die a horrible death. Yves dissected it
neatly, suggesting a couple of ways to make it work faster and not
crash perl.
http://xrl.us/kgna
Rafael made a small change in ".pmc" files in order to help Audrey and
the Pugs crowd do some nifty things with precompiled modules. See
"Module::Compile" for more information.
Robert Spier, Hugo and Andy Dougherty weren't too keen on the idea.
http://xrl.us/kgnb
http://search.cpan.org/dist/Module-Compile/
About this summary
This summary was written by David Landgren.
Information concerning bugs referenced in this summary (as #nnnnn) may
be viewed at http://rt.perl.org/rt3/Ticket/Display.html?id=nnnnn
Information concerning patches to "maint" or "blead" referenced in
this summary (as #nnnnn) may be viewed at
http://public.activestate.com/cgi-bin/perlbrowse?patch=nnnnn
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."