summaryrefslogtreecommitdiff
path: root/pod/perldelta.pod
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2023-03-21 10:30:02 +0100
committerYves Orton <demerphq@gmail.com>2023-03-21 10:30:02 +0100
commitdf94aa3d67b1cf57c44b79debbd06bc28605d979 (patch)
tree4aff86f663de0d1caedce31a058ec4c636557555 /pod/perldelta.pod
parent970b4da358007e29f3d1795462fe283746b23362 (diff)
downloadperl-df94aa3d67b1cf57c44b79debbd06bc28605d979.tar.gz
New perldelta for 5.37.11
Diffstat (limited to 'pod/perldelta.pod')
-rw-r--r--pod/perldelta.pod526
1 files changed, 202 insertions, 324 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 1dd3605795..5006c38f5b 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -2,533 +2,411 @@
=head1 NAME
-perldelta - what is new for perl v5.37.10
+[ 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.37.11
=head1 DESCRIPTION
-This document describes differences between the 5.37.9 release and the 5.37.10
+This document describes differences between the 5.37.10 release and the 5.37.11
release.
-If you are upgrading from an earlier release such as 5.37.8, first read
-L<perl5379delta>, which describes differences between 5.37.8 and 5.37.9.
+If you are upgrading from an earlier release such as 5.37.9, first read
+L<perl53710delta>, which describes differences between 5.37.9 and 5.37.10.
-=head1 Core Enhancements
+=head1 Notice
-=head2 Some C<goto>s are now permitted in C<defer> and C<finally> blocks
-
-Perl version 5.36.0 added C<defer> blocks and permitted the C<finally> keyword
-to also add similar behaviour to C<try>/C<catch> syntax. These did not permit
-any C<goto> expression within the body, as it could have caused control flow
-to jump out of the block. Now, some C<goto> expressions are allowed, if they
-have a constant target label, and that label is found within the block.
-
- use feature 'defer';
-
- defer {
- goto LABEL;
- print "This does not execute\n";
- LABEL: print "This does\n";
- }
-
-=head2 New regexp variable ${^LAST_SUCCESSFUL_PATTERN}
-
-This allows access to the last succesful pattern that matched in the current scope.
-Many aspects of the regex engine refer to the "last successful pattern". The empty
-pattern reuses it, and all of the magic regex vars relate to it. This allows
-access to its pattern. The following code
-
- if (m/foo/ || m/bar/) {
- s//PQR/;
- }
-
-can be rewritten as follows
-
- if (m/foo/ || m/bar/) {
- s/${^LAST_SUCCESSFUL_PATTERN}/PQR/;
- }
-
-and it will do the exactly same thing.
-
-=head2 Deprecation warnings now have specific subcategories
-
-As of 5.37.10 all deprecation warnings will have their own specific
-deprecation category which can be disabled individually. You can see a
-list of all deprecated features in L<perldeprecation>, and in
-L<warnings>. The following list is from L<warnings>:
-
- +- deprecated ----+
- | |
- | +- deprecated::apostrophe_as_package_separator
- | |
- | +- deprecated::delimiter_will_be_paired
- | |
- | +- deprecated::dot_in_inc
- | |
- | +- deprecated::goto_construct
- | |
- | +- deprecated::smartmatch
- | |
- | +- deprecated::unicode_property_name
- | |
- | +- deprecated::version_downgrade
-
-It is still possible to disable all deprecation warnings in a single
-statement with
-
- no warnings 'deprecated';
-
-but as of 5.37.10 it is possible to have a finer grained control. As
-has historically been the case these warnings are automatically
-enabled with
-
- use warnings;
-
-=head2 %{^HOOK} API introduced
-
-For various reasons it can be difficult to create subroutine wrappers
-for some of perls keywords. Any keyword which has an undefined
-prototype simply cannot be wrapped with a subroutine, and some keywords
-which perl permits to be wrapped are in practice very tricky to wrap.
-For example C<require> is tricky to wrap, it is possible but doing so
-changes the stack depth, and the standard methods of exporting assume
-that they will be exporting to a package at certain stack depth up the
-stack, and the wrapper will thus change where functions are exported to
-unless implemented with a great deal of care. This can be very awkward
-to deal with.
-
-Accordingly we have introduced a new hash called C<%{^HOOK}> which is
-intended to facilitate such cases. When a keyword supports any kind of
-special hook then the hook will live in this new hash. Hooks in this
-hash will be named after the function they are called by, followed by
-two underbars and then the phase they are executed in, currently either
-before or after the keyword is executed.
-
-In this initial release we support two hooks C<require__before> and
-C<require__after>. These are provided to make it easier to perform tasks
-before and after a require statement.
-
-See L<perlvar> for more details.
+XXX Any important notices here
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
+=head1 Core Enhancements
-L<Benchmark> has been upgraded from version 1.23 to 1.24.
+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.
-=item *
+[ List each enhancement as a =head2 entry ]
-L<Class::Struct> has been upgraded from version 0.67 to 0.68.
+=head1 Security
-=item *
+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.
-L<Config::Perl::V> has been upgraded from version 0.35 to 0.36.
+[ List each security issue as a =head2 entry ]
-=item *
+=head1 Incompatible Changes
-L<Data::Dumper> has been upgraded from version 2.187 to 2.188.
+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<Digest::SHA> has been upgraded from version 6.03 to 6.04.
+[ List each incompatible change as a =head2 entry ]
-=item *
+=head1 Deprecations
-L<Env> has been upgraded from version 1.05 to 1.06.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
-=item *
+=head2 Module removals
-L<feature> has been upgraded from version 1.80 to 1.81.
+XXX Remove this section if not applicable.
-=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<File::Spec> has been upgraded from version 3.88 to 3.89.
+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<Net::Cmd> has been upgraded from version 3.14 to 3.15.
+=over
-=item *
+=item XXX
-L<Math::Complex> has been upgraded from version 1.61 to 1.62.
+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<Module::CoreList> has been upgraded from version 5.20230220 to 5.20230320.
+[ List each other deprecation as a =head2 entry ]
-=item *
+=head1 Performance Enhancements
-L<overload> has been upgraded from version 1.36 to 1.37.
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
-=item *
+[ List each enhancement as an =item entry ]
-L<POSIX> has been upgraded from version 2.11 to 2.12.
+=over 4
=item *
-L<Storable> has been upgraded from version 3.29 to 3.31.
-
-=item *
+XXX
-L<Test::Simple> has been upgraded from version 1.302192 to 1.302194.
+=back
-=item *
+=head1 Modules and Pragmata
-L<threads> has been upgraded from version 2.34 to 2.35.
+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.
-=item *
+The list of new and updated modules is modified automatically as part of
+preparing a Perl release, so the only reason to manually add entries here is if
+you're summarising the important changes in the module update. (Also, if the
+manually-added details don't match the automatically-generated ones, the
+release manager will have to investigate the situation carefully.)
-L<threads::shared> has been upgraded from version 1.65 to 1.67.
+[ Within each section, list entries as an =item entry ]
-=item *
+=head2 New Modules and Pragmata
-L<Time::HiRes> has been upgraded from version 1.9772 to 1.9774.
+=over 4
=item *
-L<warnings> has been upgraded from version 1.62 to 1.63.
+XXX Remove this section if Porting/corelist-perldelta.pl did not add any content here.
-=item *
+=back
-L<XS::APItest> has been upgraded from version 1.30 to 1.32.
+=head2 Updated Modules and Pragmata
-=back
+=over 4
-=head1 Documentation
+=item *
-=head2 Changes to Existing Documentation
+L<XXX> has been upgraded from version A.xx to B.yy.
-We have attempted to update the documentation to reflect the changes
-listed in this document. If you find any we have missed, open an issue
-at L<https://github.com/Perl/perl5/issues/new/choose>.
+XXX If there was something important to note about this change, include that here.
-Additionally, the following selected changes have been made:
+=back
-=head3 F<pod/perldebguts.pod>
+=head2 Removed Modules and Pragmata
=over 4
=item *
-Updates to regex internals documentation.
+XXX Remove this section if Porting/corelist-perldelta.pl did not add any content here.
=back
-=head3 F<pod/perldeprecation.pod>
+=head1 Documentation
-=over 4
+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>.
-=item *
+=head2 New Documentation
-Added information about unscheduled deprecations and their categories.
+XXX Changes which create B<new> files in F<pod/> go here.
-=item *
+=head3 L<XXX>
-Added category information for existing scheduled deprecations.
+XXX Description of the purpose of the new file here
-=item *
+=head2 Changes to Existing Documentation
-Added smartmatch and apostrophe as a package separator deprecation data.
+We have attempted to update the documentation to reflect the changes
+listed in this document. If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
-=back
+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 F<pod/perlexperiment.pod>
+Additionally, the following selected changes have been made:
+
+=head3 L<XXX>
=over 4
=item *
-Smartmatch has been moved from experimental status to deprecated status.
-Unfortunately the experiment did not work out.
+XXX Description of the change here
=back
-=head3 F<pod/perlexperiment.pod>
+=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.
-Documented new require hooks.
+=head2 New Diagnostics
-=back
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
-=head3 F<pod/perlguts.pod>
+=head3 New Errors
=over 4
=item *
-Documented new magic types C<PERL_MAGIC_destruct>, C<PERL_MAGIC_hook> and
-C<PERL_MAGIC_hookelem>.
+XXX L<message|perldiag/"message">
-=item *
+=back
+
+=head3 New Warnings
-Documented several new or existing save stack macros: C<SAVERCPV()>,
-C<SAVEGENERICSV()>, C<SAVEFREEPV()>, C<SAVEFREERCPV()>
+=over 4
=item *
-Documented new mortalization callback macros: C<MORTALSVFUNC_X()>,
-C<MORTALDESTRUCTOR_SV()>
+XXX L<message|perldiag/"message">
=back
-=head3 F<pod/perlop.pod>
+=head2 Changes to Existing Diagnostics
+
+XXX Changes (i.e. rewording) of diagnostic messages go here
=over 4
=item *
-Document the behavior of matching the empty pattern better and specify
-its relationship to the new C<${^LAST_SUCCESSFUL_PATTERN}> properly.
+XXX Describe change here
=back
-=head3 F<pod/perlvar.pod>
+=head1 Utility Changes
-=over 4
+XXX Changes to installed programs such as F<perldoc> and F<xsubpp> go here.
+Most of these are built within the directory F<utils>.
-=item *
+[ 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. ]
-Added information on the new C<%{^HOOK}> interface, and the new
-C<require__before> and C<require__after> hooks which it exposes.
+=head2 L<XXX>
-=item *
-
-Correct information on the regex variables C<${^PREMATCH}>, C<${^MATCH}>
-and C<${^POSTMATCH}>, all of which were incorrectly documented due to an
-oversight. Specifically they only work properly after a regex operation
-that used the /p modifier to enable them.
+=over 4
=item *
-Added information on the new regex variable C<${^LAST_SUCCESSFUL_PATTERN}>,
-which represents the pattern of the last successful regex match in scope.
+XXX
=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>.
+=head1 Configuration and Compilation
-=head2 New Diagnostics
+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.
-=head3 New Errors
+[ List changes as an =item entry ].
=over 4
=item *
-L<${^HOOK}{%s} may only be a CODE reference or undef|perldiag/"${^HOOK}{%s} may only be a CODE reference or undef">
+XXX
-=item *
+=back
-L<Attempt to set unknown hook '%s' in %{^HOOK}|perldiag/"Attempt to set unknown hook '%s' in %{^HOOK}">
+=head1 Testing
-=item *
+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.
-L<Missing or undefined argument to %s via %{^HOOK}{require__before}|perldiag/"Missing or undefined argument to %s via %{^HOOK}{require__before}">
+XXX If there were no significant test changes, say this:
-=item *
+Tests were added and changed to reflect the other additions and changes
+in this release.
-L<Too many capture groups (limit is %d) in regex mE<sol>%sE<sol>|perldiag/"Too many capture groups (limit is %d) in regex m/%s/">
+XXX If instead there were significant changes, say this:
-=back
+Tests were added and changed to reflect the other additions and
+changes in this release. Furthermore, these significant changes were
+made:
-=head3 New Warnings
+[ List each test improvement as an =item entry ]
=over 4
=item *
-L<Can't call destructor for 0x%p in global destruction|perldiag/"Can't call destructor for 0x%p in global destruction">
+XXX
=back
-=head2 Changes to Existing Diagnostics
+=head1 Platform Support
-=over 4
+XXX Any changes to platform support should be listed in the sections below.
-=item *
+[ Within the sections, list each platform as an =item entry with specific
+changes as paragraphs below it. ]
-L<given is deprecated|perldiag/"given is deprecated"> replaces C<given is experimental>.
+=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.
-L<when is deprecated|perldiag/"when is deprecated"> replaces C<when is experimental>.
+=over 4
-=item *
+=item XXX-some-platform
-L<Smartmatch is deprecated|perldiag/"Smartmatch is deprecated"> replaces C<Smartmatch is experimental>.
+XXX
=back
-=head1 Testing
+=head2 Discontinued Platforms
-Tests were added and changed to reflect the other additions and
-changes in this release. Furthermore, these significant changes were
-made:
+XXX List any platforms that this version of perl no longer compiles on.
=over 4
-=item *
-
-Added t/op/hook/ for testing C<%{^HOOK}> related functionality. Specifically
-the F<t/op/hook/require.t> for testing the new require hooks.
-
-=item *
+=item XXX-some-platform
-Added F<t/op/deprecation.t> to test that our deprecation policies are being
-followed properly.
-
-=item *
-
-Fixed bugs in F<t/harness> and F<t/TEST> that meant that tests in F<t/test_pl> and
-F<t/class> were not being run during normal testing.
+XXX
=back
=head2 Platform-Specific Notes
-=over 4
-
-=item Windows
+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 *
-
-C<POSIX::dup2> no longer creates broken sockets. [L<GH #20920|https://github.com/Perl/perl5/issues/20920>]
-
-=item *
-
-Closing a busy pipe could cause Perl to hang. [L<GH #19963|https://github.com/Perl/perl5/issues/19963>]
+=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 an =item entry ]
-Added C<SAVERCPV()> and C<SAVEFREERCPV()> for better support for working
-with C<RCPV> (reference counted string/pointer value) structures which
-currently are used in opcodes to share filename and warning bit data in
-a memory efficient manner.
+=over 4
=item *
-Added C<MORTALSVFUNC_SV()> and C<MORTALDESTRUCTOR_SV()> macros, which
-make it possible to create a destructor which is fired at the end of
-the current statement. This uses the C<PERL_MAGIC_destruct> magic to
-use "free" magic to trigger an action when a variable is freed. The
-action can be specified as a C function or as a Perl code reference.
+XXX
-=item *
+=back
-Added the C<%{^HOOK}> api and related C<PERL_MAGIC_hook> and
-C<PERL_MAGIC_hookelem> for providing ways to hook selected perl functions
-which for one reason or another are problematic to wrap with a customized
-subroutine.
+=head1 Selected Bug Fixes
-=item *
+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>.
-Added support for C<${^HOOK}{require__before}> which can be used to
-rewrite the filename that C<require> will try to load, and also to block
-C<require> from loading a specific module, even via fully qualified
-filename. The hook can also be used to perform "pre-require" and
-"post-require" actions.
+Include references to GitHub issues and PRs as: [GH #12345] and the release
+manager will later use a regex to expand these into links.
-=item *
+[ List each fix as an =item entry ]
-Added support for C<${^HOOK}{require__after}> which can be used to
-track what modules have been required after the fact.
+=over 4
=item *
-Regular expression opcodes (regops) now use a standardized structure
-layout that uses unions to expose data in different format. This means
-it should be much easier to extend or modify regops to use more memory.
-This has been used to make a number of regops track how many parens
-they contain.
+XXX
=back
-=head1 Selected Bug Fixes
+=head1 Known Problems
-=over 4
+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.
-=item *
+[ List each fix as an =item entry ]
-In the new experimental C<class> feature, attributes are no longer a syntax
-error when using the unit class syntax.
-[L<GH #20888|https://github.com/Perl/perl5/issues/20888>].
+=over 4
=item *
-A number of bugs related to capture groups in quantified groups in regular
-expression have been fixed, especially in alternations. For example in
-a pattern like:
-
- "foobazfoobar" =~ /((foo)baz|foo(bar))+/
+XXX
-the regex variable C<$2> will not be "foo" as it once was, it will be undef.
-
-=item *
-
-Bugs with regex backreference operators that are inside of a capture
-group have been fixed. For instance:
+=back
- "xa=xaaa" =~ /^(xa|=?\1a){2}\z/
+=head1 Errata From Previous Releases
-will now correctly not match. [L<GH #10073|https://github.com/Perl/perl5/issues/10073>]
+=over 4
=item *
-C<SSGROW()> and C<SSCHECK()> have been reworked to ensure that the requested
-space is actually allocated. C<SSCHECK()> is now an alias for C<SSGROW()>.
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
=back
-=head1 Acknowledgements
-
-Perl 5.37.10 represents approximately 4 weeks of development since Perl
-5.37.9 and contains approximately 23,000 lines of changes across 360 files
-from 21 authors.
-
-Excluding auto-generated files, documentation and release tools, there were
-approximately 6,000 lines of changes to 220 .pm, .t, .c and .h files.
+=head1 Obituary
-Perl continues to flourish into its fourth decade thanks to a vibrant
-community of users and developers. The following people are known to have
-contributed the improvements that became Perl 5.37.10:
+XXX If any significant core contributor or member of the CPAN community has
+died, add a short obituary here.
-Arne Johannessen, Craig A. Berry, Dan Jacobson, David Mitchell, Elvin
-Aslanov, Graham Knop, James E Keenan, James Raspass, Jon Gentle, Karen
-Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans, Philippe
-Bruhat (BooK), Richard Leach, Steve Hay, Tomasz Konojacki, Tony Cook, Yves
-Orton, Zefram.
-
-The list above is almost certainly incomplete as it is automatically
-generated from version control history. In particular, it does not include
-the names of the (very much appreciated) contributors who reported issues to
-the Perl bug tracker.
+=head1 Acknowledgements
-Many of the changes included in this version originated in the CPAN modules
-included in Perl's core. We're grateful to the entire CPAN community for
-helping Perl to flourish.
+XXX Generate this with:
-For a more complete list of all of Perl's historical contributors, please
-see the F<AUTHORS> file in the Perl source distribution.
+ perl Porting/acknowledgements.pl v5.37.10..HEAD
=head1 Reporting Bugs