This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for 6146d9e1c87d
[perl5.git] / pod / perldelta.pod
index 56b4e98..f97c710 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.23.4
+[ 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.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.23.3 release and the 5.23.4
+This document describes differences between the 5.23.6 release and the 5.23.7
 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 Incompatible Changes
-
-=head2 Lexical $_ has been removed
-
-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.
-
-=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 Performance Enhancements
+If you are upgrading from an earlier release such as 5.23.5, first read
+L<perl5236delta>, which describes differences between 5.23.5 and 5.23.6.
 
-=over 4
+=head1 Notice
 
-=item *
+XXX Any important notices here
 
-C</fixed-substr/> has been made much faster.
+=head1 Core Enhancements
 
-On platforms with a libc memchr() implementation which makes good use of
-underlying hardware support, patterns which include fixed substrings will now
-often be much faster; for example with glibc on a recent x86_64 CPU, this:
+XXX New core language features go here.  Summarize user-visible core language
+enhancements.  Particularly prominent performance optimisations could go
+here, but most should go in the L</Performance Enhancements> section.
 
-    $s = "a" x 1000 . "wxyz";
-    $s =~ /wxyz/ for 1..30000
+[ List each enhancement as a =head2 entry ]
 
-is now about 7 times faster.  On systems with slow memchr(), e.g. 32-bit ARM
-Raspberry Pi, there will be a small or little speedup.  Conversely, some
-pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3
-times slower on the rPi, 1.5x slower on x86_64.
+=head1 Security
 
-=back
+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.
 
-=head1 Modules and Pragmata
+[ List each security issue as a =head2 entry ]
 
-=head2 Updated Modules and Pragmata
+=head1 Incompatible Changes
 
-=over 4
+XXX For a release on a stable branch, this section aspires to be:
 
-=item *
+    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.
 
-L<B> has been upgraded from version 1.59 to 1.60.
+[ List each incompatible change as a =head2 entry ]
 
-=item *
+=head2 C<qr/\b{wb}/> is now tailored to Perl expectations
 
-L<bignum> has been upgraded from version 0.40 to 0.41.
+This is now more suited to be a drop-in replacement for plain C<\b>, but
+giving better results for parsing natural language.  Previously it
+strictly followed the current Unicode rules which calls for it to match
+between each white space character.  Now it doesn't generally match
+within spans of white space, behaving like C<\b> does.  See
+L<perlrebackslash/\b{wb}>
 
-=item *
+=head1 Deprecations
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.068 to 2.069.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
 
-=item *
+=head2 Module removals
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.068_01 to 2.069.
+XXX Remove this section if inapplicable.
 
-=item *
+The following modules will be removed from the core distribution in a
+future release, and will at that time need to be installed from CPAN.
+Distributions on CPAN which require these modules will need to list them as
+prerequisites.
 
-L<Devel::PPPort> has been upgraded from version 3.31 to 3.32.
+The core versions of these modules will now issue C<"deprecated">-category
+warnings to alert you to this fact.  To silence these deprecation warnings,
+install the modules in question from CPAN.
 
-=item *
+Note that these are (with rare exceptions) fine modules that you are encouraged
+to continue to use.  Their disinclusion from core primarily hinges on their
+necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
+not usually on concerns over their design.
 
-L<DynaLoader> has been upgraded from version 1.34 to 1.35.
+=over
 
-=item *
+=item XXX
 
-L<Encode> has been upgraded from version 2.77 to 2.78.
+XXX Note that deprecated modules should be listed here even if they are listed
+as an updated module in the L</Modules and Pragmata> section.
 
-=item *
+=back
 
-L<experimental> has been upgraded from version 0.014 to 0.016.
+[ List each other deprecation as a =head2 entry ]
 
-=item *
+=head1 Performance Enhancements
 
-L<ExtUtils::CBuilder> has been upgraded from version 0.280223 to 0.280224.
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
 
-=item *
+[ List each enhancement as a =item entry ]
 
-L<File::Path> has been upgraded from version 2.11 to 2.12.
+=over 4
 
 =item *
 
-L<if> has been upgraded from version 0.0605 to 0.0606.
-
-=item *
+XXX
 
-L<IO> has been upgraded from version 1.35 to 1.36.
+=back
 
-For an IO::Poll object C<$poll> with no file handles yet in it,
-C<$poll-E<gt>poll(10)> now sleeps for up to 10 seconds anyway instead of
-returning 0 immediately.
-L<[cpan #25049]|https://rt.cpan.org/Ticket/Display.html?id=25049>
+=head1 Modules and Pragmata
 
-=item *
+XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
+go here.  If Module::CoreList is updated, generate an initial draft of the
+following sections using F<Porting/corelist-perldelta.pl>.  A paragraph summary
+for important changes should then be added by hand.  In an ideal world,
+dual-life modules would have a F<Changes> file that could be cribbed.
 
-The IO-Compress modules have been upgraded from version 2.068 to 2.069.
+[ Within each section, list entries as a =item entry ]
 
-=item *
+=head2 New Modules and Pragmata
 
-L<Math::BigInt> has been upgraded from version 1.999701 to 1.999704.
+=over 4
 
 =item *
 
-L<Math::BigInt::FastCalc> has been upgraded from version 0.31 to 0.34.
-
-=item *
+XXX
 
-L<Module::CoreList> has been upgraded from version 5.20150920 to 5.20151020.
+=back
 
-=item *
+=head2 Updated Modules and Pragmata
 
-L<Module::Metadata> has been upgraded from version 1.000027 to 1.000029.
+=over 4
 
 =item *
 
-L<Perl::OSType> has been upgraded from version 1.008 to 1.009.
+L<Module::CoreList> has been upgraded from version 5.20151220 to 5.20160120.
 
 =item *
 
-L<PerlIO::encoding> has been upgraded from version 0.21 to 0.22.
-
-PerlIO::encoding objects are now properly duplicated.
-L<[perl #31923]|https://rt.perl.org/Ticket/Display.html?id=31923>
+The F<cpan/podlators/> bundle has been upgraded from version 2.28 to 4.04.
 
-=item *
+=back
 
-L<POSIX> has been upgraded from version 1.57 to 1.58.
+=head2 Removed Modules and Pragmata
 
-If C<POSIX::strerror> was passed C<$!> as its argument then it accidentally
-cleared C<$!>.  This has been fixed.
-L<[perl #126229]|https://rt.perl.org/Ticket/Display.html?id=126229>
+=over 4
 
 =item *
 
-L<Socket> has been upgraded from version 2.020_01 to 2.020_02.
-
-Various fixes have been applied to inet_pton for the benefit of MS VC++ builds
-on Windows.  In particular, this restores the build with MS VC++ 6.0.
+XXX
 
-=item *
+=back
 
-L<Unicode::Normalize> has been upgraded from version 1.19 to 1.21.
+=head1 Documentation
 
-=item *
+XXX Changes to files in F<pod/> go here.  Consider grouping entries by
+file and be sure to link to the appropriate page, e.g. L<perlfunc>.
 
-L<warnings> has been upgraded from version 1.33 to 1.35.
+=head2 New Documentation
 
-The C<warnings::enabled> example now actually uses C<warnings::enabled>.
-L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051>
+XXX Changes which create B<new> files in F<pod/> go here.
 
-=back
+=head3 L<XXX>
 
-=head1 Documentation
+XXX Description of the purpose of the new file here
 
 =head2 Changes to Existing Documentation
 
-=head3 L<perlapi>
+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>
 
 =over 4
 
 =item *
 
-The process of using undocumented globals has been documented, namely, that one
-should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>
-first to get the go-ahead for documenting and using an undocumented function or
-global variable.
+XXX Description of the change here
 
 =back
 
-=head3 L<perlsub>
+=head1 Diagnostics
 
-=over 4
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages.  For the complete list of
+diagnostic messages, see L<perldiag>.
 
-=item *
+XXX New or changed warnings emitted by the core's C<C> code go here.  Also
+include any changes in L<perldiag> that reconcile it to the C<C> code.
 
-Updated to note that anonymous subroutines can have signatures.
+=head2 New Diagnostics
 
-=back
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
 
-=head3 L<perltie>
+=head3 New Errors
 
 =over 4
 
 =item *
 
-The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
+XXX L<message|perldiag/"message">
 
 =back
 
-=head3 L<perlvar>
+=head3 New Warnings
 
 =over 4
 
 =item *
 
-The specific true value of C<$!{E...}> is now documented, noting that it is
-subject to change and not guaranteed.
+XXX L<message|perldiag/"message">
 
 =back
 
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages.  For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
+=head2 Changes to Existing Diagnostics
 
-=head3 New Errors
+XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =over 4
 
 =item *
 
-L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/">
-
-=item *
+Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no
+longer deprecated.  It is discouraged to encourage uniformity (so that, for
+example, one can grep more easily) but it will not be removed. [perl #127060]
 
-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/">
+=back
 
-=item *
+=head1 Utility Changes
 
-L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
+XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
+Most of these are built within the directory F<utils>.
 
-=back
+[ List utility changes as a =head2 entry for each utility and =item
+entries for each change
+Use L<XXX> with program names to get proper documentation linking. ]
 
-=head2 Changes to Existing Diagnostics
+=head2 L<XXX>
 
 =over 4
 
 =item *
 
-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.
+XXX
 
 =back
 
 =head1 Configuration and Compilation
 
-=over 4
+XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
+go here.  Any other changes to the Perl build process should be listed here.
+However, any platform-specific changes should be listed in the
+L</Platform Support> section, instead.
 
-=item *
+[ List changes as a =item entry ].
 
-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.
+=over 4
 
 =item *
 
-If you had F<Configure> hints for C<d_procselfexe> or C<procselfexe>, they were
-probably broken by the AmigaOS changes in Perl 5.23.3.  This has been now
-fixed.
-L<[perl #126152]|https://rt.perl.org/Ticket/Display.html?id=126152>
+F<Configure> no longer probes for F<libnm> by default.  Originally
+this was the "New Math" library, but the name has been re-used by the
+GNOME NetworkManager.  [perl #127131]
 
 =back
 
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
+=head1 Testing
 
-=over 4
+XXX Any significant changes to the testing of a freshly built perl should be
+listed here.  Changes which create B<new> files in F<t/> go here as do any
+large changes to the testing harness (e.g. when parallel testing was added).
+Changes to existing files in F<t/> aren't worth summarizing, although the bugs
+that they represent may be covered elsewhere.
 
-=item IRIX
+[ List each test improvement as a =item entry ]
 
-=over
-
-=item *
-
-Under some circumstances IRIX stdio fgetc() and fread() set the errno to
-C<ENOENT>, which made no sense according to either IRIX or POSIX docs.  Errno
-is now cleared in such cases.
-L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
+=over 4
 
 =item *
 
-Problems when multiplying long doubles by infinity have been fixed.
-L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
+XXX
 
 =back
 
-=item MacOS X
-
-=over
-
-=item *
-
-Until now OS X builds of perl have specified a link target of 10.3 (Panther,
-2003) but have not specified a compiler target.  From now on, builds of perl on
-OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X
-version and specify that as the explicit build target in both compiler and
-linker flags, thus preserving binary compatibility for extensions built later
-regardless of changes in OS X, SDK, or compiler and linker versions.  To
-override the default value used in the build and preserved in the flags,
-specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building
-perl, where 10.N is the version of OS X you wish to target.  In OS X 10.5 or
-earlier there is no change to the behavior present when those systems were
-current; the link target is still OS X 10.3 and there is no explicit compiler
-target.
+=head1 Platform Support
 
-=back
+XXX Any changes to platform support should be listed in the sections below.
 
-=item VMS
+[ Within the sections, list each platform as a =item entry with specific
+changes as paragraphs below it. ]
 
-=over
+=head2 New Platforms
 
-=item *
+XXX List any platforms that this version of perl compiles on, that previous
+versions did not.  These will either be enabled by new files in the F<hints/>
+directories, or new subdirectories and F<README> files at the top level of the
+source tree.
 
-Perl now implements its own C<killpg> by scanning for processes in the
-specified process group, which may not mean exactly the same thing as a Unix
-process group, but allows us to send a signal to a parent (or master) process
-and all of its sub-processes.  At the perl level, this means we can now send a
-negative pid like so:
+=over 4
 
-    kill SIGKILL, -$pid;
+=item XXX-some-platform
 
-to signal all processes in the same group as C<$pid>.
+XXX
 
 =back
 
-=item Win32
+=head2 Discontinued Platforms
 
-=over
+XXX List any platforms that this version of perl no longer compiles on.
 
-=item *
+=over 4
 
-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 XXX-some-platform
 
-=item *
+XXX
 
-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 F<.bashrc> will not change the environmental variable in other
-existing, running, processes.
+=back
 
-=item *
+=head2 Platform-Specific Notes
 
-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.
+XXX List any changes for specific platforms.  This could include configuration
+and compilation changes or changes in portability/compatibility.  However,
+changes within modules for platforms should generally be listed in the
+L</Modules and Pragmata> section.
 
-=item *
+=over 4
 
-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.
+=item XXX-some-platform
 
-=back
+XXX
 
 =back
 
 =head1 Internal Changes
 
-=over 4
+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 ]
 
-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)>.
+=over 4
 
 =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 argument is likely to raise a compiler warning now (it's always
-been documented to require a signed value; formerly int, lately SSize_t).
+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 ]
+
 =over 4
 
 =item *
 
-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>
+Calls to the placeholder C<&PL_sv_yes> used internally when an
+import() or unimport() method isn't found now correctly handle scalar
+context.  [perl #126042]
 
 =item *
 
-Some regressions from 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>
-L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404>
+Fixed some problems introduced in 5.23.2 with list assignment dealing
+with magic and XS functions returning their arguments.  [perl #126633]
 
 =item *
 
-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.
+Report more context when we see an array where we expect to see an
+operator.  [perl #123737]
 
-    @a = (1) x $big_number
+=item *
 
-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>
+Modifying an array that was previously a package C<@ISA> no longer
+causes assertion failures or crashes.  [perl #123788]
 
-=item *
+=back
 
-In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if
-the condition is C<(?!)> then perl failed the match outright instead of
-matching the no-pattern.  This has been fixed.
-L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222>
+=head1 Known Problems
 
-=item *
+XXX Descriptions of platform agnostic bugs we know we can't fix go here.  Any
+tests that had to be C<TODO>ed for the release would be noted here.  Unfixed
+platform specific bugs also go here.
 
-The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional
-argument and set C<REGERROR>/C<REGMARK> appropriately as well.
-L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186>
+[ List each fix as a =item entry ]
+
+=over 4
 
 =item *
 
-Several bugs, including a segmentation fault, have been fixed with the bounds
-checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
-C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>.  All the C<\B{}> ones now match an empty
-string; none of the C<\b{}> ones do.
-L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
+XXX
 
 =back
 
@@ -469,25 +398,21 @@ L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
 
 =item *
 
-(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:
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
 
-    OPpASSIGN_COMMON_AGG
-    OPpASSIGN_COMMON_RC1
-    OPpASSIGN_COMMON_SCALAR
+=back
 
-and the runtime now sometimes does a mark and sweep using the C<SVf_BREAK> to
-detect common elements.
+=head1 Obituary
 
-=back
+XXX If any significant core contributor has died, we've added a short obituary
+here.
 
 =head1 Acknowledgements
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.23.3..HEAD
+  perl Porting/acknowledgements.pl v5.23.6..HEAD
 
 =head1 Reporting Bugs