This Week on perl5-porters - 13-19 January 2008 "Shifting something that's not a number shouldn't produce a number." -- Abigail
Topics of Interest "grep" and smart match should warn in void context Larry Wall remarked last week that Zefram's suggestion regarding the propagation of context from "grep"s and "map"s was how he deal with the matter. Nicholas spelled out his understanding of the matter. Zefram ventured further into the internals than he had ever been before and succeeded in returning with a patch to implement warnings in void context. Abigail thought that the exercise was a bit of a witch hunt but Larry was thought that it was unlikely that people had used the syntax intentionally, so the weight of backwards compatibility was not so great, in this particular case. http://xrl.us/betef "+Inf", "-Inf" and "NaN" (and maybe -0.0 for good measure) In the thread about the latest "Math::Complex" release, Jarkko Hietaniemi had noted that some platforms will dump core if you try to perform floating point arithmetic on a value set to infinity. Nicholas Clark wondered whether it was worth probing for the behaviour of these special quantities at configuration time, in order to Do The Right Thing on as many platforms as possible. Zefram suggested peeking at "Data::Float", which can already isolate exotic floating point values in pure Perl. Craig Berry pointed out that it wasn't so much a problem of arithmetic *per se*, since just about everything in use today implements IEEE 754 floats. It's not even a problem of exception handling, since that is governed by the IEEE standard as well. The tricky part is determining what exception handling is enabled by default on a given platform, and what can be turned on if you ask for it politely. His gave some pointers to additional resources on the web regarding the matter. there's a point to all this http://xrl.us/beteh Inconsistent bigint behaviour (with ranges) Moritz Lenz ran into difficulties using the range ("$x .. $y") operator appearing to use floating point numbers instead of integers (and hence, bigints). Tels was quick to point out that this was due to a long-standing bug in perl: one cannot overload the ".." operator. The "bigint" package could do so if it were possible, but alas, the implementation is not there yet. want your 15 minutes of fame? http://xrl.us/betej Jerry D. Hedden wrote a patch to make the range operator behave in a slightly more sane manner, and this was applied by Rafael. http://xrl.us/betem Implementation of "rand()" in Perl 5.8.8 Dennis Williams wanted to implement "rand" in Java and wondered how it was defined (having become lost after wading through some 18000 lines of the Configure shell script. Robin Barker told him how Configure chooses the best available implementation. Bennett told him how to find out what was chosen. http://xrl.us/beteo "Inf" >> 1 Abigail was rather surprised to discover that left- or right-shifting infinity returns merely a really huge number, rather than infinity. And shifting "NaN" produces zero. Zefram explained that infinity only really works when dealing with floating point numbers, and bit-shifting a floating point number would probably do no good to anyone. And the shift operators force integer context anyway. Tels was happy to report that "bigint" gets it right. Yitzchak Scott-Thoennes argued that it made sense to allow infinity to be shifted down among the integers. David Nicol did not agree with this and suggested that the way things were currently made some sort of sense. Zefram came back and said that it was probably too late to try and be more strict on the matter: no doubt there's someone out there who's relying on the property that 3 >> 1 == 1. Roland Giersig wondered what Inf >> Inf and Inf << Inf should return, to which Zefram made a reasonable proposition. and I thought they said Perl was for text processing http://xrl.us/beteq Continuing in a numerical recipes vein, Nicholas reported that he had committed a change that will generate a warning if code tries to increment or decrement an integer beyond the last possible integer representation. at the end of the line http://xrl.us/betes Unfortunately, Andreas König was able to foil this plan with the careful application of the "-O2" optimisation switch. This caused "t/op/inc.t" to begin to fail. Nicholas Clark couldn't see a way to sneak a couple of instructions past the compiler to make it do the right thing. Jerry D. Hedden also found that it warned about things that we really don't care about. back to the drawing board http://xrl.us/beteu MIME types for module data Mark Overmeer wondered if there was some overall MIME type available for Perl that would allow module slinging around private data sets in a more orderly manner. Zefram gave an example of what an officially sanctioned IANA MIME type would look like. Mark wondered if you would have to pay a visit to IANA for each module. is this free as in beer? http://xrl.us/betew Onto perl 5.8.9 (Perl @ 32984) Nicholas Clark took a snapshot of the maintenance track to see how it would fare as a putative 5.8.9. He was hoping such a thing could be released before the German Perl Workshop, 5.10.1 or Christmas. Windows is behaving pretty well at the moment, thanks to Steve Hay's tireless smoking. Other platforms were doing less well: VMS was grumpy although Craig Berry and John E. Malmberg were on hand to smooth over the rough bits. David Cantrell noted severe breakage on a Cray, a Silicon Graphics IRIX box and NetBSD/Alpha as well. in need of TLC http://xrl.us/bete2 In fact, IRIX cannot compile 5.10.0, for that matter. http://xrl.us/bete4 Jerry D. Hedden also wondered about how the maint patch level should be defined in patchlevel.h. http://xrl.us/bete8 C for Perl programmers? Michael G. Schwern asked how a Perl programmer who knows no C might go about picking it up. A number of techniques were suggested, and books proposed. http://xrl.us/betfa What we all want [Note from the summariser: I have seriously overrun my time budget for this week. The following discussions are about major changes that people want to see in 5.12. The first items are continuations of threads from last week. The new threads have been summarised]. am I a method call? http://xrl.us/betfc anonymous packages http://xrl.us/betfe named parameters http://xrl.us/betfg method declaration http://xrl.us/betfi saner behaviour for `length` http://xrl.us/betfk Direct BigInt (and BigRat) support http://xrl.us/betfn allowing trailing naked blocks in prototyped sub calls Aristotle Pagaltzis wanted "foo 1, 2, 3, 4 { say @_ }" to do something nifty, given an appropriate "foo" routine. Rafael nodded and said it would be nice to have. http://xrl.us/betfp named parameters + prototypes + methods + aliases The thread on naming subroutine parameters continued on this week with all sorts of syntax ideas and semantic considerations bandied about. Rafael brought it down to earth with the restating of the aliasing syntax that has been proposed in the TODO list for a long time. The best aspect of his proposal was that it was simple enough to stand a reasonable chance of being implemented. http://xrl.us/betfr Empty attributes As part of the named parameters thread, Peter Scott wondered why "my $x := 24" compiled and ran normally. It turns out that it's being parsed as an empty attribute list. So it's allowed, but it does absolutely nothing. Peter wondered why it was so. No-one was able to give an explanation. Rafael thought it was a parser bug until Peter pointed to the tests that pin down the behaviour. time for an archeological expedition http://xrl.us/betft Recurse into current "qr//" Moritz Lenz has started to play with the new "(?R)" recursive sub pattern and was saddened to discover that it couldn't recurse across a "qr" boundary. Yves Orton didn't dismiss the idea out of hand, but said that it didn't weigh much against his current list of priorities. The best chance of it happening would depend on what Dave Mitchell and he planned to do to the regexp engine in the future. maybe we'll get it for free http://xrl.us/betfv Tail calls for methods Yuval Kogman noted that it was difficult to do tail recursion cleanly in Perl, and suggested that with a dash of "tailcall" syntactic sugar, it would allow the compilation phase to do the right thing. Part of the problem concerns what to do with "caller", which was covered in a thread a few weeks ago. Jim Cromie restated his op mashup idea, of combining adjacent "leavesub"/"entersub" ops. Nicholas Clark thought that it could be prototyped using an external XS module. http://xrl.us/betfx A working SUPER Johann Vromans lamented that "SUPER" referred to the superclass(es) of the package, and not that or those of the object. Stevan Little thought that the new MRO infrastructure in 5.10 may be of some help. Some people mentioned "NEXT" as coming close, but a common theme was that it was too slow. At the end of the week, no real concensus had been reached. that's really super, super-girl http://xrl.us/betfz Clean up dereferencing syntax for slices Curtis "Ovid" Poe proposed a simplification for slicing arrays and hashes. Everyone agrees the current syntax, especially when references come into the picture, is pretty horrendous. Ricardo Signes found the fatal flaw, and so Ovid suggested a more alien syntax with a sigil after the arrow, which made Ricardo wonder if it couldn't be done with an autoboxed method, at the expense of a bit of verbiage. Zefram found the fatal flaw in that idea: if the thing being sliced is a blessed reference then the method resolution may call something else. back to the drawing board http://xrl.us/betf3 Patches of Interest Double free error in 5.10.0 Gerard Goossen proposed a patch to fix the "s///ge" / "FREETMPS" problem. Unapplied. http://xrl.us/betf5 Nicholas wondered if there was another way to achieve the goal. http://xrl.us/betf7 2..Inf and beyond The thread continued this week, with the more pragmatic porters pointing out that one should really use a while(1) loop and increment a counter variable each time through the loop. Michael G. Schwern said that was okay if you were used to procedural languages, but if all you had ever known were Perl ranges it would be nice if they did the right thing. At the end of thread, people started to coalesce upon the idea of an new internal type that would provide a direct connection to a bigintish datatype, be it a fast C library like GMP or a slower pure-Perl implementation. http://xrl.us/betf9 perlintern.pod: "PAD_CLONE_VARS"'s parameter list mangled Steven Schubiger supplied a small apidoc patch, which was applied. http://xrl.us/betgb New and old bugs from RT Outdated "Test::Harness::Straps" (#49504) Imacat offered to take over the maintenance of "Test::Harness::Straps" (insofar as this involves watching over a dying patient and waiting until it is safe to pull the plug on the life support systems, and made an impassioned plea defending her approach to smoke testing CPAN modules. Apart from that, the thread devolved into your standard argument regarding "Module::Build" *versus* "ExtUtils::MakeMaker". Everyone remained very polite, more credit to the porters, but the reader must forgive the summariser for not going into more detail than saying that the versions of the CPAN shell bundled with older releases of Perl are the root of many problems @@@FIXME@@@ One new item to come out the discussion, however, was Michael G. Schwern's observation that "Module::Build"'s auto-generated README was pretty hopeless, yet it would be a Simple Matter Of Programming to make it do a better job. hey! Module::Build is bundled with 5.10 http://xrl.us/betgd do your part for useful READMEs http://rt.cpan.org//Ticket/Display.html?id=32391 "open ':locale'" now works (#49646) Rafael Garcia-Suarez and Mashrab Kuvatov sorted out what the problem was and fixed it up, and the thread painted the bikeshed green. http://xrl.us/betgf glibc error using "Tie::File" on 5.10 (#49724) Testcase needs to be slimmed down before anything can be done to diagnose the problem. come and look on my screen http://xrl.us/betgh Regular expression delimiter sensitivity (#49800) Someone reported a regular expression changing behaviour when run outside or inside the debugger. is ? a wise choice for a regexp delimiter? http://xrl.us/betgj Encode "from_to()" does not return on invalid conversion (#49830) Someone spotted some new behaviour in the version of "Encode" bundled with 5.10. Paging Dan Kogai. http://xrl.us/betgm XS OVERLOAD keyword causes incorrect C code generation (#49844) Salva Fandiño reported a problem using the "OVERLOAD" clause in an XS file. Torsten Schönfeld reported that an equivalent bug report was filed against the "ExtUtils::ParseXS" queue, but had received no replies. http://xrl.us/betgo Bad rounding on "int(log())" (#49872) Roland Giersig ran into problems with integer truncation of calculations involving logarithms, and was surprised by some of the results. People explained that it was due to floating point imprecision (as usual). fuzzing around http://xrl.us/betgq "gmtime()"/"localtime()" do not use "time()" (#49914) Well they sort of do, but Abe Timmerman discovered that if you override "time", the "gmtime" and "localtime" routines will happily ignore the override, and continue to use the underlying code that returns the epoch. time time time, see what's become of me http://xrl.us/betgs Ambigous Configure run/make error (#49946) Stefan Schlotterbeck-Macht was seriously Warnocked after getting stuck trying to cross-compile Perl onto avr32-linux platform. hints wanted http://xrl.us/betgu Perl 5.10 @ISA bug (#49952) Andrei Galea uncovered some @ISA behaviour modification in 5.10 when using "Tk". hairy inheritance http://xrl.us/betgw perl fails to compile in "B::C" (#49974) A cautionary tail: if you "rsync" the latest source, you must ensure that you do so with the "--delete" switch. Sometimes dead wood makes a log jam. we gave it the axe http://xrl.us/betgy Perl5 Bug Summary 14 new + 1474 open = 1788 (created 8, closed 0) http://xrl.us/betg2 http://rt.perl.org/rt3/NoAuth/perl5/Overview.html This is the BBC Getopt::Euclid 0.1.0 The current state of blead made one "Getopt" module fail, this one by Damain Conway. that's ok, there are plenty of others http://xrl.us/betg4 In Brief Robin Barker had some consting goodness applied to regexp.h http://xrl.us/betg6 H.Merijn Brand tried building perl on Cygwin and ran into trouble. Reini Urban stepped up to help him out, offering a few suggestions every Cygwin blead smoker needs to know. http://xrl.us/betg8 Jerry D. Hedden had a pile of taint test fixes for Cygwin, and this made all the tests pass. This made Nicholas Clark happy. http://xrl.us/betha David Landgren wondered whether "is" behaved correctly for tied objects when one needs to write "ok($x == 1)" instead of "cmp_ok($x, '==', 1)" but received no reply. fringe benefits http://xrl.us/bethc Jan Dubois noted that "File::GlobMapper", part of the "IO::Compress" infrastructure, should not be marked as an alpha release (since it's now in 5.10). Paul Marquess agreed, and promised to push out a new version, *sans* the message of doom. good thing it's dual-lifed http://xrl.us/bethe Sébastien Aperghis-Tramoni found a small bug in microperl regarding uconfig.h; Steve Peters regenerated it into a healthy state. http://xrl.us/bethg Steven Schubiger thought that the documentation for "sv_cmp_locale" should not say "see also "sv_cmp_locale"". Not applied. recursion: see recursion http://xrl.us/bethi Salvador Fandiño wondered if the new hints infrastructure could help solve the bug regarding overloading constants not propagating into string "eval"s. gotta perlbug id? http://xrl.us/bethk Jan Dubois reported that "Compress::Zlib" 1.42 was failing tests on both blead and maint, and pointed to an older thread on the matter. Nicholas Clark backed the change out of maint. http://xrl.us/bethn "Text::Balance" received a better version number in maint. http://xrl.us/bethp Nicholas also suggested that distinguishing between "use warnings" and "use warnings 'all'" would allow the porters to ease the restrictions in adding new warnings to maintenance releases. it never used to do that! http://xrl.us/bethr Johan Vromans complained about smoke runs complaining about inconsistent test results between TEST and harness. Some tests are known to be very sensitive to timing issues and system load. So the tests should either go, or be marked as informational (and thus insufficient grounds for aborting a launch). all systems go http://xrl.us/betht While hacking on kurila, Gerard Goossen spotted what he thought may be a latent bug in the routine "do_openn" in doio.c, and thought someone more intimate with the code should see if it was a problem. http://xrl.us/bethv He also proposed a patch, not applied, that would cause "-DT" to report forced tokens (during tokenisation). what you always wanted to know http://xrl.us/bethx Andrea König produced a patch for "YAML::Syck" to make it aware of the 5.11 native REGEXP type. Audrey Tang took the patch and pushed version 1.01 out the door. Michael G. Schwern thought the patch was a bit clunky, but Nicholas pointed out that the way it was written prevents dead code from forming in 5.10 and below. http://xrl.us/bethz Jerry D. Hedden uncovered a problem with a target needed for "suidperl". Even though the resulting binary is vaguely deprecated, Nicholas Clark managed to get thing running smoothly again. until the next time it breaks http://xrl.us/beth3 Jerry noted that the change didn't make it past the door. http://xrl.us/beth5 David Cantrell wanted to be able to "lchown" in perl 5.12, so Yitzchak wrote a patch to do it for him. http://xrl.us/beth7 Nicholas Clark had a bit of trouble fiddling with version numbers in "Test::Harness", as there are now three active branches in the repository. head, explodes http://xrl.us/beth9 Johnathon Rockway related a question from the "perl-qa" mailing list, as it relates to "is_deeply" and "qr//" on 5.11 http://xrl.us/betib Nicholas saw how "itersave" in used "struct block_loop", but wondered why, and whether it was ever, or still, necessary. http://xrl.us/betid About this summary This summary was written by David Landgren. last week's, reduced to clear http://xrl.us/betif 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.