This Week on perl5-porters (7-13 July 2003)
[email protected] (Rafael Garcia-Suarez) Mon, 14 Jul 2003 10:27:29 +0200
| Newsgroups | perl.perl5.porters,perl.perl5.summary |
|---|---|
| Message-ID | <[email protected]> |
This Week on perl5-porters (7-13 July 2003)
In a two-release-candidate-week, there are plenty of things to
summarize. Learn what happened behind the scenes : random seeding of
hashing, deprecation of vstrings, signals, floats, and the other things.
5.8.1-RC1 and -RC2
As I was saying, this week, Jarkko Hietaniemi packaged *two* release
candidates of the upcoming maintenance release of perl, 5.8.1. There
won't be another one before two weeks, because he's on a well-deserved
vacation now. That gives you plenty of time to test the RC2 with your
favourite applications !
http://www.cpan.org/authors/id/J/JH/JHI/perl-5.8.1-RC2.tar.gz
Random hash seeding and security
At some point between the two release candidates, Jarkko decided to
change the default setting for the hash seed randomization patch (which
is discussed for two weeks -- see our previous episodes.) For RC1,
hashes were randomized by default ; in other words, the hash key for a
given string changes across executions of perl -- and with it, the order
in which keys() returns the keys of a given hash, constructed in a given
way. -- This is no longer true with 5.8.1-RC2, where this feature must
be explicitly enabled, either by an environment variable, or by a
configure-time compilation flag.
Chip Salzenberg, Tels, and other members of the crew expressed
disapproval and think that randomization (that benefits to security)
should be the default -- arguing that only broken programs will break
with this change anyway.
RC2 is out : http://xrl.us/lzr
Scott A Crosby confesses he is now analysing worst cases of regular
expression matching.
http://xrl.us/lzs
vstrings RIP
Version strings (a.k.a. vstrings) are now Officially Deprecated in perl
5.8.1. They will be removed in perl 5.10.0. This is apparently the
result of an anti-vstring cabal, lead by Casey West and other
influential people, at OSCON.
vstrings must die! - http://xrl.us/lzt
There is another welcomed change in vstrings behaviour for 5.8.1 : the
vstrings that begin with a "v" and that don't contain dots now get
autoquoted by "=>", thanks to John Peacock. That means that the
following hash :
%h = ( v65 => 1 );
contains the key "A" with perl 5.6.0 up to 5.8.0, and contains (less
surprisingly) the key "v65" with all other perls. (The behaviour for
vstrings that contains dots, such as 5.8.1 or "v65.66", doesn't change.
In other words this change only affects bareword-like vstrings.)
John posted also a roadmap to remove vstrings from bleadperl, and to
replace them by version objects.
http://xrl.us/lzu
5.6.1++
Rafael Garcia-Suarez pleads for a new release in the 5.6.x branch. The
modest goal is not to fix bugs, upgrade modules or improve docs, but
only to enable compilation on recent systems (more precisely, with the
gcc 3 compiler or on recent UnixWare variants -- other compilation fixes
welcomed.) The difference with 5.6.1 being minimal (complete patch in
the mailing list archives), Rafael suggests the version number 5.6.1a,
buts lots of people come with lots of good arguments in favor of a
full-fledged increment, 5.6.2.
http://xrl.us/lzv
Sort subroutine edge cases
The subroutine optionally used to give a sort criterion to "sort" shall
not return an undefined value. If it does so, it produces the fatal
error *Sort subroutine didn't return a numeric value*. Rafael (after
Matt Sergeant) notices that an innocent-looking numerical comparison
subroutine may throw this error, because on systems that support
not-a-number values, the "<=>" operator returns "undef" when one of its
operands is NaN.
Rafael asks whether another more satisfactory behaviour can be found :
for example, producing a warning and/or returning an empty list. But it
was finally decided that the current behaviour was fine. In the case one
would want to safeguard a numerical sort against NaNs, the correct way
to do it is to filter them out beforehand :
my @sorted = sort { $a <=> $b } grep { $_ == $_ } @unsorted ;
http://xrl.us/lzw
Safe and unsafe signals
Chip Salzenberg notices that POSIX::sigaction is not using the safe (or
*deferred*) signal mechanism. Bug or feature ? The POSIX module is
supposed to give interfaces to the C-level routines, and the C-level
sigaction is unsafe from the point of view of Perl ; but on the other
hand, someone who needs the features from the POSIX sigaction can't rely
on perl-level safe signals. Chip then implemented optional safe signals
via POSIX::sigaction, using a new "safe" flag.
http://xrl.us/lzx
Floating point exceptions
Paul Bostrom reported a problem with the SIGFPE signal : programs that
are run from a perl script ignore it. That's because perl, unable to
handle it consistently, chooses to always ignore it.
Chip solved this with a patch that remembers the original state of the
SIGFPE signal handler, and that temporarily sets it back to that state
for the duration of each exec() call.
http://xrl.us/lzy
More about floats
Philip Newton noticed long ago that B::Deparse deparses infinite floats
as the bareword "inf" (bug #6944). Stephen McCamant looked at it, and
more generally, at ways to convert any bit pattern that can appear in an
NV to a piece of Perl code to produce the same value, whether it's
finite or infinite. He finds out that the round-trip property of perl's
implementation of atof() is far from perfect : when a numerical value is
printed in decimal by perl, and then parsed again into a float, the
final value isn't (in a large number of cases) exactly the same than the
original one, due to rounding. Yitzchak Scott-Thoennes suggests that
B::Deparse could emit pack/unpack code instead, but in fact an
exponent/mantissa decomposition should be enough.
http://xrl.us/lzz
In Brief
Stas Bekman asks for an API to set the hash seed internally before the
interpreter is started, to be used by mod_perl 2. As of this writing,
mod_perl 2 can't be built against the release candidates.
Using perl's malloc() on FreeBSD produce spurious failures in the
threading stress tests. Consequently, Jarkko reverted perl to use
FreeBSD's malloc(), in spite of its slowness (see Dan Kogai's analysis
in last week summary.)
Randal L. Schwartz and Michael Schwern apparently came to a conclusion
regarding the "UNINST=1" feature of ExtUtils::MakeMaker : its behaviour
will not change, and the problems it causes, notably by conflicting with
the version of "base.pm" that lives on CPAN, will be worked around for
now.
http://xrl.us/lz2
Claes Jacobsson finds that attribute handlers are apparently not invoked
from within an "eval(STRING)".
http://xrl.us/lz3
Ken Williams released File::Spec 0.84 on CPAN (and is going the maintain
it). It's in sync with the version currently in bleadperl and maintperl.
About this summary
I began to work on those weekly summaries exactly one year ago.
To celebrate this anniversary, I want a Ponie !