This Week on perl5-porters - 2-8 January 2006

  5.8.8 and 5.9.3 are both terribly near to release. Who will win? Tune
  in next week!

Cygwin status on "maint" and "blead"

  Yitzchak Scott-Thoennes posted a status report concerning the Cygwin
  port in November, 2005.

    http://xrl.us/jihi

  Yitzchak managed to scrape a few tuits together to bring the issue
  back on the radar and offered a patch against "blead" to move forward.
  Rafael Garcia-Suarez doubted the portability of the "grep -e ... -e
  ..." (the program, not the builtin) construct and wondered whether an
  alternation would be more portable. H.Merijn Brand thought that
  multiple "-e" switches was more widely available. Andy Dougherty
  mentioned that there weren't any viable "grep" and multiple "-e"
  solutions on Solaris, and that "sed" was a better option.

  Yitzchak rewrote the patch using "egrep" and one "-e".

    Cygwin gets better
    http://xrl.us/jihj

Problem using "local" with "threads::shared"

  Another bug (#37671) from November, that had its tyres kicked in
  December was cleaned up this week. Dave Mitchell broke the problem
  into two distinct issues.

  The first is an issue of "local $foo = $foo", when $foo is a a
  thread-shared scalar, or also a tied scalar or otherwise having magic.
  A one-liner to demonstrate the problem:

    $! = 1; print "[$!]\n"; local $! = $!; print "[$!]\n"

  (The second print is empty, instead of being the same as the first).
  Dave couldn't think of an easy fix for this.

  The second issue is the coredump on "blead". Dave committed a change
  (#26569) to resolve that. And then he realised that there was a third
  issue, that of leaking scalars. In the simplest form:

    foo([EMAIL PROTECTED]);
    sub foo {threads->new(...)}

  ... leaks. This caused Nicholas Clark to voice his suspicion that weak
  references are getting cloned when they should not be, but was having
  difficulty coming up with a test case to prove or disprove the
  hypothesis. The following day, Dave came back with some code to
  demonstrate the problem. Nicholas outlined an algorithm to fix the
  problem. To be continued next week...

    Leaks and threads and stuff
    http://xrl.us/jihk

Scanning for "snprintf()" and "vsnprintf()" in "Configure"

  After H.Merijn patched "Configure" to silence warnings during the
  detection of "stdio" char signedness on Tru64 (patch courtesy of
  Jarkko Hietaniemi), Jarkko then wondered whether it would be possible
  to probe for the existence of "snprintf()" and "vsnprintf()", as these
  functions provide a safer API for people doing XS work.

  Steve Peters delivered a first version, based on the assumption that
  since these functions are reasonably "new", one should be able to rely
  on the POSIX specification (that they return "int"s). Russ Allbery has
  apparently already been there and done that, and offered a few tips on
  the subject. A number of changes were committed by H.Merijn and Steve
  to get all this "snprintf"y goodness in on as many platforms as
  possible.

    More C goodness
    http://xrl.us/jihm

Teaching "B::Concise" about optimised constant subs

  Now that perl (space) optimises constant subroutines, Jim Cromie
  thought it was time that "B::Concise" knew how to display them. He had
  some problems with some constants in POSIX.pm that display as "FOO
  exists in stash, but has no START" and wondered if his work-around was
  correct.

  Considerable discussion followed, tweaking the code to improve its
  robustness, and veered into numerological considerations, with Jim
  Cromie offering a beer to whoever scores patch #27182.

    Concision
    http://xrl.us/jihn

Much ado about PVGV and PVLV

  PVGV are variables with attached magic. You can make them like so:

    my $mg = *STDIN;

  PVLV are lvalue variables. You make them this way:

    my $text = 'bergomask fairing';
    my $lv = \(substr $text, 2, 4);

  Nicholas was worried whether it could be possible to contrive a set of
  circumstances whereby, given the above...

      $mg = $lv;

  ...would fail. The issue at hand is that for a long time, a PVGV
  variable was the biggest thing you'll find in perl's guts. And
  "Perl_sv_upgrade" knows how to upgrade from anything, except a PVGV,
  because it was always the biggest.

  But now a PVLV is larger, and Nicholas was wondering whether it was
  possible to expose a PVLV without magic, which would then cause
  "Perl_sv_upgrade" serious indigestion.

  Yitzchak noted that the code already rules out the possibility of this
  occurring, but did find a problem with the following:

    sub TIEARRAY {bless{}}
    sub FETCH { *FETCH }
    sub FETCHSIZE { 3 }
    tie @a, "main";
    sub { $x = $_[0]; use Devel::Peek; Dump $x}->($a[2])

  $x winds up as a "PVNV" instead of a "PVGV". But I'm not sure of the
  ramifications, and in any case, the thread stopped there.

    Defensive coding
    http://xrl.us/jiho

Patch 26370 breaks "Acme::Meta"

  Andreas J. König noticed that since change #26370 it has become
  possible to create a file that can be "use"d but that perl cannot
  compile. One example was "Acme::Meta", which ordinarily wouldn't be
  particularly worrisome, but Andreas has a test in "Devel::Symdump"
  that is based on "Acme::Meta", so he had a problem.

  Rafael had a look, and narrowed the problem down to:

    bleadperl -Mstrict -le 'BEGIN{print defined $foo::{bar}}'

  and then committed change #26574 to make things work again.

    Have a look at my stash
    http://xrl.us/jihp

"Sys::Syslog" test problems following patch 26555

  Yitzchak spotted an intriguing error with "Sys::Syslog", due to the
  fact a test file being skipped when tested. When the code was
  corrected to make the tests proceed, an error cropped up with some XS
  code that generates constants.

  Nicholas said that he regarded the exact details of contstants as mere
  implementation details, so one should not be too surprised when the
  implementation details change. Rafael wanted to know who much code Out
  There uses this technique, and Nicholas described his helplessness at
  trying to ask gonzui to search for constant when what he really wanted
  was to look for "calls to a function named constant".

    Pay no attention to the subroutine behind the curtain
    http://xrl.us/jihq

Everyone's working too hard

  Nicholas looked at the number of patches committed to the codebase
  over the last eight years. After a lull in 2004, the changes have
  rolled in with a vengeance this year, which explained why Nicholas was
  having to spend so much time porting changes from "blead" back into
  "maint".

  Abigail pointed out that there have been more changes, less arguments
  but no new releases, There have been more than 6000 changes to the
  codebase since 5.8.0 was released three and a half years ago.
  Shouldn't we be ready for 5.10? The conversation continued on briefly
  about the roadmap to Perl 6, with Ponie and 5.12 both getting a
  mention.

    http://xrl.us/jihr

Cleaning "Time::Local"

  Dave Rolsky, wearing his "Time::Local" maintainer's hat, asked the
  porters whether anyone had objections to him running perltidy on the
  source, and parenthesising particularly hairy math expressions. For
  his own sanity as much as anything else. Rafael wasn't against the
  idea, and Johnathon Stowe pointed out that he ran "Term::Cap" through
  perltidy when he sent in his last patch and that no-one seemed to
  mind.

    http://xrl.us/jihs

"NV_ZERO_IS_ALLBITS_ZERO" "Configure" problem

  Jim Cromie wrote about the way he could provoke consistent smoke
  failures, and of his investigation as to what was happening. He
  narrowed it down to a snippet of code in "Configure"... but had no
  idea what to make of the inconsistent results he was getting.

  H.Merijn wanted to know the *precise* version of "gcc" that Jim was
  using. Nicholas tracked it down to some code of his, and supplied a
  fix.

    http://xrl.us/jiht

Bogus dirhandles raise no warnings

  Mark Jason Dominus filed bug #36889 against 5.8.0. The following code
  produces no output:

    perl -wle '$x=7; print readdir $x'

  Steve Peters replied that in blead, the above code now produces the
  error

    Bad symbol for filehandle

  Yitzchak thought that saying "unopened dirhandle" would be preferable.
  Steve pointed out that "Perl_gv_IOadd" generates the warning, and the
  exact text is unchanged since 5.003, which made him a little hesitant
  about making the change.

  Mark had also filed bug #36888, which was a slightly different
  problem: when mistreating "readdir", perl complains about a
  *filehandle* instead of a *dirhandle*. Steve Peters explained how the
  directory manipulation routines are supposed to follow a POSIX
  standard, but across all the platforms that Perl is supported, POSIX
  adherence is spotty. Nonetheless, he added some code to make perl
  produce a correct error message.

    Bad symbols...
    http://xrl.us/jihu
    ... and bad filehandles
    http://xrl.us/jihv

MinGW and lib/CORE/Win32.h

  Sisyphus/Rob wrote in with a problem concerning MinGW and a simple C
  program that does little more than include perl.h, but the compilation
  dies with problems about "intptr_t" and "uintptr_t" typedef
  redefinitions. He was able to trace the problem down to the use of
  "-ID:/MinGW/include" to indicate that said directory is searched for
  include files. He proposed a fix that involved a couple of defensive
  "#define"s in win32.h.

  Steve Hay had a look and noticed that in (the current) version 3.3
  MinGW had changed their io.h to pull in stdint.h, and this causes the
  duplicate definition errors. A work-around would be to downgrade to
  3.2 temporarily.

  Steve then committed an amended patch to incorporate the initial
  patch, safely bracketed in a "__MINGW32__" "#ifdef" section.

  And finally after a bit more detective work, Rob found the explanation
  for the bizarre circumstances of the error. It turns out that you can
  silently redeclare a type so long as it is in a system header, but if
  it isn't, then an error is raised. The "-I" switch was causing gcc to
  get confused and assume that the files were not in fact system
  headers.

    http://xrl.us/jihw

macro "newSVpvn"/"sv_catpvn_flags" errors

  Jim Cromie found that when doing "make" after a "make regen" on a
  recent version of "blead", the compilation would issue a huge number
  of errors:

    macro "newSVpvn" requires 2 arguments, but only 1 given

  ... but only when threads were configured. Rafael spotted the problem
  and connitted a patch to deal with the first level of macro expansion,
  so that instead of:

    #define newSVpvs(str) newSVpvn(STR_WITH_LEN(str))

  it now says

    #define newSVpvs(str) Perl_newSVpvn(aTHX_ STR_WITH_LEN(str))

  Both "a_THX_" and "STR_WITH_LEN" are macros, although the former is
  empty when building a non-threaded perl. And gcc cannot deal with the
  expansion of both macros at the same time. This made Gisle Aas sad,
  because he felt that it made "STR_WITH_LEN" less usefulness, because
  you can never use it directly as a argument to a function call, lest
  than function itself become one day encapsulated in a macro.

    http://xrl.us/jihx

VMS still compiles "blead" but a few tests fail

  Abe Timmerman was impressed that in spite of all the recent additions
  to blead, VMS still manages to compile it at change 26652. There are
  still a number of test failures, mainly to do with IO. John E.
  Malmberg went through the list, giving his current status/awareness on
  the issues.

  Paul Marquess chipped in with a tightened test for "Compress::Zlib" in
  the hope of silencing a warning (the existence of a file that should
  not be there possibly being led astray by VMS's capacity to store
  multiple versions of the same file).

  A discussion followed as to whether "Compress::Zlib" should be updated
  for 5.8.8 or 5.9.3 or both. Paul wasn't too sure, as he's done a lot
  of work on Compress::Zlib recently and felt it might need a bit of
  time to settle. (What Paul has done is to abstract the zlib code out
  from the core, in order to add other compression formats, such as
  bzip2 and lzop).

    #26652
    http://xrl.us/jihy

  Unforunately, by the time change #26660 hit the wire, things were
  looking less rosy, with a C compiler spitting out errors. And then
  Nicholas patched things up.

    #26660
    http://xrl.us/jihz

5.9.3 approaches

  Rafael wants to release 5.9.3 soon and called asked people to hold off
  committing big changes and start paying attention to smokes, testing
  CPAN modules and ancillary Perl tools (like "perldoc", "dprofpp" and
  the like.

  H,Merijn noted that "DBM::Deep" was recently broken on blead. Andreas
  said this was due to a bug in the module: the author had tripped over
  pseudo-hashes by accident. Dave Mitchell said that he wanted to land a
  fairly big change to "threads::shared" and including it in 5.9.3 would
  give it some needed testing.

  Abigail asked what the plans were from here to 5.10. Rafael replied
  that if a good lightweight IPC solution is found, it could be soon.
  Paul Marquess understood that one of the constraints of 5.10 was that
  there must be a Ponie capable of running it, but Nicholas had
  understood the opposite: a 5.10 ponie must match a 5.10 native perl.
  (Ponie is still looking for a pumpking/queen by the way).

  Yitzchak mentioned that the new-fangled constant subroutines merit an
  Incompatible Change entry, given that symbol tables now house new,
  previously-unknown beasties.

  Steve Hay found a problem in an XS module due to "STRINGIFY" in
  patchlevel.h, and the dependency chain between it and perl.h. He
  wondered how many other XS modules are in the same boat, but Gonzui
  was down. Gisle suggested changing the ouput of "perl -v" slightly,
  which would remove the need to use "STRINGIFY" at all in patchlevel.h.
  Ensued a somewhat arcane discussion about how best to represent the
  exact build level of a Perl release, whether maintenance, development
  or snapshot. Gisle came up with probably the best approach:

    new-style perl -v
    http://xrl.us/jih2

  Steve Hay found another problem in one of his modules, in a bit of C
  code that calls "NEWSV" asking for a length of 8, and gets back an
  "SV" who's length is 12, rather than 8+1 (space for a trailing "\0".
  Gisle thought it slightly dangerous: one shouldn't be worried if perl
  allocates a bit more memory than strictly necessary, especially if it
  reduces the need for expensive reallocations later on. Steve fixed his
  code.

    A call to testing
    http://xrl.us/jih3

  Jim Cromie called for a review of perl593delta, to make sure that all
  the recent goodness added to "blead" is accounted for when 5.9.3 is
  released. Nicholas Clark came up with an account of all the stuff he
  has been working on, as well as other work by people like Dave,
  Jarkko, Rafael, Andy Lester and John E. Malmberg.

  Then there was Yves Orton's regexp trie optimisation, and new versions
  of core modules, and configure probes for enabling more features from
  compilers.

    perl593delta review
    http://xrl.us/jih4

Configure won't handle versions 5.10.0 or 5.8.10

  Andy Dougherty noticed that the code in Configure performs simple
  scalar comparisons with version numbers using "lt". This is great when
  all versions, sub-versions and revisions are single digits, (after
  all, '5.8.7' lt '5.9.3'), but it is disasterous when the sub-version
  or revision goes to 10, and that could happen in a reasonably short
  time frame.

  This will have to be fixed up at some point in the future.

    http://xrl.us/jih5

Better "ithreads" shared variables.

  Dave Mitchell landed a mega-patch (in terms of improvement) that makes
  ithreads shared variables smaller and faster, by doing away with the
  "shared_sv" struct. "User-level locks and condition variables are
  slightly slower, while everything else is quite a lot faster", to
  quote the man himself. I think it stunned everyone into silence.

    http://xrl.us/jih6

Comparing the speed of stat operations

  R.K./Reikko filed bug #38179, reporting that "-X _" is 20% slower than
  "-X" and that "Fcntl"'s "S_ISDIR" is 9 times slower than a "-d", which
  benchmarks to show it. Nicholas Clark provided a detailed analysis,
  pointing out a couple of faulty assumptions and committed a change
  (#26701) to improve "Fcntl"'s lacklustre performance.

    http://xrl.us/jih7
    orphaned reply
    http://xrl.us/jih8

Comparing the speed of constant subs

  Jim Cromie made his own investigations on the performance of the new
  Nicholas Clark constant subs, and while they use much less space,
  sadly, they don't appear to go faster. No feedback as yet.

    http://xrl.us/jih9

New Core Modules

  "CPAN-1.81" released by Andreas. Support for "Module::Build", use of
  SHA-256 digests and bugfixes are the key points. By the end of the
  week, with the arrival of bug fixes, we were up to 1.83.

  "version-0.52" from John Peacock

    http://xrl.us/jiia

  "Sys-Syslog-0.12" uploaded by Sébastien Aperghis-Tramoni. This new
  version resolves the problems with "constant" noted earlier in this
  summary.

    http://xrl.us/jiib

Perl5 Bug Summary

  1506 open tickets, the lowest I've seen it since summary service was
  resumed in September. Woohoo!

    http://xrl.us/jiic

    The list
    http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

In Brief

  speedy shared "our" variables! The bug #37946, posted by Jerry D.
  Hedden a while back:

    noted in the In Brief section
    http://dev.perl.org/perl5/list-summaries/2005/20051212.html

  was fixed by Dave Mitchell. As an added bonus, code of the following
  nature:

    our @a : shared;
    for (1..10_000_000) {
      $a[$_ % 10_000]++;
    }

  is now 7% faster. Along with the other thread fixes committed by Dave
  this week, the overall improvement is a share more than 20%.

    Shared variables sped up
    http://xrl.us/jiid

  Nicholas thought about "perl_clone()" and "-Dusemultiplicity" for a
  bit, and realised that since the problem mainly affects Windows and
  that he doesn't have access to Windows development machines there
  wasn't much he could do about it. He made a few suggestions, such as:
  a better implementation of this area of the code.

    Windows dilemma
    http://xrl.us/jiif

  The "eval", "DESTROY" method and $@ bug (#38034) was considered to be
  working as documented. The problem is that there was no documentation.
  Mike Guy added the appropriate information (the trick is to localise
  $@ when using "eval").

    eval destroys $@
    http://xrl.us/jiig

  Removing NULL from Sys::Syslog. Sébastien Aperghis-Tramoni gave a
  status report on this issue and all other tickets (4) open on RT at
  this time.

    Syslog status
    http://xrl.us/jiih

  John E. Malmberg fixed a buffer overrun in vms.c and a "const" problem
  in utf8.c.

    vms.c
    http://xrl.us/jiii
    utf8.c
    http://xrl.us/jiij

  Robert Spier noted that 64bit perl uses a huge amount of virtual space
  (for example, 59Mb rather than 6Mb in bug #38132. Dave Mitchell
  suspected that it was due to massive objects being linked into the
  program, pointing to locales as a likely culprit. And he was right.

    Life in the 64bit lane
    http://xrl.us/jiik

  Bug #36837 talks about the way "B::Deparse" crashes and burns when it
  encounters a "ByteLoader"ed program. Stephen McCamant took the time to
  explain why it was so, and offers a short patch to make it deal more
  gracefully with the situation.

    C<B::Deparse> doesn't do C<ByteLoader>
    http://xrl.us/jiim

  Jim Cromie sent a patch to tweak the behaviour of "-V:foo" to make it
  play a bit more nicely with shell tricks. Rafael warned of backwards
  compatibility issues and wondered what a brand-new method would look
  like, and why. The discussion sort of stopped there.

    Tweaking C<-V:> command line switch
    http://xrl.us/jiin

  Joshua ben Jore wondered whether Robin's recent work on "%^H" means
  that user pragmas can be written, and sketched out an idea with
  "lint". Rafael explained that the change only means that "%^H" is now
  availale during string evals. Before, it used to disappear at the end
  of the initial compilation phase. But even now, "%^H" is still empty
  after compile time in regular code. I think the answer is no, then.

    User pragmas via %^H ?
    http://xrl.us/jiio

  Gisle thought that some code to process "-s" on the shebang line was
  redundant, and wondered whether it should be axed. Rafael agreed,
  suspecting a mis-applied patch.

    http://xrl.us/jiip

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."

Reply via email to