This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta copy-editing
[perl5.git] / pod / perldelta.pod
index 2cb9d72..4604e8e 100644 (file)
@@ -5,13 +5,16 @@
 [ 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.23.0
+perldelta - what is new for perl v5.23.4
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.22.0 release and the 5.23.0
+This document describes differences between the 5.23.3 release and the 5.23.4
 release.
 
+If you are upgrading from an earlier release such as 5.23.2, first read
+L<perl5233delta>, which describes differences between 5.23.2 and 5.23.3.
+
 =head1 Notice
 
 XXX Any important notices here
@@ -24,11 +27,6 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Unicode 8.0 is now supported
-
-For details on what is in this release, see
-L<http://www.unicode.org/versions/Unicode8.0.0/>.
-
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -39,13 +37,22 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
-XXX For a release on a stable branch, this section aspires to be:
+=head2 Lexical $_ has been removed
 
-    There are no changes intentionally incompatible with 5.XXX.XXX
-    If any exist, they are bugs, and we request that you submit a
-    report.  See L</Reporting Bugs> below.
+C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
+with no obvious solution.  In Perl 5.18.0, it was made experimental on the
+theory that it would either be removed or redesigned in a less confusing (but
+backward-incompatible) way.  Over the following years, no alternatives were
+proposed.  The feature has now been removed and will fail to compile.
 
-[ List each incompatible change as a =head2 entry ]
+=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
+
+The experimental Extended Bracketed Character Classes can contain regular
+bracketed character classes within them.  These differ from regular ones in
+that white space is generally ignored, unless escaped by preceding it with a
+backslash.  The white space that is ignored is now limited to just tab C<\t>
+and SPACE characters.  Previously, it was any white space.  See
+L<perlrecharclass/Extended Bracketed Character Classes>.
 
 =head1 Deprecations
 
@@ -121,67 +128,7 @@ XXX
 
 =item *
 
-L<CPAN::Meta::Requirements> has been upgraded from version 2.132 to 2.133.
-
-=item *
-
-L<CPAN::Meta::YAML> has been upgraded from version 0.014 to 0.016.
-
-=item *
-
-L<Getopt::Long> has been upgraded from version 2.45 to 2.46.
-
-=item *
-
-L<HTTP::Tiny> has been upgraded from version 0.054 to 0.056.
-
-=item *
-
-The libnet distribution has been upgraded from version 3.05 to 3.06.
-
-=item *
-
-L<Math::BigInt> has been upgraded from version 1.9997 to 1.999701.
-
-Correct the behaviour of bdiv() and bmod() in list context. [perl #124300]
-
-Correct C<< Math::BigInt->new() >> for non-integer input.  [perl #124325]
-
-Speed up Math::BigFloat -> blog(). [perl #124382]
-
-Fix bug in Math::BigFloat's bceil() and bint() methods. [perl #124412]
-
-=item *
-
-L<Math::BigRat> has been upgraded from version 0.2608 to 0.260801.
-
-Correct the behaviour of bdiv() and bmod() in list context. [perl #124303]
-
-=item *
-
-L<Module::Metadata> has been upgraded from version 1.000026 to 1.000027.
-
-=item *
-
-L<parent> has been upgraded from version 0.232 to 0.234.
-
-=item *
-
-L<perl5db.pl> has been upgraded from version 1.49 to 1.49_01.
-
-User actions are no longer evaluated after the script under the
-debugger finishes.  [perl #71678]
-
-=item *
-
-L<UNIVERSAL> has been upgraded from version 1.12 to 1.13.
-
-Don't import from L<UNIVERSAL> in its documentation, it no longer
-exports anything.  [perl #125410]
-
-=item *
-
-The Scalar-List-Utils distribution has been upgraded from version 1.41 to 1.42.
+L<XXX> has been upgraded from version A.xx to B.yy.
 
 =back
 
@@ -244,7 +191,11 @@ and New Warnings
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/">
+
+=item *
+
+L<perldiag/"Illegal user-defined property name">
 
 =back
 
@@ -266,7 +217,10 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+L<"Can't modify non-lvalue subroutine call of &%s"|perldiag/"Can't modify non-lvalue subroutine call of &%s">
+
+This error now reports the name of the non-lvalue subroutine you attempted to
+use as an lvalue.
 
 =back
 
@@ -285,7 +239,9 @@ Use L<XXX> with program names to get proper documentation linking. ]
 
 =item *
 
-XXX
+Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
+C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
+the interpreter, since Perl 5.17.10.  This has been fixed.
 
 =back
 
@@ -367,23 +323,49 @@ L</Modules and Pragmata> section.
 
 =over 4
 
+=item XXX-some-platform
+
+XXX
+
 =item Win32
 
 =over
 
 =item *
 
-Visual C++ 2013 builds will now execute on XP and higher. Previously they would
-only execute on Vista and higher.
+A new build option C<USE_NO_REGISTRY> has been added to the makefiles.  This
+option is off by default, meaning the default is to do Windows registry
+lookups.  This option stops Perl from looking inside the registry for anything.
+For what values are looked up in the registry see L<perlwin32>.  Internally, in
+C, the name of this option is C<WIN32_NO_REGISTRY>.
 
 =item *
 
-You can now build perl with GNU Make and GCC.  [perl #123440]
+The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
+C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
+vars starting with C<PERL> has changed.  Previously, the 2 keys were checked
+for entries at all times through Perl processes life time even if they did not
+exist.  For performance reasons, now, if the root key (i.e.
+C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
+not exist at process start time, it will not be checked again for C<%ENV>
+override entries for the remainder of the Perl processes life.  This more
+closely matches Unix behaviour in that the environment is copied or inherited
+on startup and changing the variable in the parent process or another process
+or editing <.bashrc> will not change the environmental variable in other
+existing, running, processes.
 
 =item *
 
-C<truncate($filename, $size)> now works for files over 4GB in size.
-[perl #125347]
+One glob fetch was removed for each C<-X> or C<stat> call whether done from
+Perl code or internally from Perl's C code.  The glob being looked up was
+C<${^WIN32_SLOPPY_STAT}> which is a special variable.  This makes C<-X> and
+C<stat> slightly faster.
+
+=item *
+
+During miniperl's process startup, during the build process, 4 to 8 IO calls
+related to the process starting F<.pl> and the F<buildcustomize.pl> file were
+removed from the code opening and executing the first 1 or 2 F<.pl> files.
 
 =back
 
@@ -401,7 +383,21 @@ well.
 
 =item *
 
-XXX
+L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>.  It
+previously has always returned C<0> since Perl 5.000 stable but that was
+undocumented.  Although C<sv_backoff> is marked as public API, XS code is not
+expected to be impacted since the proper API call would be through public API
+C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
+C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
+meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
+
+=item *
+
+The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
+with integer truncation and wrapping.  In particular, some casts formerly used
+within the macros have been removed.  This means for example that passing an
+unsigned nitems arg is likely to raise a compiler warning now (it's always been
+documented to require a signed value; formerly int, lately SSize_t).
 
 =back
 
@@ -416,14 +412,30 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-Duplicating a closed file handle for write no longer creates a
-filename of the form F<GLOB(0xXXXXXXXX)>.  [perl #125115]
+There were places in regular expression patterns where comments (C<(?#...)>)
+weren't allowed, but should have been.  This is now fixed.
+L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
+
+=item *
+
+A regression from perl Perl 5.20 has been fixed, in which some syntax errors in
+L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
+within regular expression patterns could cause a segfault instead of a proper
+error message.
+L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
 
 =item *
 
-Warning fatality is now ignored when rewinding the stack.  This
-prevents infinite recursion when the now fatal error also causes
-rewinding of the stack.  [perl #123398]
+Some problems with attempting to extend the perl stack to around 2G or 4G
+entries have been fixed.  This was particularly an issue on 32-bit perls built
+to use 64-bit integers, and was easily noticeable with the list repetition
+operator, e.g.
+
+    @a = (1) x $big_number
+
+Formerly perl may have crashed, depending on the exact value of C<$big_number>;
+now it will typically raise an exception.
+L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
 
 =back
 
@@ -449,8 +461,17 @@ XXX
 
 =item *
 
-XXX Add anything here that we forgot to add, or were mistaken about, in
-the perldelta of a previous release.
+(This was actually done in Perl 5.23.2, but the perldelta entry got missed.)
+The way that C<OP_AASSIGN> handles assignment with potentially common values
+(e.g. C<($a,$b) = ($b, $a)> has changed.  In particular the C<OPpASSIGN_COMMON>
+flag has been replaced with three more specific flags:
+
+    OPpASSIGN_COMMON_AGG
+    OPpASSIGN_COMMON_RC1
+    OPpASSIGN_COMMON_SCALAR
+
+and the runtime now sometimes does a mark and sweep using the C<SVf_BREAK> to
+detect common elements.
 
 =back
 
@@ -463,14 +484,14 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.23.0..HEAD
+  perl Porting/acknowledgements.pl v5.23.3..HEAD
 
 =head1 Reporting Bugs
 
 If you find what you think is a bug, you might check the articles recently
 posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-https://rt.perl.org/ .  There may also be information at
-http://www.perl.org/ , the Perl Home Page.
+L<https://rt.perl.org/> .  There may also be information at
+L<http://www.perl.org/> , the Perl Home Page.
 
 If you believe you have an unreported bug, please run the L<perlbug> program
 included with your release.  Be sure to trim your bug down to a tiny but