This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
readd noreturn and silence "noreturn that returns" warning on MSVC
[perl5.git] / pod / perldelta.pod
index 4418bba..1e4e7b2 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.21.4
+perldelta - what is new for perl v5.21.6
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.21.3 release and the 5.21.4
+This document describes differences between the 5.21.5 release and the 5.21.6
 release.
 
-If you are upgrading from an earlier release such as 5.21.2, first read
-L<perl5213delta>, which describes differences between 5.21.2 and 5.21.3.
+If you are upgrading from an earlier release such as 5.21.4, first read
+L<perl5215delta>, which describes differences between 5.21.4 and 5.21.5.
 
 =head1 Notice
 
@@ -27,6 +27,16 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
+=head2 List form of pipe open implemented for Win32
+
+The list form of pipe:
+
+  open my $fh, "-|", "program", @arguments;
+
+is now implemented on Win32.  It has the same limitations as C<system
+LIST> on Win32, since the Win32 API doesn't accept program arguments
+as a list.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -78,6 +88,17 @@ as an updated module in the L</Modules and Pragmata> section.
 
 [ List each other deprecation as a =head2 entry ]
 
+=head2 Use of non-graphic characters in single-character variable names
+
+The syntax for single-character variable names is more lenient than
+for longer variable names, allowing the one-character name to be a
+punctuation character or even invisible (a non-graphic).  Perl v5.20
+deprecated the ASCII-range controls as such a name.  Now, all
+non-graphic characters that formerly were allowed are deprecated.
+The practical effect of this occurs only when not under C<S<"use
+utf8">>, and affects just the C1 controls (code points 0x80 through
+0xFF), NO-BREAK SPACE, and SOFT HYPHEN.
+
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here.
@@ -119,73 +140,9 @@ XXX
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
-
-=item *
-
-L<B::Concise> has been upgraded from version 0.992 to 0.993.
-
-=item *
-
-L<CPAN::Meta::Requirements> has been upgraded from version 2.126 to 2.128.
-
-=item *
-
-L<ExtUtils::CBuilder> has been upgraded from version 0.280216 to 0.280219.
-[perl #122675].
-
-=item *
-
-L<ExtUtils::Manifest> has been upgraded from version 1.65 to 1.66.
-[perl #122415].
-
-=item *
-
-L<ExtUtils::ParseXS>:  Documentation has been added to
-F<ExtUtils-ParseXS/lib/perlxs.pod> concerning handling of locales when writing
-XS code.
-
-=item *
-
-L<File::Find> has been upgraded from version 1.27 to 1.28.
-
-C<find()> and C<finddepth()> will now warn if passed inappropriate or
-misspelled options.
-
-=item *
-
-L<Getopt::Std> has been upgraded from version 1.10 to 1.11.
-
-=item *
-
-L<HTTP::Tiny> has been upgraded from version 0.047 to 0.048.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 5.021003 to 5.021004.
-
-=item *
-
-L<POSIX> has been upgraded from version 1.42 to 1.43.
+L<IO::Socket> has been upgraded from version 1.37 to 1.38.
 
-=item *
-
-L<Pod::Perldoc> has been upgraded from version 3.23 to 3.24.
-
-=item *
-
-Scalar-List-Utils has been upgraded from version 1.40 to 1.41.
-
-=item *
-
-L<constant> has been upgraded from version 1.31 to 1.32.
-
-It now accepts fully-qualified constant names, allowing constants to be
-defined in packages other than the caller.
-
-=item *
-
-L<threads> has been upgraded from version 1.95 to 1.96.
+Document the limitations of the isconnected() method.  [perl #123096]
 
 =back
 
@@ -218,18 +175,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<perldata/Identifier parsing>
 
 =over 4
 
 =item *
 
-XXX Description of the change here
-
-=item *
-
-L<perlsyn>: An ambiguity in the documentation of the Ellipsis statement has
-been corrected. [perl #122661]
+The syntax of single-character variable names has been brought
+up-to-date and more fully explained.
 
 =back
 
@@ -263,45 +216,36 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Use of literal non-graphic characters in variable names is deprecated|perldiag/"Use of literal non-graphic characters in variable names is deprecated">
 
-=back
-
-=head2 Changes to Existing Diagnostics
+=item *
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
+A new C<locale> warning category has been created, with the following warning
+messages currently in it:
 
 =over 4
 
 =item *
 
-XXX Describe change here
-
-=back
+L<Locale '%s' may not work well.%s|perldiag/Locale '%s' may not work well.%s>
 
-=head2 Diagnostic Removals
+=item *
 
-=over 4
+L<Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".|perldiag/Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".>
 
-=item *
+=back
 
-"Constant is not a FOO reference"
+=back
 
-Compile-time checking of constant dereferencing (e.g.,
-C<< my_constant->() >>) has been removed, since it was not taking
-overloading into account.  [perl #69456] [perl #122607]
+=head2 Changes to Existing Diagnostics
 
-=item *
+XXX Changes (i.e. rewording) of diagnostic messages go here
 
-The warning "Ambiguous use of -foo resolved as -&foo()" has been removed.
-There is actually no ambiguity here, and this impedes the use of negated
-constants; e.g., C<-Inf>.
+=over 4
 
 =item *
 
-The little-known C<my Class $var> syntax (see L<fields> and L<attributes>)
-could get confused in the scope of C<use utf8> if C<Class> were a constant
-whose value contained Latin-1 characters.
+XXX Describe change here
 
 =back
 
@@ -337,7 +281,7 @@ L</Platform Support> section, instead.
 
 =item *
 
-XXX
+F<Configure> with C<-Dmksymlinks> should now be faster. [perl #122002]
 
 =back
 
@@ -408,115 +352,78 @@ XXX
 
 =back
 
-=head1 Internal Changes
-
-XXX Changes which affect the interface available to C<XS> code go here.  Other
-significant internal changes for future core maintainers should be noted as
-well.
-
-[ List each change as a =item entry ]
-
-=over 4
-
-XXX
-
-=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>.
-
-[ List each fix as a =item entry ]
+=head3 Win32
 
 =over 4
 
 =item *
 
-XXX
+In the experimental C<:win32> layer, a crash in C<open> was fixed. Also
+opening C</dev/null>, which works the Win32 Perl's normal C<:unix> layer, was
+implemented for C<:win32>.
+L<[perl #122224]|https://rt.perl.org/Ticket/Display.html?id=122224>
 
 =item *
 
-Constant dereferencing now works correctly for typeglob constants.
-Previously the glob was stringified and its name looked up.  Now the glob
-itself is used.  [perl #69456]
+A new makefile option, C<USE_LONG_DOUBLE>, has been added to the Windows
+dmake makefile for gcc builds only.  Set this to "define" if you want perl to
+use long doubles to give more accuracy and range for floating point numbers.
 
-=item *
-
-When parsing a funny character ($ @ % &) followed by braces, the parser no
-longer tries to guess whether it is a block or a hash constructor (causing
-a syntax error when it guesses the latter), since it can only be a block.
+=back
 
-=item *
+=head1 Internal Changes
 
-C<undef $reference> now frees the referent immediately, instead of hanging
-on to it until the next statement.  [perl #122556]
+XXX Changes which affect the interface available to C<XS> code go here.  Other
+significant internal changes for future core maintainers should be noted as
+well.
 
-=item *
+[ List each change as a =item entry ]
 
-Various cases where the name of a sub is used (autoload, overloading, error
-messages) used to crash for lexical subs, but have been fixed.
+=over 4
 
 =item *
 
-Bareword lookup now tries to avoid vivifying packages if it turns out the
-bareword is not going to be a subroutine name.
+C<screaminstr> has been removed. Although marked as public API, it is
+undocumented and has no usage in modern perl versions on CPAN Grep. Calling it
+has been fatal since 5.17.0.
 
-=item *
-
-Compilation of anonymous constants (e.g., C<sub () { 3 }>) no longer
-deletes any subroutine named C<__ANON__> in the current package.  Not only
-was C<*__ANON__{CODE}> cleared, but there was a memory leak, too.  This bug
-goes back to perl 5.8.0. 
+=back
 
-=item *
+=head1 Selected Bug Fixes
 
-Stub declarations like C<sub f;> and C<sub f ();> no longer wipe out
-constants of the same name declared by C<use constant>.  This bug was
-introduced in perl 5.10.0.
+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 ]
 
-Under some conditions a warning raised in compilation of regular
-expression patterns could be displayed multiple times.  This is now
-fixed.
+=over 4
 
 =item *
 
-C<qr/[\N{named sequence}]/> now works properly in many instances.  Some
-names known to C<\N{...}> refer to a sequence of multiple characters,
-instead of the usual single character.  Bracketed character classes
-generally only match single characters, but now special handling has
-been added so that they can match named sequences, but not if the class
-is inverted or the sequence is specified as the beginning or end of a
-range.  In these cases, the only behavior change from before is a slight
-rewording of the fatal error message given when this class is part of a
-C<?[...])> construct.  When the C<[...]> stands alone, the same
-non-fatal warning as before is raised, and only the first character in
-the sequence is used, again just as before.
+fchmod() and futimes() now set C<$!> when they fail due to being
+passed a closed file handle.  [perl #122703]
 
 =item *
 
-Tainted constants evaluated at compile time no longer cause unrelated
-statements to become tainted.  [perl #122669]
+Perl now comes with a corrected Unicode 7.0 for the erratum issued on
+October 21, 2014 (see L<http://www.unicode.org/errata/#current_errata>),
+dealing with glyph shaping in Arabic.
 
 =item *
 
-C<open $$fh, ...>, which vivifies a handle with a name like "main::_GEN_0",
-was not giving the handle the right reference count, so a double free could
-happen.
+op_free() no longer crashes due to a stack overflow when freeing a
+deeply recursive op tree. [perl #108276]
 
 =item *
 
-When deciding that a bareword was a method name, the parser would get
-confused if an "our" sub with the same name existed, and look up the method
-in the package of the "our" sub, instead of the package of the invocant.
+scalarvoid() would crash due to a stack overflow when processing a
+deeply recursive op tree. [perl #108276]
 
 =item *
 
-The parser no longer gets confused by C<\U=> within a double-quoted string.
-It used to roduce a syntax error, but now compiles it correctly.
-[perl #80368]
+In Perl 5.20.0, C<$^N> accidentally had the internal UTF8 flag turned off
+if accessed from a code block within a regular expression, effectively
+UTF8-encoding the value.  This has been fixed.  [perl #123135]
 
 =back
 
@@ -532,7 +439,10 @@ platform specific bugs also go here.
 
 =item *
 
-XXX
+Starting in 5.21.6, accessing L<perlapi/CvPADLIST> in an XSUB is forbidden.
+CvPADLIST has be reused for a different internal purpose for XSUBs. Guard all
+CvPADLIST expressions with C<CvISXSUB()> if your code doesn't already block
+XSUB CV*s from going through optree CV* expecting code.
 
 =back
 
@@ -556,7 +466,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.21.3..HEAD
+  perl Porting/acknowledgements.pl v5.21.5..HEAD
 
 =head1 Reporting Bugs