summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-11-05 23:30:05 +0000
committerNicholas Clark <nick@ccl4.org>2008-11-05 23:30:05 +0000
commit4d777d3b6c48cea87acc3d65d39c4ebc5d8a5bb5 (patch)
tree0247e0316f2ca4dd6df53f6f84c4dd02fc11c84f
parentef98a97c6780190e32876ef0010a28445c10ba91 (diff)
downloadperl-4d777d3b6c48cea87acc3d65d39c4ebc5d8a5bb5.tar.gz
Finish =head1 Selected Bug Fixes. Maybe I should name Vipul.
p4raw-id: //depot/maint-5.8/perl@34743
-rw-r--r--pod/perl589delta.pod80
1 files changed, 51 insertions, 29 deletions
diff --git a/pod/perl589delta.pod b/pod/perl589delta.pod
index 4da9546d22..fad27dd9f2 100644
--- a/pod/perl589delta.pod
+++ b/pod/perl589delta.pod
@@ -1339,14 +1339,58 @@ before using them. [RT #24816]
Magic is no longer invoked twice by the expression C<\&$x>
+=head2 Reblessing overloaded objects now works
+
+Internaly, perl object-ness is on the referenant, not the reference, even
+though methods can only be called via a reference. However, the original
+implementation of overloading stored flags related to overloading on the
+reference, relying on the flags being copied when the reference was copied,
+or set at the creation of a new reference. This manifests in a bug - if you
+rebless an object from a class that has overloading, into one that does not,
+then any other existing references think that they (still) point to an
+overloaded object, choose these C code paths, and then throw errors.
+Analagously, blessing into an overloaded class when other references exist will
+result in them not using overloading.
+
+The implementation has been fixed for 5.10, but this fix changes the semantics
+of flag bits, so is not binary compatible, so can't be applied to 5.8.9.
+However, 5.8.9 has a work-around that implements the same bug fix. If the
+referant has multiple references, then all the other references are located and
+corrected. A full search is avoided whenever possible by scanning lexicals
+outwards from the current subroutine, and the argument stack.
+
+A certain well known Linux vendor applied incomplete versions of this bug fix
+to their F</usr/bin/perl> and then prematurely closed bug reports about
+performance issues without consulting back upstream. This not being enough,
+they then proceded to ignore the necessary fixes to these unreleased changes
+for 11 months, until massive pressure was applied by their long-suffering
+paying customers, catalysed by the failings being featured on a prominent blog
+and slashdot.
+
+=head2 C<strict> now propagates correctly into string evals
+
+Under 5.8.8 and earlier:
+
+ $ perl -e 'use strict; eval "use foo bar" or die $@'
+ Can't locate foo.pm in @INC (@INC contains: ... .) at (eval 1) line 2.
+ BEGIN failed--compilation aborted at (eval 1) line 2.
+
+Under 5.8.9 and later:
+
+ $ ./perl -Ilib -e 'use strict; eval "use foo bar" or die $@'
+ Bareword "bar" not allowed while "strict subs" in use at (eval 1) line 1.
+
+This may cause problems with programs that parse the error message and rely
+on the buggy behaviour.
+
=head2 Other fixes
=over
=item *
-The tokenizer no longer treats =cute (and other words beginning
-with =cut) as a synonym for =cut.
+The tokenizer no longer treats C<=cute> (and other words beginning
+with C<=cut>) as a synonym for C<=cut>.
=item *
@@ -1426,27 +1470,6 @@ bracket) instead of just C<$10>.
Fix bug RT #45053, newCONSTSUB() is now thread safe.
-=item *
-
-strict propagates inside string evals.
-
-IIRC no warnings 'subclass' works properly now too
-
-=item *
-
-=for fixme
-
-Overloading flags are now stored on the referent instead of the reference.
-Previously taking a new, unrelated reference to an object could result in
-the original (blessed) reference being able to access the overload while
-the new reference could not. (Test added in 32016).
-
-=item *
-
-Reblessing an object from a class that doesn't use overloads to one
-that does (or vice versa) is now faster. (31996, 32019, 32025).
-
-
=back
=head2 Platform Specific Fixes
@@ -1953,13 +1976,12 @@ C<t/op/stat.t> tests will now test hard links on VMS if they are supported.
=head1 Known Problems
-=for fixme
-
-strict in evals
-warnings
-many bug fixes present in 5.10.0 can't be backported
+There are no known new bugs.
-None.
+However, programs that rely on bugs that have been fixed will have problems.
+Also, many bug fixes present in 5.10.0 can't be backported to the 5.8.x
+branch, because they require changes that are binary incompatible, or because
+the code changes are too large and hence too risky to incorporate.
=head1 Platform Specific Notes