Larry returns to p5p.
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
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
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
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
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
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
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/user/dan/blog/archives/000178.html
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
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
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
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
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
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
Peter Scott traced a test failure involving sockets back to change #22258.
http://xrl.us/kgmt
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
|-
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
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
Steve Haneman posted a short program demonstrating how LWP
,
the https
protocol and threads do not mix.
http://xrl.us/kgmy
1556 open tickets http://xrl.us/kgmz
In glorious Technicolor http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
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
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/
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: 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 or enjoyable, please consider contributing to the Perl Foundation to help support the development of Perl.