This Week on perl5-porters - 22-28 May 2006

  This isn't supposed to happen, obviously. It's unusual for "Configure"
  to pick up libraries that it can't, in fact, use. -- Andy Dougherty,
  commenting bug #39195

Topics of Interest

"Scalar::Util::weaken", to have or have not

  There was further discussion of the XS version of "Scalar::Util" and
  the fact that it offers a "weaken" function which is vital to avoid
  resource leaks when freeing self-referential structures.
  (Specifically, it offers a method from Perl-space to intervene
  directly on the underlying mechanism used for managing garbage
  collection).

    There were five philosophers at a table
    http://xrl.us/mxwq

  Adam Kennedy proposed "Task::Weaken" as an elegant way (insofar as a
  wart may be considered elegant) of dealing with the problem of trying
  to create a dependency on the particular "Scalar::Util" version that
  happens to contain the "weaken" routine.

    Not the other one
    http://xrl.us/mxwr

Following up on thread safety issues and opcode hints

  Last month, Nicholas Clark discovered some obscure bugs that could
  lead to race problems, with critical memory accesses not protected by
  mutexes, or memory allocations going astray. He managed to sort out a
  number of problems, and reported that there were a number of issues
  that would need to be addressed.

    The fearsome five
    http://xrl.us/mxws

Regular expression engine improvements

  Yves Orton ran a post-mortem on his recent work to convert "/[c]/" to
  "/c/", and realised that a lot of the difficulty can be traced back to
  the memory allocation strategy used. By its very nature, the strategy
  rules out a number of interesting optimisation possibilities, because
  a regexp is built with a two-pass compilation, and during the second
  pass, too much information has already been discarded, so at that
  point it is already too late to be able to consider a certain number
  of transforms.

  Save more information up front, and then you stand a better chance of
  being able to apply some useful optimisations to the resulting
  opcodes. Hugo van der Sanden wondered whether it would be possible to
  produce an opcode stream that would be amenable to processing by the
  existing peephole optimiser.

  Yves wanted to push a lot of the smarts from "study_chunk" and
  "regtail" into the parse phase. And wrapped up with a patch to tidy
  the debug output somewhat, and improve the trie code.

    Gentlemen, study your engine
    http://xrl.us/mxwt

  Andy Lester wanted to add some consting goodness to regcomp.c and
  regexec.c, which would have caused Yves considerable pain, since he
  was in the middle of some deep core hackery, and didn't want to face
  the nightmare of a three-way diff.

    Not now
    http://xrl.us/mxwu

  After that, Yves delivered a verily impressive patch of new, shiny
  goodness to the regexp engine. And if that wasn't enough, he also took
  Andy's own consting work and folded that in as well. After a bit of
  adjustment due to other patches going into "blead" at the same time,
  Rafael managed to get everything in place and running nicely.

    Right now
    http://xrl.us/mxwv

A tutorial on Unicode

  Juerd Waalboer wrote a very nice tutorial to help people get started
  with Unicode. A number of people contributed ideas and suggestions.
  Juerd sifted through these and produced a second version. As we went
  to press, inclusion in the core was pending.

    Unicode decoded
    http://xrl.us/mxww

"sprintf" and tainted format strings

  Dave Mitchell revisited the "sprintf('%n')" issue that made the
  headlines back in December, and thought that it might be wise to apply
  taint checks to the format string (the first argument to "sprintf",
  proposed a relaxed or strict interpretation to what tainting would
  imply and asked for opinions on the matter.

  Andy Lester favoured the strict approach (*any* use of a tainted
  format string fails), but recalled that the idea had been dismissed
  rapidly when put forward during the previous discussions. Steve Peters
  thought that it was more a case of being set aside than anything else,
  and expressed surprise at the fact that format strings do not already
  have taint checking.

  Rick Delaney wondered what exactly did Steve and Dave mean, and put
  forward a couple of snippets to see if he understood the issues.

    Just when you thought it was safe
    http://xrl.us/mxwx

Shooting yourself in the foot with overloading

  Jarkko Hietaniemi was led astray by a somewhat unhelpful "Use of
  uninitialized value in hash element" warning caused by overloading,
  and wondered if a better message could be generated if overloading was
  involved.

  While not directly answering Jarkko's question, Joshua ben Jore
  mentioned that even more overloading fun can be had when using
  "Devel::Cover", since applying "defined" to an object will trigger
  stringification there, but not during normal execution. Paul Johnson
  was most surprised to hear this, and asked for a test case. David
  Landgren provided a small example that exposes the problem.

  Yves Orton confirmed that he had run into this problem when developing
  "Data::Dump::Streamer", and had had to jump through considerable hoops
  to work around it.

    Gun, meet foot
    http://xrl.us/mxwy

Patches of Interest

Test infrastructure improvements

  Yves Orton noticed a problem due a recent tweak to "Test::Harness",
  and fixed it so as to stop harness from printing the summary table
  header for each row. Which does, it should be agreed, get tedious
  after a while.

    No more excessive scrolling
    http://xrl.us/mxwz

  At about the same, Andy Lester changed "t/TEST" to queue up the names
  of the tests that fail, to dump them at the end of the run. This means
  one gets all the failing tests in one convenient chunk.

    No more scrolling back
    http://xrl.us/mxw2

More goodness from Andy

  In his ongoing quest to const, Andy Lester sent in some refactoring
  for av.c, which crushed some incorrect uses of "SvREFCNT_inc", removed
  unnecessary temporary variables and brought the usual suspects into
  line.

    http://xrl.us/mxw3

  And a parameter to "Perl_magic_existspack" in mg.c that could be made
  "const".

    http://xrl.us/mxw4

  And a similar treatment for "Perl_gv_check" in gv.c.

    http://xrl.us/mxw5

"Pod::Html" should not convert "foo" to ``foo''

  Gisle Aas hated this mis-feature, since most modern fonts produce a
  spectacularly ugly result. After a bit of a detour into the realm of
  "troff", it was decided to just use plain double-quotes instead.

    http://xrl.us/mxw6

Relaxing the tests in Dynaloader.t

  Jarkko found that Sébastien Aperghis-Tramoni's tests in Dynaloader.t
  were too platform-specific to be useful. After a bit of discussion it
  was decided to loosen up the test which attempted to trap the message
  generated when the loading of a non-existent shared library is
  attempted.

    Eggs, bacon, sausage and spam
    http://xrl.us/mxw7

New and old bugs from RT

Memory leak from "eval "sub { \$foo = 22 "" (#37231)

  This used to leak memory (that is, trying to "eval" a broken
  subroutine definition). Dave Mitchell made it leak less. And then
  after sitting back and looking at his handiwork, Dave made completely
  water-proof. Nicholas Clark still managed to poke a hole in it.
  Unruffled, Dave countered with a King's Gambit that appeared to keep
  any remaining errant allocations in cast-iron casing.

    http://xrl.us/mxw8

"IPC::Open2::open2" failures (#39127)

  Dave Mitchell had a look at the source code, and noted that there was
  a race condition depending on whether the child dies before or after
  the parent tries to write to it. Furthermore, there is no easy way to
  fix the problem as is, which is why "IPC::Run" may be a better
  alternative all round. Dave suggested a documentation patch to clarify
  the situation.

    http://xrl.us/mi7r

"IO::Socket::connect" returns wrong "errno" on timeout (#39178)

  "mlelstv" showed some discrepancies in error messages depending on
  whether it was the first or subsequent time that a socket connection
  failed, and traced it down to a $! not being cleared before a system
  call.

    http://xrl.us/mxw9

Optimizer bug in "qr//" flags (#39185)

  "johnpc" reported a bug in patterns using "qr//" flags. Dave Mitchell
  reported that this had been fixed in "blead", but not yet backported
  to the maintenance branch.

    http://xrl.us/mxxa

CPAN configuration stuck at "Select your continent" (#39186)

  Mark-Jason Dominus was in the middle of configuring his "CPAN" client
  when things started to go horribly wrong. Andreas Koenig wanted to
  have a look at Mark's MIRRORED.BY file. Mark took one look at the file
  and saw that it was corrupt (well, empty), and therefore knew what to
  do.

    Delete and start over
    http://xrl.us/mxxb

"perlfunc" on "reverse" in scalar context (#39187)

  Ted Pride had never noticed that "reverse" also works on scalars:

    my $rev = reverse('forward'); # $rev contains drawrof

  mainly because the documentation is slightly too clever for its own
  good.

    http://xrl.us/mxxc

Error Report (#39195)

  Sriram Madduri had configured a perl build, but at link-time the build
  failed with some unknown libraries that "Configure" had specified.
  Andy Dougherty spotted what he thought was the cause of the problem,
  but we didn't hear back from Sriram, so we don't know if it's fixed.

    http://xrl.us/mxxd

"File::BOM" hangs during test (#39211)

  Redirected to the module author. "File::BOM" isn't core.

    y otras chicas del montón
    http://xrl.us/mxxe

Null pattern causing expected behaviour (#39212)

  If it's causing the expected behaviour...

    it's not a bug
    http://xrl.us/mxxf

Optimiser doesn't constant fold $] or $^V (#39214)

  Benjamin Smith wished that $] or $^V were constant-folded. This could
  be useful, because then one could include sections of code for
  specific versions of Perl that would be optimised away at compile time
  if not applicable. Unfortunately, since these variables are, well,
  variable, and not constant (in other words, you may assign to them),
  this isn't going to work.

    http://xrl.us/mxxg

"Pod::HTML" should use &entities; for quotes (#39215)

  Johan Vromans thought that this would be a nice idea. Gisle Aas
  explained why it might be a bad idea, and that in any event,
  "Pod::HTML" had been tweaked to no longer emit the pugly `` and ''
  blots.

    http://xrl.us/mxxh

Compiling With "nmake" (#39226)

  William C. Smith wanted to compile Perl with "nmake". Yves showed him
  how to do just that.

    http://xrl.us/mxxi

Perl5 Bug Summary

  The previous week's bug summary, omitted from the previous summary
  (oops):

    7 created + 12 closed = 1507
    http://xrl.us/mxxj

  And this week:

    8 created and 22 (!) closed = 1493
    http://xrl.us/mxxk

  Hey! we broke through the 1500 barrier!

    Now, with added shinyness
    http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

New Core Modules

  *   Version 0.60 of "version" had a bit of trouble settling down in
      "blead", but after smoothing a few rough edges it all came
      together.

        http://xrl.us/mxxm

  *   "Test-Harness" 2.60 was released by Andy Lester.

        http://xrl.us/mxxn

  *   "Sys-Syslog" 0.14 was released by Sébastien Aperghis-Tramoni,
      featuring a number of bug fixes, and enhancements to the both the
      code and test suite.

        http://xrl.us/mxxp

In Brief

  Marcus Holland-Moritz documented and completed a few holes in the
  orthogonality of literal string macros, mainly as a service to XS
  developers. Applied.

    http://xrl.us/mxxq

  Anno Siegel had some difficulties adding a core module because it was
  building man pages when it was not supposed to. Rafael provided the
  necessary "MakeMaker" magic to make it do the right thing at the right
  time.

    http://xrl.us/mxxs

  Andy Lester's second refactoring of pp_sys.c from last week went in as
  change #28279.

    http://xrl.us/mrb3

  Alberto Simões thought that the problem of regexp slowness with $' and
  $` could be solved elegantly by making them lexical. Dave Mitchell
  demonstrated why this was not possible (existing code would break).

    http://xrl.us/mxxt

  Torsten Foertsch wanted to know how to trap a warning generated at
  global destruction time. The test infrastructure doesn't appear up to
  the task, because at global destruct time, all the tests have long
  since finished. chromatic recommended running the test in a child, and
  examining its output.

    http://xrl.us/mxxu

  perlhack.pod was confused about "POPSTACK", so Dave Mitchell and Jan
  Dubois tightened the documentation. Deep core hackers rejoiced.

    http://xrl.us/mxxv

  Dave also improved the "-Dpv" parser debugging output.

    http://xrl.us/mxxw

  Philip M. Gollucci was having trouble with "Perl_croak" and "nullch"
  at patch level 27529.

    http://xrl.us/mxxx

  Jarkko noticed that there are no execute bits on semaphores on Mac
  OS/X, and tweaked the documentation to clarify the situation.

    http://xrl.us/mxxy

  Alex Davies cooked up a patch to "shrink the object size for
  pp_sys.c", but as the savings came at the cost of code legibility,
  with no apparent run-time benefit, Rafael chose to decline it.

    http://xrl.us/mxxz

About this summary

  This summary was written by David Landgren. Yes, late enough to be
  next week's summary. Sorry, this week I have been dealing with
  assorted crises.

  Last week's summary attracted a response from Dave Nicol, who
  explained his linked list master plan in more detail.

    Action stations
    http://xrl.us/mxx2

  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, 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