mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 16:39:36 +00:00
New perldelta for 5.41.10
This commit is contained in:
parent
17f4ab7011
commit
8caee5bb78
1
MANIFEST
1
MANIFEST
@ -5751,6 +5751,7 @@ pod/perl5415delta.pod Perl changes in version 5.41.5
|
||||
pod/perl5416delta.pod Perl changes in version 5.41.6
|
||||
pod/perl5417delta.pod Perl changes in version 5.41.7
|
||||
pod/perl5418delta.pod Perl changes in version 5.41.8
|
||||
pod/perl5419delta.pod Perl changes in version 5.41.9
|
||||
pod/perl561delta.pod Perl changes in version 5.6.1
|
||||
pod/perl56delta.pod Perl changes in version 5.6
|
||||
pod/perl581delta.pod Perl changes in version 5.8.1
|
||||
|
||||
@ -627,7 +627,7 @@ esac
|
||||
|
||||
$spitshell >>$Makefile <<'!NO!SUBS!'
|
||||
|
||||
perltoc_pod_prereqs = extra.pods pod/perl5419delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
|
||||
perltoc_pod_prereqs = extra.pods pod/perl54110delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
|
||||
generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
|
||||
generated_headers = uudmap.h bitcount.h mg_data.h
|
||||
|
||||
@ -1136,9 +1136,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
|
||||
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
|
||||
$(MINIPERL) pod/perlmodlib.PL -q
|
||||
|
||||
pod/perl5419delta.pod: pod/perldelta.pod
|
||||
$(RMS) pod/perl5419delta.pod
|
||||
$(LNS) perldelta.pod pod/perl5419delta.pod
|
||||
pod/perl54110delta.pod: pod/perldelta.pod
|
||||
$(RMS) pod/perl54110delta.pod
|
||||
$(LNS) perldelta.pod pod/perl54110delta.pod
|
||||
|
||||
extra.pods: $(MINIPERL_EXE)
|
||||
-@test ! -f extra.pods || rm -f `cat extra.pods`
|
||||
|
||||
2
pod/.gitignore
vendored
2
pod/.gitignore
vendored
@ -47,7 +47,7 @@
|
||||
/roffitall
|
||||
|
||||
# generated
|
||||
/perl5419delta.pod
|
||||
/perl54110delta.pod
|
||||
/perlapi.pod
|
||||
/perlintern.pod
|
||||
/perlmodlib.pod
|
||||
|
||||
@ -181,6 +181,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
|
||||
|
||||
perlhist Perl history records
|
||||
perldelta Perl changes since previous version
|
||||
perl5419delta Perl changes in version 5.41.9
|
||||
perl5418delta Perl changes in version 5.41.8
|
||||
perl5417delta Perl changes in version 5.41.7
|
||||
perl5416delta Perl changes in version 5.41.6
|
||||
|
||||
340
pod/perl5419delta.pod
Normal file
340
pod/perl5419delta.pod
Normal file
@ -0,0 +1,340 @@
|
||||
=encoding utf8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
perl5419delta - what is new for perl v5.41.9
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This document describes differences between the 5.41.8 release and the 5.41.9
|
||||
release.
|
||||
|
||||
If you are upgrading from an earlier release such as 5.41.7, first read
|
||||
L<perl5418delta>, which describes differences between 5.41.7 and 5.41.8.
|
||||
|
||||
=head1 Core Enhancements
|
||||
|
||||
=head2 Lexical method declaration using C<my method>
|
||||
|
||||
Like C<sub> since Perl version 5.18, C<method> can now be prefixed with the
|
||||
C<my> keyword. This declares a subroutine that has lexical, rather than
|
||||
package visibility. See L<perlclass> for more detail.
|
||||
|
||||
=head2 Lexical method invocation operator C<< ->& >>
|
||||
|
||||
Along with the ability to declare methods lexically, this release also permits
|
||||
invoking a lexical subroutine as if it were a method, bypassing the usual
|
||||
name-based method resolution by name.
|
||||
|
||||
Combined with lexical method declaration, these two new abilities create the
|
||||
effect of having private methods.
|
||||
|
||||
=head1 Incompatible Changes
|
||||
|
||||
=head2 Switch and Smart Match operator reinstated
|
||||
|
||||
The "switch" feature and the smartmatch operator, C<~~>, were introduced in
|
||||
v5.10. Their behavior was significantly changed in v5.10.1. When the
|
||||
"experiment" system was added in v5.18.0, switch and smartmatch were
|
||||
retroactively declared experimental. Over the years, proposals to fix or
|
||||
supplement the features have come and gone.
|
||||
|
||||
They were deprecated in Perl v5.38.0 and scheduled for removal in Perl
|
||||
5.42.0, and entirely removed in Perl 5.41.3.
|
||||
|
||||
After some discussion these have been re-instated.
|
||||
|
||||
Using them no longer produces a deprecation warning.
|
||||
|
||||
Switch itself still requires the C<switch> feature, which is enabled
|
||||
by default for feature bundles from v5.9.5 through to v5.34. Switch
|
||||
remains disabled in feature bundles 5.35 and later, but can be
|
||||
separately enabled:
|
||||
|
||||
# no switch here
|
||||
use v5.10;
|
||||
# switch here
|
||||
use v5.36;
|
||||
# no switch here
|
||||
use feature "switch";
|
||||
# switch here
|
||||
|
||||
Smart match now requires the C<smartmatch> feature, which is enabled
|
||||
by default and included in all feature bundles up to 5.40. It is
|
||||
disabled for the 5.41 feature bundle and later, but can be separately
|
||||
enabled:
|
||||
|
||||
# smartmatch here
|
||||
use v5.41;
|
||||
# no smartmatch here
|
||||
use feature "smartmatch";
|
||||
# smartmatch here
|
||||
|
||||
[L<GH #22752|https://github.com/Perl/perl5/issues/22752>]
|
||||
|
||||
=head1 Performance Enhancements
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
The stringification of integers by L<perlfunc/print> and L<perlfunc/say>,
|
||||
when coming from an C<SVt_IV>, is now more efficient.
|
||||
[L<GH #22927|https://github.com/Perl/perl5/issues/22927>]
|
||||
|
||||
=item *
|
||||
|
||||
Subroutines in packages no longer need to be stored in typeglobs:
|
||||
declaring a subroutine will now put a simple sub reference directly in the
|
||||
stash if possible, saving memory. The typeglob still notionally exists,
|
||||
so accessing it will cause the stash entry to be upgraded to a typeglob
|
||||
(i.e. this is just an internal implementation detail).
|
||||
This optimization does not currently apply to XSUBs or exported
|
||||
subroutines, and method calls will undo it, since they cache things in
|
||||
typeglobs.
|
||||
[L<GH #23001|https://github.com/Perl/perl5/issues/23001>]
|
||||
|
||||
(This optimization was originally announced in L<perl5220delta>, but due to a
|
||||
bug it only worked for subroutines in package C<main>, not in modules.)
|
||||
|
||||
=back
|
||||
|
||||
=head1 Modules and Pragmata
|
||||
|
||||
=head2 Updated Modules and Pragmata
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<B::Deparse> has been upgraded from version 1.82 to 1.83.
|
||||
|
||||
=item *
|
||||
|
||||
L<Exporter> has been upgraded from version 5.78 to 5.79.
|
||||
|
||||
=item *
|
||||
|
||||
L<feature> has been upgraded from version 1.93 to 1.94.
|
||||
|
||||
=item *
|
||||
|
||||
L<Math::BigInt> has been upgraded from version 2.003003 to 2.003004.
|
||||
|
||||
=item *
|
||||
|
||||
L<Module::CoreList> has been upgraded from version 5.20250120 to 5.20250220.
|
||||
|
||||
=item *
|
||||
|
||||
L<ODBM_File> has been upgraded from version 1.19 to 1.20.
|
||||
|
||||
=item *
|
||||
|
||||
L<Opcode> has been upgraded from version 1.68 to 1.69.
|
||||
|
||||
=item *
|
||||
|
||||
L<overload> has been upgraded from version 1.39 to 1.40.
|
||||
|
||||
=item *
|
||||
|
||||
L<Safe> has been upgraded from version 2.47 to 2.46.
|
||||
|
||||
=item *
|
||||
|
||||
L<Test::Simple> has been upgraded from version 1.302207 to 1.302209.
|
||||
|
||||
=item *
|
||||
|
||||
L<Unicode::UCD> has been upgraded from version 0.78 to 0.79.
|
||||
|
||||
=item *
|
||||
|
||||
L<warnings> has been upgraded from version 1.72 to 1.73.
|
||||
|
||||
=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
|
||||
|
||||
=head3 New Errors
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Undefined subroutine &%s called, close to label '%s'|perldiag/"Undefined subroutine &%s called, close to label '%s'">
|
||||
|
||||
(F) The subroutine indicated hasn't been defined, or if it was, it has
|
||||
since been undefined.
|
||||
|
||||
This error could also indicate a mistyped package separator, when a
|
||||
single colon was typed instead of two colons. For example, C<Foo:bar()>
|
||||
would be parsed as the label C<Foo> followed by an unqualified function
|
||||
name: C<foo: bar()>. [L<GH #22860|https://github.com/Perl/perl5/issues/22860>]
|
||||
|
||||
=back
|
||||
|
||||
=head2 Changes to Existing Diagnostics
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Possible precedence problem between ! and %s|perldiag/"Possible precedence problem between ! and %s">
|
||||
|
||||
This warning no longer triggers for code like C<!!$x == $y>, i.e. where double
|
||||
negation (C<!!>) is used as a convert-to-boolean operator.
|
||||
[L<GH #22954|https://github.com/Perl/perl5/issues/22954>]
|
||||
|
||||
=item *
|
||||
|
||||
L<Useless use of %s in void context|perldiag/"Useless use of %s in void context">
|
||||
|
||||
This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>.
|
||||
[L<GH #22969|https://github.com/Perl/perl5/issues/22969>]
|
||||
|
||||
=back
|
||||
|
||||
=head1 Internal Changes
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
Two new API functions are introduced to convert strings encoded in
|
||||
native bytes format to UTF-8. These return the string unchanged if its
|
||||
UTF-8 representation is the same as the original. Otherwise, new memory
|
||||
is allocated to contain the converted string. This is in contrast to
|
||||
the existing L<perlapi/C<bytes_to_utf8>> which always allocates new
|
||||
memory. The new functions are L<perlapi/C<bytes_to_utf8_free_me>> and
|
||||
L<perlapi/C<bytes_to_utf8_temp_pv>>.
|
||||
L<perlapi/C<bytes_to_utf8_temp_pv>> arranges for the new memory to
|
||||
automatically be freed. With C<bytes_to_utf8_free_me>, you are
|
||||
responsible for freeing any newly allocated memory.
|
||||
|
||||
=item *
|
||||
|
||||
The way that subroutine signatures are parsed by the parser grammar has been
|
||||
changed.
|
||||
|
||||
Previously, when parsing individual signature parameters, the parser would
|
||||
accumulate an C<OP_ARGELEM> optree fragment for each parameter on the parser
|
||||
stack, collecting them in an C<OP_LIST> sequence, before finally building the
|
||||
complete argument handling optree itself, in a large action block defined
|
||||
directly in F<perly.y>.
|
||||
|
||||
In the new approach, all the optree generation is handled by newly-defined
|
||||
functions in F<op.c> which are called by the action blocks in the parser.
|
||||
These do not keep state on the parser stack, but instead in a dedicated memory
|
||||
structure referenced by the main C<PL_parser> structure. This is intended to
|
||||
be largely opaque to other code, and accessed only via the new functions.
|
||||
|
||||
This new arrangement is intended to allow more flexible code generation and
|
||||
additional features to be developed in future.
|
||||
|
||||
=back
|
||||
|
||||
=head1 Selected Bug Fixes
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked
|
||||
recursively, either deliberately or by accident, as described in
|
||||
L<perlvar/%SIG>. That is, when an exception (or warning) triggers a call to a
|
||||
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or
|
||||
warnings) are processed directly, ignoring C<%SIG> until the original
|
||||
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns.
|
||||
[L<GH #14527|https://github.com/Perl/perl5/issues/14527>], [L<GH #22984|https://github.com/Perl/perl5/issues/22984>], [L<GH #22987|https://github.com/Perl/perl5/issues/22987>]
|
||||
|
||||
=item *
|
||||
|
||||
The C<ObjectFIELDS()> for an object and C<xhv_class_fields> for the
|
||||
object's stash weren't always NULL or not-NULL, confusing C<sv_dump()>
|
||||
(and hence Devel::Peek's C<Dump()>) into crashing on an object with no
|
||||
defined fields in some cases. [L<GH #22959|https://github.com/Perl/perl5/issues/22959>]
|
||||
|
||||
=item *
|
||||
|
||||
When comparing strings when using a UTF-8 locale, the behavior was
|
||||
previously undefined if either or both contained an above-Unicode code
|
||||
point, such as 0x110000. Now all such code points will collate the same
|
||||
as the highest Unicode code point, U+10FFFF. [L<GH #22989|https://github.com/Perl/perl5/issues/22989>]
|
||||
|
||||
=back
|
||||
|
||||
=head1 Acknowledgements
|
||||
|
||||
Perl 5.41.9 represents approximately 5 weeks of development since Perl
|
||||
5.41.8 and contains approximately 17,000 lines of changes across 380 files
|
||||
from 23 authors.
|
||||
|
||||
Excluding auto-generated files, documentation and release tools, there were
|
||||
approximately 9,700 lines of changes to 300 .pm, .t, .c and .h files.
|
||||
|
||||
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.41.9:
|
||||
|
||||
Andrew Ruthven, Antanas Vaitkus, Aristotle Pagaltzis, Chris 'BinGOs'
|
||||
Williams, Dan Book, Dan Jacobson, David Mitchell, Eric Herman, hbmaclean,
|
||||
James E Keenan, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans,
|
||||
Peter John Acklam, Reini Urban, Richard Leach, Scott Baker, Steve Hay, TAKAI
|
||||
Kousuke, Thibault Duponchelle, Tony Cook, Yves Orton.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
For a more complete list of all of Perl's historical contributors, please
|
||||
see the F<AUTHORS> file in the Perl source distribution.
|
||||
|
||||
=head1 Reporting Bugs
|
||||
|
||||
If you find what you think is a bug, you might check the perl bug database
|
||||
at L<https://github.com/Perl/perl5/issues>. There may also be information at
|
||||
L<https://www.perl.org/>, the Perl Home Page.
|
||||
|
||||
If you believe you have an unreported bug, please open an issue at
|
||||
L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
|
||||
tiny but sufficient test case.
|
||||
|
||||
If the bug you are reporting has security implications which make it
|
||||
inappropriate to send to a public issue tracker, then see
|
||||
L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
|
||||
for details of how to report the issue.
|
||||
|
||||
=head1 Give Thanks
|
||||
|
||||
If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
|
||||
you can do so by running the C<perlthanks> program:
|
||||
|
||||
perlthanks
|
||||
|
||||
This will send an email to the Perl 5 Porters list with your show of thanks.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
The F<Changes> file for an explanation of how to view exhaustive details on
|
||||
what changed.
|
||||
|
||||
The F<INSTALL> file for how to build Perl.
|
||||
|
||||
The F<README> file for general stuff.
|
||||
|
||||
The F<Artistic> and F<Copying> files for copyright information.
|
||||
|
||||
=cut
|
||||
@ -2,156 +2,177 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
perldelta - what is new for perl v5.41.9
|
||||
[ 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.41.10
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This document describes differences between the 5.41.8 release and the 5.41.9
|
||||
This document describes differences between the 5.41.9 release and the 5.41.10
|
||||
release.
|
||||
|
||||
If you are upgrading from an earlier release such as 5.41.7, first read
|
||||
L<perl5418delta>, which describes differences between 5.41.7 and 5.41.8.
|
||||
If you are upgrading from an earlier release such as 5.41.8, first read
|
||||
L<perl5419delta>, which describes differences between 5.41.8 and 5.41.9.
|
||||
|
||||
=head1 Notice
|
||||
|
||||
XXX Any important notices here
|
||||
|
||||
=head1 Core Enhancements
|
||||
|
||||
=head2 Lexical method declaration using C<my method>
|
||||
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.
|
||||
|
||||
Like C<sub> since Perl version 5.18, C<method> can now be prefixed with the
|
||||
C<my> keyword. This declares a subroutine that has lexical, rather than
|
||||
package visibility. See L<perlclass> for more detail.
|
||||
[ List each enhancement as a =head2 entry ]
|
||||
|
||||
=head2 Lexical method invocation operator C<< ->& >>
|
||||
=head1 Security
|
||||
|
||||
Along with the ability to declare methods lexically, this release also permits
|
||||
invoking a lexical subroutine as if it were a method, bypassing the usual
|
||||
name-based method resolution by name.
|
||||
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.
|
||||
|
||||
Combined with lexical method declaration, these two new abilities create the
|
||||
effect of having private methods.
|
||||
[ List each security issue as a =head2 entry ]
|
||||
|
||||
=head1 Incompatible Changes
|
||||
|
||||
=head2 Switch and Smart Match operator reinstated
|
||||
XXX For a release on a stable branch, this section aspires to be:
|
||||
|
||||
The "switch" feature and the smartmatch operator, C<~~>, were introduced in
|
||||
v5.10. Their behavior was significantly changed in v5.10.1. When the
|
||||
"experiment" system was added in v5.18.0, switch and smartmatch were
|
||||
retroactively declared experimental. Over the years, proposals to fix or
|
||||
supplement the features have come and gone.
|
||||
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.
|
||||
|
||||
They were deprecated in Perl v5.38.0 and scheduled for removal in Perl
|
||||
5.42.0, and entirely removed in Perl 5.41.3.
|
||||
[ List each incompatible change as a =head2 entry ]
|
||||
|
||||
After some discussion these have been re-instated.
|
||||
=head1 Deprecations
|
||||
|
||||
Using them no longer produces a deprecation warning.
|
||||
XXX Any deprecated features, syntax, modules etc. should be listed here.
|
||||
|
||||
Switch itself still requires the C<switch> feature, which is enabled
|
||||
by default for feature bundles from v5.9.5 through to v5.34. Switch
|
||||
remains disabled in feature bundles 5.35 and later, but can be
|
||||
separately enabled:
|
||||
=head2 Module removals
|
||||
|
||||
# no switch here
|
||||
use v5.10;
|
||||
# switch here
|
||||
use v5.36;
|
||||
# no switch here
|
||||
use feature "switch";
|
||||
# switch here
|
||||
XXX Remove this section if not applicable.
|
||||
|
||||
Smart match now requires the C<smartmatch> feature, which is enabled
|
||||
by default and included in all feature bundles up to 5.40. It is
|
||||
disabled for the 5.41 feature bundle and later, but can be separately
|
||||
enabled:
|
||||
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.
|
||||
|
||||
# smartmatch here
|
||||
use v5.41;
|
||||
# no smartmatch here
|
||||
use feature "smartmatch";
|
||||
# smartmatch here
|
||||
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.
|
||||
|
||||
[L<GH #22752|https://github.com/Perl/perl5/issues/22752>]
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
=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 an =item entry ]
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
The stringification of integers by L<perlfunc/print> and L<perlfunc/say>,
|
||||
when coming from an C<SVt_IV>, is now more efficient.
|
||||
[L<GH #22927|https://github.com/Perl/perl5/issues/22927>]
|
||||
|
||||
=item *
|
||||
|
||||
Subroutines in packages no longer need to be stored in typeglobs:
|
||||
declaring a subroutine will now put a simple sub reference directly in the
|
||||
stash if possible, saving memory. The typeglob still notionally exists,
|
||||
so accessing it will cause the stash entry to be upgraded to a typeglob
|
||||
(i.e. this is just an internal implementation detail).
|
||||
This optimization does not currently apply to XSUBs or exported
|
||||
subroutines, and method calls will undo it, since they cache things in
|
||||
typeglobs.
|
||||
[L<GH #23001|https://github.com/Perl/perl5/issues/23001>]
|
||||
|
||||
(This optimization was originally announced in L<perl5220delta>, but due to a
|
||||
bug it only worked for subroutines in package C<main>, not in modules.)
|
||||
XXX
|
||||
|
||||
=back
|
||||
|
||||
=head1 Modules and Pragmata
|
||||
|
||||
XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
|
||||
go here. If L<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 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.)
|
||||
|
||||
[ Within each section, list entries as an =item entry ]
|
||||
|
||||
=head2 New Modules and Pragmata
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
XXX Remove this section if F<Porting/corelist-perldelta.pl> did not add any content here.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Updated Modules and Pragmata
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<B::Deparse> has been upgraded from version 1.82 to 1.83.
|
||||
L<XXX> has been upgraded from version A.xx to B.yy.
|
||||
|
||||
XXX If there was something important to note about this change, include that here.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Removed Modules and Pragmata
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Exporter> has been upgraded from version 5.78 to 5.79.
|
||||
XXX Remove this section if F<Porting/corelist-perldelta.pl> did not add any content here.
|
||||
|
||||
=back
|
||||
|
||||
=head1 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>.
|
||||
|
||||
=head2 New Documentation
|
||||
|
||||
XXX Changes which create B<new> files in F<pod/> go here.
|
||||
|
||||
=head3 L<XXX>
|
||||
|
||||
XXX Description of the purpose of the new file here
|
||||
|
||||
=head2 Changes to Existing Documentation
|
||||
|
||||
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>.
|
||||
|
||||
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.
|
||||
|
||||
Additionally, the following selected changes have been made:
|
||||
|
||||
=head3 L<XXX>
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<feature> has been upgraded from version 1.93 to 1.94.
|
||||
|
||||
=item *
|
||||
|
||||
L<Math::BigInt> has been upgraded from version 2.003003 to 2.003004.
|
||||
|
||||
=item *
|
||||
|
||||
L<Module::CoreList> has been upgraded from version 5.20250120 to 5.20250220.
|
||||
|
||||
=item *
|
||||
|
||||
L<ODBM_File> has been upgraded from version 1.19 to 1.20.
|
||||
|
||||
=item *
|
||||
|
||||
L<Opcode> has been upgraded from version 1.68 to 1.69.
|
||||
|
||||
=item *
|
||||
|
||||
L<overload> has been upgraded from version 1.39 to 1.40.
|
||||
|
||||
=item *
|
||||
|
||||
L<Safe> has been upgraded from version 2.47 to 2.46.
|
||||
|
||||
=item *
|
||||
|
||||
L<Test::Simple> has been upgraded from version 1.302207 to 1.302209.
|
||||
|
||||
=item *
|
||||
|
||||
L<Unicode::UCD> has been upgraded from version 0.78 to 0.79.
|
||||
|
||||
=item *
|
||||
|
||||
L<warnings> has been upgraded from version 1.72 to 1.73.
|
||||
XXX Description of the change here
|
||||
|
||||
=back
|
||||
|
||||
@ -161,146 +182,231 @@ 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 L</New Errors>
|
||||
and L</New Warnings>
|
||||
|
||||
=head3 New Errors
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Undefined subroutine &%s called, close to label '%s'|perldiag/"Undefined subroutine &%s called, close to label '%s'">
|
||||
XXX L<message|perldiag/"message">
|
||||
|
||||
(F) The subroutine indicated hasn't been defined, or if it was, it has
|
||||
since been undefined.
|
||||
=back
|
||||
|
||||
This error could also indicate a mistyped package separator, when a
|
||||
single colon was typed instead of two colons. For example, C<Foo:bar()>
|
||||
would be parsed as the label C<Foo> followed by an unqualified function
|
||||
name: C<foo: bar()>. [L<GH #22860|https://github.com/Perl/perl5/issues/22860>]
|
||||
=head3 New Warnings
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
XXX L<message|perldiag/"message">
|
||||
|
||||
=back
|
||||
|
||||
=head2 Changes to Existing Diagnostics
|
||||
|
||||
XXX Changes (i.e. rewording) of diagnostic messages go here
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Possible precedence problem between ! and %s|perldiag/"Possible precedence problem between ! and %s">
|
||||
XXX Describe change here
|
||||
|
||||
This warning no longer triggers for code like C<!!$x == $y>, i.e. where double
|
||||
negation (C<!!>) is used as a convert-to-boolean operator.
|
||||
[L<GH #22954|https://github.com/Perl/perl5/issues/22954>]
|
||||
=back
|
||||
|
||||
=head1 Utility Changes
|
||||
|
||||
XXX Changes to installed programs such as F<perldoc> 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 F<XXX> with program names to get proper documentation linking. ]
|
||||
|
||||
=head2 F<XXX>
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
L<Useless use of %s in void context|perldiag/"Useless use of %s in void context">
|
||||
XXX
|
||||
|
||||
This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>.
|
||||
[L<GH #22969|https://github.com/Perl/perl5/issues/22969>]
|
||||
=back
|
||||
|
||||
=head1 Configuration and Compilation
|
||||
|
||||
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.
|
||||
|
||||
[ List changes as an =item entry ].
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
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.
|
||||
|
||||
XXX If there were no significant test changes, say this:
|
||||
|
||||
Tests were added and changed to reflect the other additions and changes
|
||||
in this release.
|
||||
|
||||
XXX If instead there were significant changes, say this:
|
||||
|
||||
Tests were added and changed to reflect the other additions and
|
||||
changes in this release. Furthermore, these significant changes were
|
||||
made:
|
||||
|
||||
[ List each test improvement as an =item entry ]
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
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 an =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 an =item entry ]
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
Two new API functions are introduced to convert strings encoded in
|
||||
native bytes format to UTF-8. These return the string unchanged if its
|
||||
UTF-8 representation is the same as the original. Otherwise, new memory
|
||||
is allocated to contain the converted string. This is in contrast to
|
||||
the existing L<perlapi/C<bytes_to_utf8>> which always allocates new
|
||||
memory. The new functions are L<perlapi/C<bytes_to_utf8_free_me>> and
|
||||
L<perlapi/C<bytes_to_utf8_temp_pv>>.
|
||||
L<perlapi/C<bytes_to_utf8_temp_pv>> arranges for the new memory to
|
||||
automatically be freed. With C<bytes_to_utf8_free_me>, you are
|
||||
responsible for freeing any newly allocated memory.
|
||||
|
||||
=item *
|
||||
|
||||
The way that subroutine signatures are parsed by the parser grammar has been
|
||||
changed.
|
||||
|
||||
Previously, when parsing individual signature parameters, the parser would
|
||||
accumulate an C<OP_ARGELEM> optree fragment for each parameter on the parser
|
||||
stack, collecting them in an C<OP_LIST> sequence, before finally building the
|
||||
complete argument handling optree itself, in a large action block defined
|
||||
directly in F<perly.y>.
|
||||
|
||||
In the new approach, all the optree generation is handled by newly-defined
|
||||
functions in F<op.c> which are called by the action blocks in the parser.
|
||||
These do not keep state on the parser stack, but instead in a dedicated memory
|
||||
structure referenced by the main C<PL_parser> structure. This is intended to
|
||||
be largely opaque to other code, and accessed only via the new functions.
|
||||
|
||||
This new arrangement is intended to allow more flexible code generation and
|
||||
additional features to be developed in future.
|
||||
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>.
|
||||
|
||||
XXX Include references to GitHub issues and PRs as: [GH #12345] and the release
|
||||
manager will later use a regex to expand these into links.
|
||||
|
||||
[ List each fix as an =item entry ]
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked
|
||||
recursively, either deliberately or by accident, as described in
|
||||
L<perlvar/%SIG>. That is, when an exception (or warning) triggers a call to a
|
||||
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or
|
||||
warnings) are processed directly, ignoring C<%SIG> until the original
|
||||
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns.
|
||||
[L<GH #14527|https://github.com/Perl/perl5/issues/14527>], [L<GH #22984|https://github.com/Perl/perl5/issues/22984>], [L<GH #22987|https://github.com/Perl/perl5/issues/22987>]
|
||||
|
||||
=item *
|
||||
|
||||
The C<ObjectFIELDS()> for an object and C<xhv_class_fields> for the
|
||||
object's stash weren't always NULL or not-NULL, confusing C<sv_dump()>
|
||||
(and hence Devel::Peek's C<Dump()>) into crashing on an object with no
|
||||
defined fields in some cases. [L<GH #22959|https://github.com/Perl/perl5/issues/22959>]
|
||||
|
||||
=item *
|
||||
|
||||
When comparing strings when using a UTF-8 locale, the behavior was
|
||||
previously undefined if either or both contained an above-Unicode code
|
||||
point, such as 0x110000. Now all such code points will collate the same
|
||||
as the highest Unicode code point, U+10FFFF. [L<GH #22989|https://github.com/Perl/perl5/issues/22989>]
|
||||
XXX
|
||||
|
||||
=back
|
||||
|
||||
=head1 Known Problems
|
||||
|
||||
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.
|
||||
|
||||
[ List each fix as an =item entry ]
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
XXX
|
||||
|
||||
=back
|
||||
|
||||
=head1 Errata From Previous Releases
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
XXX Add anything here that we forgot to add, or were mistaken about, in
|
||||
the F<perldelta> of a previous release.
|
||||
|
||||
=back
|
||||
|
||||
=head1 Obituary
|
||||
|
||||
XXX If any significant core contributor or member of the CPAN community has
|
||||
died, add a short obituary here.
|
||||
|
||||
=head1 Acknowledgements
|
||||
|
||||
Perl 5.41.9 represents approximately 5 weeks of development since Perl
|
||||
5.41.8 and contains approximately 17,000 lines of changes across 380 files
|
||||
from 23 authors.
|
||||
XXX Generate this with:
|
||||
|
||||
Excluding auto-generated files, documentation and release tools, there were
|
||||
approximately 9,700 lines of changes to 300 .pm, .t, .c and .h files.
|
||||
|
||||
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.41.9:
|
||||
|
||||
Andrew Ruthven, Antanas Vaitkus, Aristotle Pagaltzis, Chris 'BinGOs'
|
||||
Williams, Dan Book, Dan Jacobson, David Mitchell, Eric Herman, hbmaclean,
|
||||
James E Keenan, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans,
|
||||
Peter John Acklam, Reini Urban, Richard Leach, Scott Baker, Steve Hay, TAKAI
|
||||
Kousuke, Thibault Duponchelle, Tony Cook, Yves Orton.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.41.9..HEAD
|
||||
|
||||
=head1 Reporting Bugs
|
||||
|
||||
|
||||
@ -298,7 +298,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
|
||||
extra.pods : miniperl
|
||||
@ @extra_pods.com
|
||||
|
||||
PERLDELTA_CURRENT = [.pod]perl5419delta.pod
|
||||
PERLDELTA_CURRENT = [.pod]perl54110delta.pod
|
||||
|
||||
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
|
||||
Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
|
||||
|
||||
@ -1643,7 +1643,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
|
||||
copy ..\README.tw ..\pod\perltw.pod
|
||||
copy ..\README.vos ..\pod\perlvos.pod
|
||||
copy ..\README.win32 ..\pod\perlwin32.pod
|
||||
copy ..\pod\perldelta.pod ..\pod\perl5419delta.pod
|
||||
copy ..\pod\perldelta.pod ..\pod\perl54110delta.pod
|
||||
$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
|
||||
$(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" ..
|
||||
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
|
||||
@ -1743,7 +1743,7 @@ distclean: realclean
|
||||
-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
|
||||
-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
|
||||
-cd $(PODDIR) && del /f *.html *.bat roffitall \
|
||||
perl5419delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
|
||||
perl54110delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
|
||||
perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
|
||||
perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
|
||||
perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
|
||||
|
||||
@ -1165,7 +1165,7 @@ utils: $(PERLEXE) ..\utils\Makefile
|
||||
copy ..\README.tw ..\pod\perltw.pod
|
||||
copy ..\README.vos ..\pod\perlvos.pod
|
||||
copy ..\README.win32 ..\pod\perlwin32.pod
|
||||
copy ..\pod\perldelta.pod ..\pod\perl5419delta.pod
|
||||
copy ..\pod\perldelta.pod ..\pod\perl54110delta.pod
|
||||
cd ..\win32
|
||||
$(PERLEXE) $(PL2BAT) $(UTILS)
|
||||
$(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" ..
|
||||
@ -1266,7 +1266,7 @@ distclean: realclean
|
||||
-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
|
||||
-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
|
||||
-cd $(PODDIR) && del /f *.html *.bat roffitall \
|
||||
perl5419delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
|
||||
perl54110delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
|
||||
perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
|
||||
perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
|
||||
perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
|
||||
|
||||
@ -79,6 +79,7 @@ POD = perl.pod \
|
||||
perl5400delta.pod \
|
||||
perl5401delta.pod \
|
||||
perl5410delta.pod \
|
||||
perl54110delta.pod \
|
||||
perl5411delta.pod \
|
||||
perl5412delta.pod \
|
||||
perl5413delta.pod \
|
||||
@ -267,6 +268,7 @@ MAN = perl.man \
|
||||
perl5400delta.man \
|
||||
perl5401delta.man \
|
||||
perl5410delta.man \
|
||||
perl54110delta.man \
|
||||
perl5411delta.man \
|
||||
perl5412delta.man \
|
||||
perl5413delta.man \
|
||||
@ -455,6 +457,7 @@ HTML = perl.html \
|
||||
perl5400delta.html \
|
||||
perl5401delta.html \
|
||||
perl5410delta.html \
|
||||
perl54110delta.html \
|
||||
perl5411delta.html \
|
||||
perl5412delta.html \
|
||||
perl5413delta.html \
|
||||
@ -643,6 +646,7 @@ TEX = perl.tex \
|
||||
perl5400delta.tex \
|
||||
perl5401delta.tex \
|
||||
perl5410delta.tex \
|
||||
perl54110delta.tex \
|
||||
perl5411delta.tex \
|
||||
perl5412delta.tex \
|
||||
perl5413delta.tex \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user