This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta entry for Pod::Simple 3.32 to 3.35 upgrade.
[perl5.git] / pod / perldelta.pod
index 9a443d5..5af78af 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.25.2
+[ 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.8
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.25.1 release and the 5.25.2
+This document describes differences between the 5.25.7 release and the 5.25.8
 release.
 
-If you are upgrading from an earlier release such as 5.25.0, first read
-L<perl5251delta>, which describes differences between 5.25.0 and 5.25.1.
+If you are upgrading from an earlier release such as 5.25.6, first read
+L<perl5257delta>, which describes differences between 5.25.6 and 5.25.7.
+
+=head1 Notice
+
+XXX Any important notices here
 
 =head1 Core Enhancements
 
-=head2 Perl can now do default collation in UTF-8 locales on platforms
-that support it
+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.
 
-Some platforms natively do a reasonable job of collating and sorting in
-UTF-8 locales.  Perl now works with those.  For portability and full
-control, L<Unicode::Collate> is still recommended, but now you may
-not need to do anything special to get good-enough results, depending on
-your application.  See
-L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>
+[ List each enhancement as a =head2 entry ]
 
-=head2 Better locale collation of strings containing embedded C<NUL>
-characters
+=head2 New Hash Function For 64-bit Builds
 
-In locales that have multi-level character weights, these are now
-ignored at the higher priority ones.  There are still some gotchas in
-some strings, though.  See
-L<perllocale/Collation of strings containing embedded C<NUL> characters>.
+We have switched to a hybrid hash function to better balance
+performance for short and long keys.
 
-=head2 Lexical subroutines are no longer experimental
+For short keys, 16 bytes and under, we use an optimised variant of
+One At A Time Hard, and for longer keys we use Siphash 1-3. For very
+long keys this is a big improvement in performance. For shorter keys
+there is a modest improvement.
 
-Using the C<lexical_subs> feature no longer emits a warning.  Existing code that disables the C<experimental::lexical_subs> warning category that the
-feature previously used will continue to work.  The C<lexical_subs> feature
-has no effect; all Perl code can use lexical subroutines, regardless of
-what feature declarations are in scope.
+=head1 Security
 
-=head2 C<CORE> subroutines for hash and array functions callable via
-reference
+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.
 
-The hash and array functions in the C<CORE> namespace--C<keys>, C<each>,
-C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>--, can now
-be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference
-(C<<my $k = \&CORE::keys; $k->(\%hash) >>).  Previously they could only be
-used when inlined.
+[ List each security issue as a =head2 entry ]
 
-=head1 Security
+=head1 Incompatible Changes
 
-=head2 C<-Di> switch is now required for PerlIO debugging output
+XXX For a release on a stable branch, this section aspires to be:
 
-Previously PerlIO debugging output would be sent to the file specified
-by the C<PERLIO_DEBUG> environment variable if perl wasn't running
-setuid and the C<-T> or C<-t> switches hadn't been parsed yet.
+    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.
 
-If perl performed output at a point where it hadn't yet parsed its
-switches this could result in perl creating or overwriting the file
-named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied.
+[ List each incompatible change as a =head2 entry ]
 
-Perl now requires the C<-Di> switch to produce PerlIO debugging
-output.  By default this is written to C<stderr>, but can optionally
-be redirected to a file by setting the C<PERLIO_DEBUG> environment
-variable.
+=head1 Deprecations
 
-If perl is running setuid or the C<-T> switch has supplied
-C<PERLIO_DEBUG> is ignored and the debugging output is sent to
-C<stderr> as for any other C<-D> switch.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
 
-=head1 Incompatible Changes
+=head2 Module removals
+
+XXX Remove this section if inapplicable.
+
+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.
+
+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.
+
+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.
+
+=over
+
+=item XXX
 
-=head2 C<keys> returned from an lvalue subroutine
+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.
 
-C<keys> returned from an lvalue subroutine can no longer be assigned
-to in list context.
+=back
+
+[ List each other deprecation as a =head2 entry ]
+
+=head1 Performance Enhancements
+
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
+
+[ List each enhancement as a =item entry ]
+
+=over 4
 
-    sub foo : lvalue { keys(%INC) }
-    (foo) = 3; # death
-    sub bar : lvalue { keys(@_) }
-    (bar) = 3; # also an error
+=item * New Faster Hash Function on 64 bit builds
 
-This makes the lvalue sub case consistent with C<(keys %hash) = ...> and
-C<(keys @_) = ...>, which are also errors.  [perl #128187]
+We use a different hash function for short and long keys. This should
+improve performance and security, especially for long keys.
+
+=item * readline is faster
+
+Reading from a file line-by-line with c<readline()> or C<< <> >> should
+now typically be faster due to a better implementation of the code that
+searches for the next newline character.
+
+=back
 
 =head1 Modules and Pragmata
 
@@ -114,7 +140,7 @@ L<XXX> has been upgraded from version A.xx to B.yy.
 
 =item *
 
-L<Module::CoreList> has been upgraded from 5.20160520 to 5.20160620.
+L<Pod::Simple> has been upgraded from version 3.32 to 3.35.
 
 =back
 
@@ -130,25 +156,30 @@ XXX
 
 =head1 Documentation
 
-=head2 Changes to Existing Documentation
+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>.
 
-=head3 L<perllocale>
+=head2 New Documentation
 
-=over 4
+XXX Changes which create B<new> files in F<pod/> go here.
 
-=item *
+=head3 L<XXX>
 
-Document NUL collation handling.
+XXX Description of the purpose of the new file here
 
-=back
+=head2 Changes to Existing Documentation
+
+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<perlmodlib>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-Updated the mirror list.
+XXX Description of the change here
 
 =back
 
@@ -158,155 +189,223 @@ 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>.
 
+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.
+
 =head2 New Diagnostics
 
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
+
 =head3 New Errors
 
 =over 4
 
 =item *
 
-L<Version control conflict marker|perldiag/"Version control conflict marker">
+XXX L<message|perldiag/"message">
 
-(F) The parser found a line starting with C<E<lt><<<<<<>,
-C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a
-version control system to mark conflicts after a failed merge operation.
+=back
 
-=item *
+=head3 New Warnings
 
-L<%s: command not found|perldiag/"%s: command not found">
+=over 4
 
-(A) You've accidentally run your script through B<bash> or another shell
-instead of Perl.  Check the #! line, or manually feed your script into
-Perl yourself.  The #! line at the top of your file could look like
+=item *
 
-  #!/usr/bin/perl
+XXX L<message|perldiag/"message">
 
-=item *
+=back
 
-L<%s: command not found: %s|perldiag/"%s: command not found: %s">
+=head2 Changes to Existing Diagnostics
 
-(A) You've accidentally run your script through B<zsh> or another shell
-instead of Perl.  Check the #! line, or manually feed your script into
-Perl yourself.  The #! line at the top of your file could look like
+XXX Changes (i.e. rewording) of diagnostic messages go here
 
-  #!/usr/bin/perl
+=over 4
 
 =item *
 
-L<Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in m/%s/">
-
-Unescaped left braces are already illegal in some contexts in regular
-expression patterns, but, due to an oversight, no deprecation warning
-was raised in other contexts where they are intended to become illegal.
-This warning is now raised in these contexts.
+XXX Describe change here
 
 =back
 
-=head2 Changes to Existing Diagnostics
+=head1 Utility Changes
+
+XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
+Most of these are built within the directory F<utils>.
+
+[ 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 L<XXX>
 
 =over 4
 
 =item *
 
-L<Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in m/%s/">
-
-The word "here" has been added to the message that was raised in
-v5.25.1.  This is to indicate that there are contexts in which unescaped
-left braces are not (yet) illegal.
+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 ].
 
-F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no
-files require updates.  This could cause dependencies, F<perlmain.c>
-in particular, to be rebuilt unnecessarily.  [perl #126710]
+=over 4
 
 =item *
 
-The output of C<perl -V> has been reformatted so that each configuration
-and compile-time option is now listed one per line, to improve
-readability.
+XXX
 
 =back
 
 =head1 Testing
 
+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.
+
+[ List each test improvement as a =item entry ]
+
 =over 4
 
 =item *
 
-F<t/harness> now tries really hard not to run tests outside of the Perl
-source tree. [perl #124050]
+XXX
+
+=back
+
+=head1 Platform Support
+
+XXX Any changes to platform support should be listed in the sections below.
+
+[ Within the sections, list each platform as a =item entry with specific
+changes as paragraphs below it. ]
+
+=head2 New Platforms
+
+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.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head2 Discontinued Platforms
+
+XXX List any platforms that this version of perl no longer compiles on.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head2 Platform-Specific Notes
+
+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.
+
+=over 4
+
+=item XXX-some-platform
+
+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
 
 =item *
 
-Perl no longer panics when switching into some locales on machines with
-buggy C<strxfrm()> implementations in their libc. [perl #121734]
+A new API function, C<sv_set_undef(sv)>, has been added. This is
+equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but is more efficient.
 
 =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 *
 
-C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly
-warn when syntax warnings are enabled.  [perl #127333]
+XXX
 
-=item *
+=back
 
-socket() now leaves the error code returned by the system in C<$!> on
-failure.  [perl #128316]
+=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.
 
-Assignment variants of any bitwise ops under the C<bitwise> feature would
-crash if the left-hand side was an array or hash.  [perl #128204]
+[ List each fix as a =item entry ]
+
+=over 4
 
 =item *
 
-C<require> followed by a single colon (as in C<foo() ? require : ...> is
-now parsed correctly as C<require> with implicit $_, rather than
-C<require "">.  [perl #128307]
+XXX
+
+=back
 
-=item *
+=head1 Errata From Previous Releases
 
-Scalar C<keys %hash> can now be assigned to consistently in all scalar
-lvalue contexts.  Previously it worked for some contexts but not others.
+=over 4
 
 =item *
 
-List assignment to C<vec> or C<substr> with an array or hash for its first
-argument used to result in crashes or "Can't coerce" error messages at run
-time, unlike scalar assignment, which would give an error at compile time.
-List assignment now gives a compile-time error, too.  [perl #128260]
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
 
 =back
 
+=head1 Obituary
+
+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.25.1..HEAD
+  perl Porting/acknowledgements.pl v5.25.5..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
-L<https://rt.perl.org/> .  There may also be information at
+If you find what you think is a bug, you might check the perl bug database
+at 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