This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: mention OP_PADRANGE
[perl5.git] / pod / perldelta.pod
index ad0b254..d7d6834 100644 (file)
@@ -1,19 +1,24 @@
 =encoding utf8
 
+=for todo
+284167a smueller Add C define to remove taint support from perl
+ba593ad davem    clone() wasn't cloning the whole stack
+7dc8663 demerphq Hash Function Change - Murmur hash and true per process...
+
 =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.17.5
+perldelta - what is new for perl v5.17.6
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.17.4 release and the 5.17.5
+This document describes differences between the 5.17.5 release and the 5.17.6
 release.
 
-If you are upgrading from an earlier release such as 5.17.3, first read
-L<perl5174delta>, which describes differences between 5.17.3 and 5.17.4.
+If you are upgrading from an earlier release such as 5.17.4, first read
+L<perl5175delta>, which describes differences between 5.17.4 and 5.17.5.
 
 =head1 Notice
 
@@ -27,13 +32,15 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Upgrade to Unicode 6.2
+=head2 Character name aliases may now include non-Latin1-range characters
 
-Perl now supports the final version of Unicode 6.2.  Earlier releases in
-the 5.17 series supported Unicode 6.2 beta versions.  There were no
-substantive changes in the final Unicode 6.2 version from the most
-recent beta, included in Perl 5.17.4.  A list of changes from Unicode
-6.1 is at L<http://www.unicode.org/versions/Unicode6.2.0>.
+It is possible to define your own names for characters for use in
+C<\N{...}>, C<charnames::vianame()>, etc.  These names can now be
+comprised of characters from the whole Unicode range.  This allows for
+names to be in your native language, and not just English.  Certain
+restrictions apply to the characters that may be used (you can't define
+a name that has punctuation in it, for example).  See L<charnames/CUSTOM
+ALIASES>.
 
 =head1 Security
 
@@ -53,6 +60,26 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 An unknown character name in C<\N{...}> is now a syntax error
+
+Previously, it warned, and the Unicode REPLACEMENT CHARACTER was
+substituted.  Unicode now recommends that this situation be a syntax
+error.  Also, the previous behavior led to some confusing warnings and
+behaviors, and since the REPLACEMENT CHARACTER has no use other than as
+a stand-in for some unknown character, any code that has this problem is
+buggy.
+
+=head2 Formerly deprecated characters in C<\N{}> character name aliases are now errors.
+
+Since v5.12.0, it has been deprecated to use certain characters in
+user-defined C<\N{...}> character names.  These now cause a syntax
+error.  For example, it is now an error to begin a name with a digit,
+such as in
+
+ my $undraftable = "\N{4F}";    # Syntax error!
+
+or to have commas anywhere in the name.  See L<charnames/CUSTOM ALIASES>
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.  In
@@ -72,7 +99,8 @@ There may well be none in a stable release.
 
 =item *
 
-XXX
+Lists of lexical variable declarations (C<my($x, $y)>) are now optimised
+down to a single op, and are hence faster than before.
 
 =back
 
@@ -104,7 +132,28 @@ XXX
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+L<Carp> has been upgraded from version 1.27 to 1.28.
+
+Carp is no longer confused when C<caller> returns undef for a package that
+has been deleted.
+
+=item *
+
+L<CPAN> has been upgraded from version 1.98 to 1.99_51.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.16 to 1.17.
+
+=item *
+
+L<Env> has been upgraded from version 1.03 to 1.04.
+
+Its SPLICE implementation no longer misbehaves in list context.
+
+=item *
+
+L<Tie::Hash::NamedCapture> has been upgraded from version 0.08 to 0.09.
 
 =back
 
@@ -137,13 +186,14 @@ XXX Changes which significantly change existing files in F<pod/> go here.
 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
 section.
 
-=head3 L<XXX>
+=head3 L<perlref>
 
 =over 4
 
 =item *
 
-XXX Description of the change here
+C<*foo{NAME}> and C<*foo{PACKAGE}>, which have existed since perl 5.005,
+are now documented.
 
 =back
 
@@ -271,13 +321,13 @@ XXX
 
 =head2 Discontinued Platforms
 
-XXX List any platforms that this version of perl no longer compiles on.
-
 =over 4
 
-=item XXX-some-platform
+=item EPOC
 
-XXX
+Support code relating to EPOC has been removed.  EPOC was a family of
+operating systems developed by Psion for mobile devices.  It was the
+predecessor of Symbian.  The port was last updated in April 2002.
 
 =back
 
@@ -308,7 +358,24 @@ well.
 
 =item *
 
-XXX
+The private Perl_croak_no_modify has had its context parameter removed. It is
+now has a void prototype. Users of the public API croak_no_modify remain
+unaffected.
+
+=item *
+
+Copy-on-write (shared hash key) scalars are no longer marked read-only.
+C<SvREADONLY> returns false on such an SV, but C<SvIsCOW> still returns
+true.
+
+=item *
+
+A new op type, C<OP_PADRANGE> has been introduced. The perl peephole
+optimiser will, where possible, substitute a single padrange op for a
+pushmark followed by one or more pad ops, and possibly also skipping list
+and nextstate ops. In addition, the op can carry out the tasks associated
+with the RHS of a my(...) = @_ assignment, so those ops may be optimised
+away too.
 
 =back
 
@@ -323,7 +390,96 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-XXX
+Uninitialized warnings mentioning hash elements would only mention the
+element name if it was not in the first bucket of the hash, due to an
+off-by-one error.
+
+=item *
+
+A regular expression optimizer bug could cause multiline "^" to behave
+incorrectly in the presence of line breaks, such that
+C<"/\n\n" =~ m#\A(?:^/$)#im> would not match [perl #115242].
+
+=item *
+
+Failed C<fork> in list context no longer currupts the stack.
+C<@a = (1, 2, fork, 3)> used to gobble up the 2 and assign C<(1, undef, 3)>
+if the C<fork> call failed.
+
+=item *
+
+Numerous memory leaks have been fixed, mostly involving tied variables that
+die, regular expression character classes and code blocks, and syntax
+errors.
+
+=item *
+
+Assigning a regular expression (C<${qr//}>) to a variable that happens to
+hold a floating point number no longer causes assertion failures on
+debugging builds.
+
+=item *
+
+Assigning a regular expression to a scalar containing a number no longer
+causes subsequent nummification to produce random numbers.
+
+=item *
+
+Assigning a regular expression to a magic variable no longer wipes away the
+magic.  This is a regression from 5.10.
+
+=item *
+
+Assigning a regular expression to a blessed scalar no longer results in
+crashes.  This is also a regression from 5.10.
+
+=item *
+
+Regular expression can now be assigned to tied hash and array elements with
+flattening into strings.
+
+=item *
+
+Nummifying a regular expression no longer results in an uninitialized
+warning.
+
+=item *
+
+Negative array indices no longer cause EXISTS methods of tied variables to
+be ignored.  This is a regression from 5.12.
+
+=item *
+
+Negative array indices no longer result in crashes on arrays tied to
+non-objects.
+
+=item *
+
+C<$x = "(?{})"; /a++(?{})+$x/x> no longer erroneous produces an error (just
+a warning, as expected).  This was broken in 5.17.1.
+
+=item *
+
+C<$byte_overload .= $utf8> no longer results in doubly-encoded UTF8 if the
+left-hand scalar happened to have produced a UTF8 string the last time
+overloading was invoked.
+
+=item *
+
+C<goto &sub> now uses the current value of @_, instead of using the array
+the subroutine was originally called with.  This means
+C<local @_ = (...); goto &sub> now works [perl #43077].
+
+=item *
+
+If a debugger is invoked recursively, it no longer stomps on its own
+lexical variables.  Formerly under recursion all calls would share the same
+set of lexical variables [perl #115742].
+
+=item *
+
+C<*_{ARRAY}> returned from a subroutine no longer spontaneously
+becomes empty.
 
 =back
 
@@ -352,7 +508,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.17.4..HEAD
+  perl Porting/acknowledgements.pl v5.17.5..HEAD
 
 =head1 Reporting Bugs