This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Show --html flag for make-rmg-checklist
[perl5.git] / pod / perldelta.pod
index 7f65ef6..db5a96d 100644 (file)
@@ -1,24 +1,20 @@
 =encoding utf8
 
-=for comment
-This has been completed up to e7d0a3fbd9, except for
-b0f2e9e nwclark Fix two bugs related to pod files outside of pod/ (important enough?)
-
 =head1 NAME
 
 [ this is a template for a new perldelta file. Any text flagged as
 XXX needs to be processed before release. ]
 
-perldelta - what is new for perl v5.15.6
+perldelta - what is new for perl v5.15.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.5 release and
-the 5.15.6 release.
+This document describes differences between the 5.15.6 release and
+the 5.15.7 release.
 
-If you are upgrading from an earlier release such as 5.15.4, first read
-L<perl5155delta>, which describes differences between 5.15.4 and
-5.15.5.
+If you are upgrading from an earlier release such as 5.15.5, first read
+L<perl5156delta>, which describes differences between 5.15.5 and
+5.15.6.
 
 =head1 Notice
 
@@ -32,23 +28,11 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 C<__SUB__>
-
-The new C<__SUB__> token, available under the "current_sub" feature (see
-L<feature>) or C<use v5.15>, returns a reference to the current subroutine,
-making it easier to write recursive closures.
-
-=head2 New option for the debugger's B<t> command
-
-The B<t> command in the debugger, which toggles tracing mode, now accepts a
-numerical argument that determines how many levels of subroutine calls to
-trace.
+=head2 C<use charnames> no longer needed for C<\N{I<name>}>
 
-=head2 Return value of C<tied>
-
-The value returned by C<tied> on a tied variable is now the actual scalar
-that holds the object to which the variable is tied.  This allows ties to
-be weakened with C<Scalar::Util::weaken(tied $tied_variable)>.
+The C<charnames> module is now automatically loaded when needed as if
+the C<:full> and C<:short> options had been specified.  See
+L<charnames>.
 
 =head1 Security
 
@@ -56,108 +40,18 @@ XXX Any security-related notices go here.  In particular, any security
 vulnerabilities closed should be noted here rather than in the
 L</Selected Bug Fixes> section.
 
-=head2 C<is_utf8_char()>
-
-The XS-callable function C<is_utf8_char()> when presented with malformed
-UTF-8 input can read up to 12 bytes beyond the end of the string.  This
-cannot be fixed without changing its API.  It is not called from CPAN.
-The documentation for it now describes how to use it safely.
-
-=head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
-
-Most of the other XS-callable functions that take UTF-8 encoded input
-implicitly assume that the UTF-8 is valid (not malformed) in regards to
-buffer length.  Do not do things such as change a character's case or
-see if it is alphanumeric without first being sure that it is valid
-UTF-8.  This can be safely done for a whole string by using one of the
-functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
-C<is_utf8_string_loclen()>.
+[ List each security issue as a =head2 entry ]
 
 =head1 Incompatible Changes
 
 XXX For a release on a stable branch, this section aspires to be:
 
     There are no changes intentionally incompatible with 5.XXX.XXX
-    If any exist, they are bugs and reports are welcome.
+    If any exist, they are bugs, and we request that you submit a
+    report.  See L</Reporting Bugs> below.
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 C<substr> lvalue revamp
-
-When C<substr> is called in lvalue or potential lvalue context with two or
-three arguments, a special lvalue scalar is returned that modifies the
-original string (the first argument) when assigned to.
-
-Previously, the offsets (the second and third arguments) passed to
-C<substr> would be converted immediately to match the string, negative
-offsets being translated to positive and offsets beyond the end of the
-string being truncated.
-
-Now, the offsets are recorded without modification in the special lvalue
-scalar that is returned, and the original string is not even looked at by
-C<substr> itself, but only when the returned lvalue is read or modified.
-
-These changes result in several incompatible changes and bug fixes:
-
-=over
-
-=item *
-
-If the original string changes length after the call to C<substr> but
-before assignment to its return value, negative offsets will remember
-their position from the end of the string, affecting code like this:
-
-    my $string = "string";
-    my $lvalue = \substr $string, -4, 2;
-    print $lvalue, "\n"; # prints "ri"
-    $string = "bailing twine";
-    print $lvalue, "\n"; # prints "wi"; used to print "il"
-
-The same thing happens with an omitted third argument.  The returned lvalue
-will always extend to the end of the string, even if the string becomes
-longer.
-
-=item *
-
-Tied (and otherwise magical) variables are no longer exempt from the
-"Attempt ot use reference as lvalue in substr" warning.
-
-=item *
-
-That warning now occurs when the returned lvalue is assigned to, not when
-C<substr> itself is called.  This only makes a difference if the return
-value of C<substr> is referenced and assigned to later.
-
-=item *
-
-The order in which "uninitialized" warnings occur for arguments to
-C<substr> has changed.
-
-=item *
-
-Passing a substring of a read-only value or a typeglob to a function (potential lvalue context) no longer causes an immediate "Can't coerce" or "Modification of a read-only value" error.  That error only occurs if and
-when the value passed is assigned to.
-
-The same thing happens with the "substr outside of string" error.  If the
-lvalue is only read, not written to, it is now just a warning, as with
-rvalue C<substr>.
-
-=item *
-
-C<substr> assignments no longer call FETCH twice if the first argument is a
-tied variable, but just once.
-
-=back
-
-It was impossible to fix all the bugs without an incompatible change, and
-the behaviour of negative offsets was never specified, so the change was
-deemed acceptable.
-
-=head2 XS API tweak
-
-The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
-C<len> parameter.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -177,29 +71,7 @@ may well be none in a stable release.
 
 =item *
 
-Perl 5.12.0 sped up the destruction of objects whose classes define empty
-C<DESTROY> methods (to prevent autoloading), simply by not calling such
-empty methods.  This release takes this optimisation a step further, by not
-calling any C<DESTROY> method that begins with an C<return> statement.
-This can be useful for destructors that are only used for debugging:
-
-    use constant DEBUG => 1;
-    sub DESTROY { return unless DEBUG; ... }
-
-Constant-folding will reduce the first statement to C<return;> if DEBUG is
-set to 0, triggering this optimisation.
-
-=item *
-
-Assign to a variable that holds a typeglob or copy-on-write scalar is now
-much faster.  Previously the typeglob would be stringified or the
-copy-on-write scalar would be copied before being clobbered.
-
-=item *
-
-Assignment to a substring in void context is now more than twice its
-previous speed.  Instead of creating and returning a special lvalue scalar
-that is then assigned to, C<substr> modifies the original string itself.
+XXX
 
 =back
 
@@ -231,112 +103,7 @@ XXX
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 1.80 to version 1.82.
-
-Adjustments to handle files >8gb (>0777777777777 octal) and a feature to
-return the MD5SUM of files in the archive.
-
-=item *
-
-L<AutoLoader> has been upgraded from version 5.71 to version 5.72.
-
-=item *
-
-L<B::Debug> has been upgraded from version 1.16 to version 1.17.
-
-=item *
-
-L<B::Deparse> has been upgraded from version 1.09 to 1.10.
-
-C<sort(foo(bar))> is now deparsed correctly. (C<sort foo(bar)>, how it used
-to deparse, makes foo the sort routine, rather than a regular function
-call.)
-
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version 2.045.
-
-=item *
-
-L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
-
-=item *
-
-L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
-
-=item *
-
-L<Data::Dumper> has been upgraded from version 2.134 to 2.135.
-
-The XS implementation has been updated to account for the Unicode symbol
-changes in Perl 5.15.4.  It also knows how to output typeglobs with nulls
-in their names.
-
-=item *
-
-L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
-
-=item *
-
-L<IO::Compress::Base> has been upgraded from version 2.042 to version 2.045.
-
-Added zipdetails utility.
-
-=item *
-
-L<Locale::Codes> has been upgraded from version 3.18 to version 3.20.
-
-The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now support retired codes.
-All codesets may be specified by a constant or by their name now. Previously,
-they were specified only by a constant.
-The alias_code function exists for backward compatibility. It has been replaced by rename_country_code.
-The alias_code function will be removed sometime after September, 2013.
-All work is now done in the central module (Locale::Codes). Previously, some was still done in the
-wrapper modules (Locale::Codes::*) but that is gone now.
-Added Language Family codes (langfam) as defined in ISO 639-5.
-
-=item *
-
-L<Module::Loaded> has been uprgaded from version 0.06 to version 0.08.
-
-=item *
-
-L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60.
-
-Added another LaTeX escape: --- => -{}-{}-
-
-Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to
-LaTeX, which then proceeds to replace it with a single -. This patch
-replaces ----- with -{}-{}-{}-{}-
-
-=item *
-
-L<POSIX> has been upgraded from version 1.26 to 1.27.
-
-It no longer produces a "Constant subroutine TCSANOW redefined" warning on
-Windows.
-
-XXX When did it start producing that warning?  Was it post-5.15.5?  Even if
-it was not, adding a note will help whoever compiles perl5160delta.
-
-=item *
-
-L<Socket> has been upgraded from version 1.94_02 to version 1.96.
-
-=item *
-
-L<Unicode::Collate> has been upgraded from version 0.85 to version 0.87.
-
-Tailored compatibility ideographs as well as unified ideographs for
-the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
-
-Now Locale/*.pl files are searched in @INC.
-
-=item *
-
-L<UNIVERSAL> has been upgraded from version 1.10 to 1.11.
-
-Documentation change clarifies return values from UNIVERSAL::VERSION.
+L<XXX> has been upgraded from version 0.69 to version 0.70.
 
 =back
 
@@ -428,20 +195,7 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-Redefinition warnings for constant subroutines used to be mandatory, even
-occurring under C<no warnings>.  Now they respect the L<warnings> pragma.
-
-=item *
-
-The "Attempt to free non-existent shared string" has had the spelling of
-"non-existent" corrected to "nonexistent".  It was already listed with the
-correct spelling in L<perldiag>.
-
-=item *
-
-The 'Use of "foo" without parentheses is ambiguous' warning has been
-extended to apply also to user-defined subroutines with a (;$) prototype,
-and not just to built-in functions.
+XXX Describe change here
 
 =back
 
@@ -454,14 +208,13 @@ here. Most of these are built within the directories F<utils> and F<x2p>.
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
-=head3 L<zipdetails>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-L<zipdetails> displays information about the internal record structure of the zip file.
-It is not concerned with displaying any details of the compressed data stored in the zip file.
+XXX
 
 =back
 
@@ -478,16 +231,7 @@ L</Platform Support> section, instead.
 
 =item *
 
-F<pod/roffitall> is now build by F<pod/buildtoc>, instead of being shipped
-with the distribution. Its list of manpages is now generated (and therefore
-current). See also RT #103202 for an unresolved related issue.
-
-=item *
-
-Perl 5.15.5 had a bug in its installation script, which did not install
-F<unicore/Name.pm>.  This has been corrected [perl #104226].
-
-XXX Is that Perl version correct?  Is the file path correct?
+XXX
 
 =back
 
@@ -505,10 +249,7 @@ that they represent may be covered elsewhere.
 
 =item *
 
-The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have been
-moved under F<t/op/>, where they were originally.  They had been moved
-under F<t/re/> along with the substitution tests when that directory was
-created.
+XXX
 
 =back
 
@@ -589,155 +330,7 @@ L</Modules and Pragmata>.
 
 =item *
 
-RT #78266: The regex engine has been leaking memory when accessing
-named captures that weren't matched as part of a regex ever since 5.10
-when they were introduced, e.g. this would consume over a hundred MB
-of memory:
-
-    perl -wle 'for (1..10_000_000) { if ("foo" =~ /(foo|(?<capture>bar))?/) { my $capture = $+{capture} } } system "ps -o rss $$"'
-
-=item *
-
-A constant subroutine assigned to a glob whose name contains a null will no
-longer cause extra globs to pop into existence when the constant is
-referenced under its new name.
-
-=item *
-
-C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when such
-a sub was provided as the comparison routine.  It used to croak on
-C<sub {()}>.
-
-=item *
-
-Subroutines from the C<autouse> namespace are once more exempt from
-redefinition warnings.  This used to work in 5.005, but was broken in 5.6
-for most subroutines.  For subs created via XS that redefine subroutines
-from the C<autouse> package, this stopped working in 5.10.
-
-=item *
-
-New XSUBs now produce redefinition warnings if they overwrite existing
-subs, as they did in 5.8.x.  (The C<autouse> logic was reversed in 5.10-14.
-Only subroutines from the C<autouse> namespace would warn when clobbered.)
-
-=item *
-
-Redefinition warnings triggered by the creation of XSUBs now respect
-Unicode glob names, instead of using the internal representation.  This was
-missed in 5.15.4, partly because this warning was so hard to trigger.  (See
-the previous item.)
-
-=item *
-
-C<newCONSTSUB> used to use compile-time warning hints, instead of run-time
-hints.  The following code should never produce a redefinition warning, but
-it used to, if C<newCONSTSUB> redefine and existing subroutine:
-
-    use warnings;
-    BEGIN {
-       no warnings;
-       some_XS_function_that_calls_new_CONSTSUB();
-    }
-
-=item *
-
-Redefinition warnings for constant subroutines are on by default (what are
-known as severe warnings in L<perldiag>).  This was only the case when it
-was a glob assignment or declaration of a Perl subroutine that caused the
-warning.  If the creation of XSUBs triggered the warning, it was not a
-default warning.  This has been corrected.
-
-=item *
-
-The internal check to see whether a redefinition warning should occur used
-to emit "uninitialized" warnings in cases like this:
-
-    use warnings "uninitialized";
-    use constant {u=>undef,v=>undef};
-    sub foo(){u} sub foo(){v}
-
-=item *
-
-A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
-warnings to report the wrong variable if the operator in question has
-two operands and one is C<%{...}> or C<@{...}>.  This has been fixed
-[perl #103766].
-
-=item *
-
-C<< version->new("version") >> and C<printf "%vd", "version"> no longer
-crash [perl #102586].
-
-=item *
-
-C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH just
-once when $tied holds a reference.
-
-=item *
-
-Four-argument C<select> now always calls FETCH on tied arguments.  It used
-to skip the call if the tied argument happened to hold C<undef> or a
-typeglob.
-
-=item *
-
-Four-argument C<select> no longer produces its "Non-string passed as
-bitmask" warning on tied or tainted variables that are strings.
-
-=item *
-
-C<sysread> now always calls FETCH on the buffer passed to it if it is tied.
-It used to skip the call if the tied variable happened to hold a typeglob.
-
-=item *
-
-C<< $tied .= <> >> now calls FETCH once on C<$tied>.  It used to call it
-multiple times if the last value assigned to or returned from the tied
-variable was anything other than a string or typeglob.
-
-=item *
-
-The C<evalbytes> keyword added in 5.15.5 was respecting C<use utf8>
-declarations from the outer scope, when it should have been ignoring them.
-
-=item *
-
-C<goto &func> no longers crashes, but produces an error message, when the
-unwinding of the current subroutine's scope fires a destructor that
-undefines the subroutine being "goneto" [perl #99850].
-
-=item *
-
-Arithmetic assignment (C<$left += $right>) involving overloaded objects that
-rely on the 'nomethod' override no longer segfault when the left operand is not
-overloaded.
-
-=item *
-
-Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash
-element no longer causes a double free.  Regardless of this change, the
-results of such assignments are still undefined.
-
-=item *
-
-Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
-C<%!> from working some of the time [perl #105024].
-
-=item *
-
-Assigning C<__PACKAGE__> or another shared hash key string to a variable no
-longer stops that variable from being tied if it happens to be a PVMG or
-PVLV internally.
-
-=item *
-
-When presented with malformed UTF-8 input, the XS-callable functions
-C<is_utf8_string()>, C<is_utf8_string_loc()>, and
-C<is_utf8_string_loclen()> could read beyond the end of the input
-string by up to 12 bytes.  This no longer happens.  [perl #32080].
-However, currently, C<is_utf8_char()> still has this defect,
-see L</is_utf8_char()> above.
+XXX
 
 =back
 
@@ -769,7 +362,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.5..HEAD
+  perl Porting/acknowledgements.pl v5.15.6..HEAD
 
 =head1 Reporting Bugs