This Week on perl5-porters - 24-30 April 2006

  Lots of work consting, compiling and testing perl this week.

Topics of Interest

Running hard just to stand still

  Nicholas Clark commented on Jerry D. Hedden's cry for help concerning
  the slow application of his "threads" patches, and wondered what do
  other open source languages, such as Lua, Python, Ruby and Tcl cope
  with the day-to-day drudgery of sifting through bug reports,
  shepherding the changes to the code base, and generally making sure
  that the project keeps moving forward.

    Holding the fort
    http://xrl.us/k7mm

New taint tests cause threaded FreeBSD to hang

  Nicholas Clark saw that some new taint tests were causing perl to hang
  on recent versions FreeBSD, and wondered what to do about it. Steve
  Peters reproduced the problem on OpenBSD as well.

  On the other hand, Dominic Dunlop gave Mac OS/X Darwin a clean bill of
  health (despite the fact that it is derived from FreeBSD).

  Anton Berezin (the man for Perl on FreeBSD) suggested linking with a
  different threads library. Everything worked when Nicholas tried that,
  leading him to conclude that hints/freebsd.sh could do with an update.

    I'll give you a hint
    http://xrl.us/k7mn

Rebuilding XS modules for threaded perl

  Peter Scott wanted some "best practices" advice on how to build a
  threaded and non-threaded perl, and have them coexist peacefully,
  falling back on the unthreaded perl for all the ancillary tools such
  as "perldoc" and "perlbug". Specifically, and hence the title of his
  message, he wanted to know if he could get away with using the same
  compilation of XS modules for both perl instances.

  Jan Dubois clarified the situation, explaining that threaded and
  unthreaded perls are binary incompatible, so modules with XS
  components need to be recompiled, and need to be installed in separate
  locations (so that the associated perl picks up the right libraries
  for itself).

  Andy Dougherty welcomed Peter's suggestion to patch the documentation
  with his findings.

We build them here, we build them there, we build these modules everywhere
    http://xrl.us/k7mo

Using "/" and "X" in "unpack"

  Peter Dintelmann had a question concerning the ability to walk back
  the stream with "unpack". He was trying to understand how to do it but
  was struggling with the paucity of information. Sadahiro Tomoyuki
  explained exactly how it worked, even going so far as to examine the C
  source and realise that the error checking could do with a little
  tightening up.

    http://xrl.us/k7mp

  Tomoyuki's explanation was just what Peter needed.

    http://xrl.us/k7mq

Refitting t/op/*.t files to use "test.pl"

  David Landgren started to work on refitting t/op/pat.t to use
  "test.pl", which would make it simpler and easier to add new tests. He
  had a couple of questions, mainly concerning how to modernise some
  fairly archaic tests.

  Andy Lester was thrilled. Nicholas Clark recalled that one useful
  feature that test.pl does not have but should, is the management of
  temporary files. Being able to create them on demand, and clean them
  up automatically at the end of the script. Apparently this sort of
  make-work code is scattered throughout the test suite.

    Into the third millenium we go
    http://xrl.us/k7mr

  David also had a look at a section in t/op/pat.t for patterns that
  warn when compiled and wondered whether a particularly intricate
  collection of closures was in fact a no-op. No takers.

    The sound of chain-saw warming up
    http://xrl.us/k7ms

  The new version was finally delivered. It generated a lot of
  discussion, but alas, remained unapplied.

    http://xrl.us/k7mt

Use of "eval" in t/op/append.t

  David then looked at t/op/append.t and saw that some of the test
  results were "eval"'ed (rather than the thing being tested), and also
  wondered why the tests were tested with regexps instead of comparison
  operators. Sadahiro Tomoyuki explained that the tests were there to
  see if concatenation stops on "\0" (binary zero), and regexps were
  used instead of comparison operators, in case the comparisons also had
  an equivalent bug which stopped them scanning on "\0".

  Which led David to wonder if there wasn't a just as likely possibility
  for regexps to also stop on "\0", in which case something like
  "rindex" might be better, since it would never encounter any dubious
  characters.

  Tomoyuki thought that the "eval" was no longer necessary (although it
  does mean that things happen at run-time rather than at compile-time,
  which may have an influence).

    http://xrl.us/k7mu

  Elsewhere, David looked at the tests in t/op/grep.t and was surprised
  to discover that some tests can pass, and print "ok", or they can
  fail, and print... nothing.

    As long as everything works
    http://xrl.us/k7mv

Perl on Win98

  David Bree asked for advice on compiling perl on Windows 98 using
  MinGW. He had in fact compiled it, but was wondering whether it was
  safe to install, since about five percent of the tests failed. Which
  doesn't seem to shabby. Unfortunately, no-one was able to offer any
  advice.

    Maybe if we knew what had failed
    http://xrl.us/k7mw

Merging "wince" and "win32" directories

  Yves Orton started to tackle the long-talked-about much-awaited merge
  of the "wince" and "win32" directories, that contain the
  platform-specific extensions for the Windows CE platform on one hand,
  and Windows in general on the other.

  Vadim Vladimirovich Konovalov (hereafter referred to as Vadim)
  promised to add some improvements to the WinCE side, and was pleased
  to see that someone was taking the necessary time to clean up the
  source tree. He also mentioned the existence of a "perlce.sf.net"
  project, but that it is pretty calm at the moment.

  Yves's approach was to create a new "win" directory, starting with the
  contents of "win32", and then see what happened as he pushed and poked
  bits of "wince" into it, until there is nothing left over.

    Where do you want Perl to go today?
    http://xrl.us/k7mx

t/op/stat.t failures on "z/OS"

  Mohammad Yaseen reported the difficulties he was having with 5.8.7 on
  z/OS (the IBM mainframe OS). In this instance, t/op/stat.t was failing
  with messages about /dev/tty, depending on whether the test was run in
  single-user or multi-user mode.

  Jim Cromie asked for some specific details, to help understand what
  single-user and multi-user means in the context of z/OS.

    http://xrl.us/k7my

Clawing scarce bits back from the magic vtable structure

  As Nicholas happily integrated a change from "blead" to "maint"
  concerning bitmask flags on a field in the magic vtable structure, he
  realised that there weren't a whole lot of spare bits that remained,
  and even though code with the first definitions of those flags has
  been out in the wild for some time, he wondered if some of the newer
  bitmask flags could be reeled back in.

  Dave Mitchell thought that three flags could be freed up, since they
  were either marked as being wildly experimental, or not documented at
  all.

    Peak bits
    http://xrl.us/k7mz

"taint" and "fork" on Win32

  David Golden had been taking a VanillaPerl on Win32 for a spin, and
  noticed that "Test::WWW::Mechanize" kept dying a horrible death. Carl
  Franks and he narrowed it down to a delightfully simple snippet: "perl
  -Te fork" and then searched the bug database but found nothing
  similar. So he wanted to know whether to file a bug report, or whether
  the failure mode was common knowledge. No takers.

    Can't have your fork and taint it
    http://xrl.us/k7m2

Is a "FileHandle" "IO::Seekable"?

  Adam Kennedy related the problems he was having after having taken
  over the maintenance of "Archive::Zip". In a nutshell, he needs to
  have seekable file handles. And yet it turns out that at one point in
  the test suite, a file handle winds up being connected to a pipe,
  which definitely is not seekable. So Adam wanted to know if something
  was truly seekable, as opposed to merely having a "seek" method.

  The best Randy W. Sims could come up with was a kluge with file test
  operators.

    Seeking advice
    http://xrl.us/k7m3

Patches of Interest

The continuing saga of the improvements to the regexp engine

  Yves Orton repatched his trie work to simplify the sharing of the code
  base between "blead" and "maint".

    Nice trie
    http://xrl.us/k7m4

  5.8.0 could be supported as well, if there was some way to fake
  "SAVEBOOL" via ppport.h.

    http://xrl.us/k7m5

  Reini Urban showed what needed to be done to get it to compile with
  the ActivePerl source.

    http://xrl.us/k7m6

    http://xrl.us/k7m7

"const"ing goodness

  Andy Lester took a crack at adding some "const"ing goodness to doop.c,
  but Sadahiro Tomoyuki pointed out a mistake. So Andy took had another
  go at it. Not applied, as far as I can see.

    http://xrl.us/k7m8

  He then killed a modal boolean that controlled the behaviour of
  "S_glob_2inpuv" in sv.c, preferring to split the functionality into
  two different routines. Applied.

    http://xrl.us/k7m9

  Andy then carried on, inlining a couple of static routines in perl.c.
  Also applied.

    http://xrl.us/k7na

  Andy found reasons to use "NOOP" macro, part one.

    http://xrl.us/k7nb

  Moving right along, he removed some unused (or rather, useless) casts
  in regcomp.c and regexec.c, which prompted Yves Orton to comment that
  when he was working on adding trie support to the regexp engine, he
  found those casts to be quite helpful in figuring out what was going
  on.

    http://xrl.us/k7nc

  He had more luck removing unused context in sv.c.

    http://xrl.us/k7nd

  And another context parameter in pp_ctl.c, with some "const"ing
  goodness thrown in for good measure.

    http://xrl.us/k7ne

  And some more places in which he could tweak the usage of
  "SvREFCNT_inc" calls.

    In mg.c
    http://xrl.us/k7nf

    and pp_ctl.c
    http://xrl.us/k7ng

  And some compiler warnings in perlio.c.

    And that's what Andy did this week
    http://xrl.us/k7nh

Using "v?snprintf"/"strlcpy"/"strlcat" when useful

  Jarkko Hietaniemi patched a number of files to use the C run-time
  equivalent string routines (that have been vetted as working correctly
  at build time) rather than alternative, less safe routines. Jarkko
  asked for eyeballs to look carefully at the patch in case there were
  any glaring errors.

  Steve Peters took the patch for a spin on the platforms he had lying
  around. In the meantime, Jarkko found a section in pp_ctl.c that he
  had missed.

  H.Merijn Brand wondered what the status was concerning these routines,
  since on some proprietary platforms, the C source to these routines
  had some fairly fussy copyright noticed attached. Steve said he had
  dug up the source to the Perl routines from an old copy of "inn", and
  believed that they were in the public domain.

  Russ Allbery said that he authored "inn", and that Steve was perfectly
  entitled to having taken them for use in perl. This prompted H.Merijn
  to suggest removing the "#ifdef" trickery surrounding the calls to
  these routines, and instead use them everywhere, and bundle Russ's
  public domain code to be used on platforms that don't provide them.

    New uses for old
    http://xrl.us/k7ni

Symbian, "dVAR" and "-DPERL_GLOBAL_STRUCT_PRIVATE"

  Jarkko continued on his "dVAR" quest with
  "-DPERL_GLOBAL_STRUCT_PRIVATE" to move Perl C run-time data to the
  heap. As he marked a previously "const" variable as non-constant, Andy
  Lester insisted on a full report. Jarkko explained what had happened,
  and Andy thought of another approach. Jarkko urged Andy to proceed
  cautiously, as it concerns only the Symbian port as is also rather
  fragile. Any changes must be tested with "PERL_GLOBAL_STRUCT_PRIVATE"
  and "PERL_GLOBAL_STRUCT"

    Do not meddle in the affairs of Jarkko
    http://xrl.us/k7nj

  And then sent in another "dVAR" patch, this time to make perl's
  "malloc" happy, plus some corrections to fix up some signed/unsigned
  mismatches that had crept in when no-one was looking.

    http://xrl.us/k7nk

"gcc -ansi -pedantic" noise reduction

  The patches kept rolling in from way up north, this time cleaning up
  the worst of the damage when one lets "gcc -ansi -pendantic" loose on
  the source (it screams a lot). He recommended that porters build perl
  from time to time using these two compiler options, and taking the
  appropriate action based on the fallout. Steve Peters applied the
  patch. Andy Lester was pleased.

    I dare you
    http://xrl.us/k7nm

Another handy tip for the code police

  And wrapping up, Jarkko offered a handy tip for people who enjoyed
  torture-testing the compilation of the codebase, to use the "-O" "gcc"
  compiler switch in conjunction with "-Wall" (warn about everything).
  It turns out that some code checks don't kick in until the optimizer
  is brought to bear on the code. Andy Lester wanted to know if
  different "-O" levels kicked in successive classes of warnings.

    Cheap trick
    http://xrl.us/k7nn

  Andy posted the armada of compilation switches that he uses to compile
  the source.

    -Wextra is good for a laugh, too
    http://xrl.us/k7no

Patching various t/op test files to use test.pl

  David Landgren sent in a some patches to for files in t/op to use
  test.pl, instead of their home-grown each-one-different methods. One
  main benefit is that now the tests have names, so when test 43 fails,
  it becomes trivial to locate it in the source file.

  In the process, he also found an nice bug of a string comparison using
  numeric equality in t/op/loopctl.t.

    t/op/auto.pl
    http://xrl.us/k7np

    t/op/defins.pl
    http://xrl.us/k7nq

    t/op/delete.t
    http://xrl.us/k7nr

    t/op/glob.t
    http://xrl.us/k7ns

    t/op/hashwarn.t
    http://xrl.us/k7nt

    t/op/loopctl.t
    http://xrl.us/k7nu

    t/op/sort.pl (or what I did over my lunch hours this week)
    http://xrl.us/k7nv

  (Summariser's note: At first I wasn't sure how I was going to
  summarise this, but Jim Cromie sort of forced my hand).

    It's all Jim's fault
    http://xrl.us/k7nw

Clarifying the "Fatal.pm" documentation

  Tom Regner had a discussion with Ilya Zakharevich on
  "comp.lang.perl.modules" about "Fatal", and the result of the
  discussion was a POD patch. Unapplied.

    http://xrl.us/k7nx

Watching the smoke signals

Smoke [5.9.4] 28020 FAIL(M) MSWin32 Win2000 SP4 (x86/1 cpu)

  Abe Timmerman identified this failure as the result of the Windows
  part of the code base not finding change #27992 to its taste.

    http://xrl.us/k7ny

Smoke [5.9.4] 28009 FAIL(Xm) irix 6.2 (IP22/1 cpu)

  In this report, it appears that something had gone wrong with the
  "gcc" C run-time library during the configuration phase.

    http://xrl.us/k7nz

New and old bugs from RT

Many bizarre bugs

  Animator discovered that the bizarre code leads to bizarre ARRAY
  assignment (bug #9374) had been fixed in 5.8.8 and 5.9.3. Andreas
  Koenig identified change #25828 as being the one responsible for the
  fix.

    http://xrl.us/k7n2

  In a similar bug report (#3112), Animator simplified the snippet that
  causes a bizarre copy of ARRAY in "last". No-one attempted a fix for
  the time being,

    for (1) { push @a, last; }
    http://xrl.us/k7n3

  and bug #9540 still produced "Bizarre copy of HASH" errors,

    @{my %self; %self}{1} = 1;
    http://xrl.us/k7n4

  while #22238 continued to give you a Bizarre copy of HASH in leave

    @{ my %self; %self }{1} = 1;
    http://xrl.us/k7n5

  and for the last in a series of bizarre bug reports, Animator noted
  that bug #36229 (Bizarre copy of IO) is a duplicate of an earlier bug
  (#3314).

    $a = ${*STDOUT{IO}}
    http://xrl.us/k7n6

  So don't do that.

"unpack" fails on utf-8 strings (#33734)

  Nicholas Clark returned to the problem raised by Marc A. Lehmann back
  in early 2005 and explained what he had done with Ton's code, which
  fixed up the problem in a perhaps non-backwards-compatible manner.
  Glenn Linderman wondered whether the new "pack"/"unpack" semantics
  could not be bundled into a loadable module and made available via a
  feature pragma.

  Marc Lehmann thought that "unpack" should simply be fixed (the problem
  is how "unpack" behaves in the face of UTF-8 data) once and for all.
  If the fix is too major, then it will appear in 5.10. If it can be
  arranged to not break anything already relying on the current
  behaviour, then it can be fixed in 5.8.

    http://xrl.us/k7n7

Perl build problem (failing "File::Basename") (#38891)

  Dominic Dunlop nudged this bug report, requesting more information. No
  response received as we went to the press.

    http://xrl.us/k7n8

double free detected (#38943)

  Ulrich Windl coaxed a "*** glibc detected *** double free or
  corruption" out of the debugger. Neither Dave Mitchell nor Nicholas
  Clark were unable to reproduce the problem on the perls and platforms
  they had on hand.

  Michael Shroeder remembered that Ulrich had already reported a similar
  problem with "Term-ReadLine-Gnu", and wondered if the two problems
  were related, and Ulrich concurred that it appeared to be a problem
  concerning the C "libreadline" library in his SuSE distribution.

    SEP
    http://xrl.us/k7n9

debugger can't breakpoint until module loaded (#38966)

  Albert Cahalan was debugging some unfamiliar code, and wanted to set a
  breakpoint in some as-yet-unseen code, and wondered why the debugger
  was refusing to do so, given that "gdb" will prompt for more
  information when in similar circumstances when debugging C code.

  Rafael wondered if "b postpone *subname*" would do the trick. Albert
  agreed that that was just the ticket, but thought that the debugger
  could be tweaked to ask whether one wished to postpone the breakpoint
  if the routine was currently unknown to the debugger.

  People missed the point, and started making fun of Albert, suggesting
  that if he didn't know what he wanted to debug, he should connect the
  debugger to "Symbol::Approx::Sub" in order to breakpoint on a routine
  that most closely matched.

  Albert replied calmly with an example involving "gdb" that made
  perfect sense. The main obstacle to adding this functionality is that
  everyone suddenly appears to be very busy Doing Other Stuff when it
  comes to patching the debugger.

    Wouldn't it be nice
    http://xrl.us/k7oa

t/op/getppid.t fails in a Solaris Zone (#39010)

  Mark Suter reported a failure in t/op/getppid.t, that is due to a
  changed assumption concerning the owning pid of an orphaned process
  (hint: it is not 1). It turns out that Sun had been kind enough to
  loan the porters a Solaris machine with zones set up, and the bug had
  been found and fixed four weeks ago.

    Coming to a 5.8.9 near you
    http://xrl.us/k7ob

Attempt to free unreferenced scalar (#39012)

  Salvador FandiƱo filed a bug report with a nice short snippet showing
  how to provoke an "Attempt to free unreferenced scalar" error. After a
  bit of thought, Dave Mitchell showed how it could be simplified even
  further. And then after a bit more thought, patched scope.t to fix the
  problem, and rolled the snippet into a test for t/op/local.t.

    All in a day's work
    http://xrl.us/k7oc

Segfault in functional streams/bug in closure allocation? (#39017)

  "[EMAIL PROTECTED]" tried to create an infinite stream with closures
  but the only thing he managed to create were core dumps. Dave Mitchell
  explained that it wasn't actually closure-related, but yet another
  manifestation of the recursive implementation used to free recursive
  data structures.

    Make a deep structure, eat up all your C stack
    http://xrl.us/k7od

  Christian returned with a follow-up, showing how he had managed to get
  it to almost but not quite work (but at least it no longer crashed).

    http://xrl.us/k7oe

  The thread returned under the title of Garbage collection issues later
  on, where Christian wondered about a couple of issues he was having
  with his code. Dave Mitchell explained precisely what was happening,
  and then asked Christian to explain what he was really trying to do.
  Once Dave understood what Christian wanted, he realised the proposed
  code was far too complex, and sketched out an alternative approach,
  with negligible memory requirements to boot.

  Yves thought that what Christian was trying to do was shoehorn Lisp
  idioms into Perl, and suggested he take a look at Mark-Jason Dominus's
  Higher Order Perl.

    http://xrl.us/k7of

    HOP to it
    http://hop.plover.com/

"Pod::Html" generates incorrect href's in some html anchors (#39020)

  "bgstewart" filed a problem with some incorrectly generated HTML from
  POD. Steve Peters explained that it had already been fixed. Tels
  thought there was a bug in the source POD, and backed up his assertion
  with a report from "podcheck". Russ thought the POD was valid, just
  somewhat unusual.

    Merely plain, not simple
    http://xrl.us/k7og

"Tie::Memoize::EXISTS" not caching the value (#39026)

  This was reported as a bug, but no-one commented on it.

    http://xrl.us/k7oh

Perl5 Bug Summary

  Another decline in the number of tickets noted this week.

    13 created + 27 closed (yay!) = 1525
    http://xrl.us/k7oi

    What outstanding bugs
    http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

New Core Modules

  *       The "dor" ("//") patch was refreshed by H.Merijn Brand as
          dor-588-27985.diff, following some tweaks to perly.y.

            http://xrl.us/k7oj

  *       "Module::Build" 0.28 released by Ken Williams.

            http://xrl.us/k7ok

          This followed a patch to "blead" from Steve Hay to fix up some
          problems on Win32 following the upgrade of "Test-Harness".

            http://xrl.us/k7om

In Brief

  The "select((select(OUTPUT_HANDLE), $| = 1)[0])" thread evolved into a
  discussion about sequence points in Perl.

    http://xrl.us/k2zs

  Rafael looked at Marcus Holland-Moritz's patch to clean up 212
  warnings emitted by "gcc-4.2" and applied 4 out of 5 parts, the last
  part seeming to be superfluous. Marcus commented in more detail on the
  reasons behind the patches.

    http://xrl.us/k2yk

  Craig Berry made a belated followup to Ken Williams's "File::Spec"
  changes for VMS, giving it a clean bill of health.

    http://xrl.us/k2zr

  Nicholas dropped some of recent tweaks to "blead"'s version of
  "Test::Harness" in order to keep it perfectly synchronised with the
  latest CPAN version.

    Stamping out gratuitous differences
    http://xrl.us/k2y4

  The problem concerning multi-line attributes and "Attribute::Handlers"
  noted by Bas van Sisseren (#38475), and its required fix to toke.c was
  applied by Rafael, and the example was turned into a regression test.

    Won't see that again
    http://xrl.us/k7on

  Rafael also applied the fix suggested in opening "|-" triggers
  unjustified taint check. (#38709)

    http://xrl.us/k7oo

  Jerry D. Hedden continued to sync "threads" with "blead". Applied.

    http://xrl.us/k7op

  And then he consolidated some "XS" functions. Also applied.

    http://xrl.us/k7oq

  Here's one that was missed in "maint":

    http://xrl.us/k7or

  And another that was caught:

    http://xrl.us/k7os

  Nicholas Clark revived the "POSIX" build fails in "bleadperl" and
  "RTMAX" patch bug (#36951). David Dyck confirmed that it is still
  alive and kicking,

    http://xrl.us/k7ot

  and closed out the utf8 overload stringify bug (#34297), saying that
  it was fixed in "blead" and that he hoped to backport it to 5.8.9.

    http://xrl.us/k7ou

  He then showed how "uc"/"lc"/"ucfirst"/"lcfirst" fail on typeglobs on
  5.8.8 in bug #39019. The bug doesn't manifest itself on "blead", but
  that is because it's typeglob implementation is quite different these
  days.

    http://xrl.us/k7ov

  Joshua ben Jore wondered how to interpret the meanings of the MAD
  keys.

    No-one else knew, either
    http://xrl.us/k7ow

  Nicholas Clark wondered why "lc" and friends don't taint empty strings
  when locales are in effect (bug #39028). Sadahiro Tomoyuki gave his
  thoughts on the matter, explaining that perl was probably Doing The
  Right Thing.

    http://xrl.us/k7ox

  Abe Timmerman fixed up "snsprintf" and "vsnsprintf" problems for MSVC
  on the Windows platform.

    http://xrl.us/k7oy

About this summary

  This summary was written by David Landgren.

  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