This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
davem's perldelta entries for 5.25.10
[perl5.git] / pod / perldelta.pod
index 210223d..b5a85f7 100644 (file)
@@ -5,15 +5,15 @@
 [ 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.25.9
+perldelta - what is new for perl v5.25.10
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.25.8 release and the 5.25.9
+This document describes differences between the 5.25.9 release and the 5.25.10
 release.
 
-If you are upgrading from an earlier release such as 5.25.7, first read
-L<perl5258delta>, which describes differences between 5.25.7 and 5.25.8.
+If you are upgrading from an earlier release such as 5.25.8, first read
+L<perl5259delta>, which describes differences between 5.25.8 and 5.25.9.
 
 =head1 Notice
 
@@ -47,15 +47,7 @@ XXX For a release on a stable branch, this section aspires to be:
 
 =head1 Deprecations
 
-=head2 String delimiters that aren't stand-alone graphemes are now
-deprecated
-
-In order for Perl to eventually allow string delimiters to be Unicode
-grapheme clusters (which look like a single character, but may be
-a sequence of several ones), we have to stop allowing a single char
-delimiter that isn't a grapheme by itself.  These are unlikely to exist
-in actual code, as they would typically display as attached to the
-character in front of them.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
 
 =head2 Module removals
 
@@ -129,82 +121,6 @@ XXX
 
 L<XXX> has been upgraded from version A.xx to B.yy.
 
-=item *
-
-L<B::Xref> has been upgraded from version 1.05 to 1.06.
-
-=item *
-
-L<VMS::DCLsym> has been upgraded from version 1.07 to 1.08.
-
-=item *
-
-L<diagnostics> has been upgraded from version 1.35 to 1.36.
-
-=item *
-
-L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06.
-
-=item *
-
-L<DynaLoader> has been upgraded from version 1.40 to 1.41.
-
-=item *
-
-L<Errno> has been upgraded from version 1.27 to 1.28.
-
-=item *
-
-L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34.
-
-=item *
-
-L<I18N::LangTags> has been upgraded from version 0.41 to 0.42.
-
-=item *
-
-L<lib> has been upgraded from version 0.63 to 0.64.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 5.20161220 to 5.20170120.
-
-=item *
-
-L<OS2::Process> has been upgraded from version 1.11 to 1.12.
-
-=item *
-
-L<perl5db.pl> has been upgraded from version 1.50 to 1.51.
-
-=item *
-
-L<Storable> has been upgraded from version 2.59 to 2.60.
-
-=item *
-
-L<Symbol> has been upgraded from version 1.07 to 1.08.
-
-=item *
-
-L<Term::ReadLine> has been upgraded from version 1.15 to 1.16.
-
-=item *
-
-L<Test> has been upgraded from version 1.29 to 1.30.
-
-=item *
-
-L<threads::shared> has been upgraded from version 1.52 to 1.53.
-
-=item *
-
-L<Unicode::UCD> has been upgraded from version 0.67 to 0.68.
-
-=item *
-
-L<XSLoader> has been upgraded from version 0.24 to 0.26.
-
 =back
 
 =head2 Removed Modules and Pragmata
@@ -288,7 +204,10 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30
+
+This was changed to drop a leading C<v> in C<v5.30>, so it uses the same
+style as other deprecation messages.
 
 =back
 
@@ -407,63 +326,64 @@ well.
 
 =item *
 
-New versions of macros like C<isALPHA_utf8> and C<toLOWER_utf8>  have
-been added, each with the
-suffix C<_safe>, like C<isSPACE_utf8_safe>.  These take an extra
-parameter, giving an upper limit of how far into the string it is safe
-to read.  Using the old versions could cause attempts to read beyond the
-end of the input buffer if the UTF-8 is not well-formed, and ther use
-now raises a deprecation warning.  Details are at
-L<perlapi/Character classification>.
+The C<op_class()> API function has been added. This is like the existing
+C<OP_CLASS()> macro, but can more accurately determine what struct an op
+has been allocated as. For example C<OP_CLASS()> might return
+C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually
+allocated as an C<OP> or C<UNOP>; while <op_class()> will return
+C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate.
 
 =item *
 
-Calling macros like C<isALPHA_utf8> on malformed UTF-8 have issued a
-deprecation warning since Perl v5.18.  They now die.
-Similarly, macros like C<toLOWER_utf8> on malformed UTF-8 now die.
+The output format of the C<op_dump()> function (as used by C<perl -Dx>)
+has changed: it now displays an "ASCII-art" tree structure, and shows more
+low-level details about each op, such as its address and class.
 
-=item *
+=back
+
+=head1 Selected Bug Fixes
+
+XXX Important bug fixes in the core language are summarized here.  Bug fixes in
+files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
-Calling the functions C<utf8n_to_uvchr> and its derivatives, while
-passing a string length of 0 is now asserted against in DEBUGGING
-builds, and otherwise returns the Unicode REPLACEMENT CHARACTER.   If
-you have nothing to decode, you shouldn't call the decode function.
+[ List each fix as a =item entry ]
+
+=over 4
 
 =item *
 
-The functions C<utf8n_to_uvchr> and its derivatives now return the
-Unicode REPLACEMENT CHARACTER if called with UTF-8 that has the overlong
-malformation, and that malformation is allowed by the input parameters.
-This malformation is where the UTF-8 looks valid syntactically, but
-there is a shorter sequence that yields the same code point.  This has
-been forbidden since Unicode version 3.1.
+Attempting to use the deprecated variable C<$#> as the object in an
+indirect object method call could cause a heap use after free or
+buffer overflow.  [perl #129274]
 
 =item *
 
-The functions C<utf8n_to_uvchr> and its derivatives now accept an input
-flag to allow the overflow malformation.  This malformation is when the
-UTF-8 may be syntactically valid, but the code point it represents is
-not capable of being represented in the word length on the platform.
-What "allowed" means in this case is that the function doesn't return an
-error, and advances the parse pointer to beyond the UTF-8 in question,
-but it returns the Unicode REPLACEMENT CHARACTER as the value of the
-code point (since the real value is not representable).
+When checking for an indirect object method call in some rare cases
+the parser could reallocate the line buffer but then continue to use
+pointers to the old buffer.  [perl #129190]
 
-=back
+=item *
 
-=head1 Selected Bug Fixes
+Supplying a glob as the format argument to L<perlfunc/formline> would
+cause an assertion failure.  [perl #130722]
 
-XXX Important bug fixes in the core language are summarized here.  Bug fixes in
-files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
+=item *
 
-[ List each fix as a =item entry ]
+Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match
+converted into a qr// operator, leaving extra elements on the stack to
+confuse any surrounding expression.  [perl #130705]
 
-=over 4
+=item *
+
+Since 5.24.0 in some obscure cases, a regex which included code blocks
+from multiple sources (e.g. via embedded via qr// objects) could end up
+with the wrong current pad and crash or give weird results. [perl #129881]
 
 =item *
 
-Under C<use utf8>, the entire Perl program is now checked that the UTF-8
-is wellformed.  This resolves [perl #126310].
+Occasionally C<local()>s in a code block within a patterns weren't being
+undone when the pattern matching backtracked over the code block.
+[perl #126697]
 
 =back