This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Perldelta for 5.39.7
[perl5.git] / pod / perldelta.pod
index ccd8037..d4a8e67 100644 (file)
 
 =head1 NAME
 
-[ 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.39.1
+perldelta - what is new for perl v5.39.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.39.0 release and the 5.39.1
+This document describes differences between the 5.39.6 release and the 5.39.7
 release.
 
-If you are upgrading from an earlier release such as 5.38.0, first read
-L<perl5390delta>, which describes differences between 5.38.0 and 5.39.0.
-
-=head1 Notice
-
-XXX Any important notices here
-
-=head1 Core Enhancements
-
-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.
-
-[ List each enhancement as a =head2 entry ]
-
-=head1 Security
-
-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.
-
-[ List each security issue as a =head2 entry ]
-
-=head1 Incompatible Changes
-
-XXX For a release on a stable branch, this section aspires to be:
-
-    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.
-
-[ List each incompatible change as a =head2 entry ]
-
-=head2 reset EXPR now calls set-magic on scalars
-
-Previously C<reset EXPR> did not call set magic when clearing scalar
-variables.  This meant that changes did not propagate to the
-underlying internal state where needed, such as for C<$^W>, and did
-not result in an exception where the underlying magic would normally
-throw an exception, such as for C<$1>.
-
-This means code that had no effect before may now actually have an
-effect, including possibly throwing an exception.
-
-C<reset EXPR> already called set magic when modifying arrays and
-hashes.
-
-This has no effect on plain C<reset> used to reset one-match searches
-as with C<m?pattern?>.
-
-[GH #20763]
-
-=head2 Calling the import method of an unknown package produces an error
-
-Historically it has been possible to call the import() or unimport()
-method of any class, including ones which have not been defined, with
-an argument and not experience an error. For instance this code will
-not throw an error in 5.38:
-
-    Class::That::Does::Not::Exist->import("foo");
-
-however, as of 5.39.1 this will throw an exception.  Note that calling
-these methods with no arguments continues to silently succeed and do
-nothing. For instance
-
-    Class::That::Does::Not::Exist->import();
-
-will continue to not throw an error. This is because every class
-implicitly inherits from the class UNIVERSAL which now defines an import
-method. In older perls there was no such method defined, and instead the
-method calls for C<import> and C<unimport> were special cased to not
-throw errors if there was no such method defined.
-
-This change has been added because it makes it easier to detect case
-typos in C<use> statements when running on case-insensitive file
-systems. For instance, on Windows or other platforms with
-case-insensitive file systems on older perls the following code
-
-    use STRICT 'refs';
-
-would silently do nothing as the module is actually called 'strict.pm'
-not 'STRICT.pm', so it would be loaded, but its import method would
-never be called. It will also detect cases where a user passes an
-argument when using a package that does not provide its own import, for
-instance most "pure" class definitions do not define an import method.
-
-=head1 Deprecations
-
-XXX Any deprecated features, syntax, modules etc. should be listed here.
-
-=head2 Module removals
-
-XXX Remove this section if not applicable.
-
-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
-
-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 *
-
-XXX
-
-=back
+If you are upgrading from an earlier release such as 5.39.5, first read
+L<perl5396delta>, which describes differences between 5.39.5 and 5.39.6.
 
 =head1 Modules and Pragmata
 
-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 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 Porting/corelist-perldelta.pl did not add any content here.
-
-=back
-
 =head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.204_001 to 2.205.
-
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.204_001 to 2.205.
-
-=item *
-
-L<CPAN::Meta::Requirements> has been upgraded from version 2.140 to 2.143.
-
-=item *
-
-L<Errno> has been upgraded from version 1.37 to 1.38.
-
-The C<osvers> and C<archname> baked into the module to ensure Errno is
-loaded by the perl that built it are now more comprehensively
-escaped. [GH #21135]
-
-=item *
-
-L<ExtUtils::CBuilder> has been upgraded from version 0.280238 to 0.280239.
-
-=item *
-
-L<ExtUtils::Manifest> has been upgraded from version 1.73 to 1.75.
-
-=item *
-
-L<feature> has been upgraded from version 1.82 to 1.83.
-
-=item *
-
-L<IO-Compress> has been upgraded from version 2.204 to 2.205.
-
-=item *
-
-L<Math::BigInt> has been upgraded from version 1.999837 to 1.999839.
-
-=item *
-
-L<Math::BigInt::FastCalc> has been upgraded from version 0.5013 to 0.5014.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 5.20230520 to 5.20230720.
-
-=item *
-
-L<Module::Metadata> has been upgraded from version 1.000037 to 1.000038.
-
-=item *
-
-L<perlfaq> has been upgraded from version 5.20210520 to 5.20230701.
-
-=item *
-
-L<POSIX> has been upgraded from version 2.13 to 2.14.
+L<Exporter> has been upgraded from version 5.77 to 5.78.
 
 =item *
 
-L<Socket> has been upgraded from version 2.036 to 2.037.
+L<Hash::Util> has been upgraded from version 0.30 to 0.31.
 
 =item *
 
-L<Test::Simple> has been upgraded from version 1.302194 to 1.302195.
-
-=item *
-
-L<Text::Tabs> has been upgraded from version 2021.0814 to 2023.0511.
-
-=item *
-
-L<Text::Wrap> has been upgraded from version 2021.0814 to 2023.0511.
-
-=item *
+L<I18N::Langinfo> has been upgraded from version 0.22 to 0.23.
 
-L<threads> has been upgraded from version 2.36 to 2.37.
+It now handles the additional locale categories that Linux defines
+beyond those in the POSIX Standard.
 
 =item *
 
-L<Time::HiRes> has been upgraded from version 1.9775 to 1.9776.
+L<Math::BigInt> has been upgraded from version 2.003001 to 2.003002.
 
 =item *
 
-L<Time::Local> has been upgraded from version 1.30 to 1.35.
+L<Math::BigInt::FastCalc> has been upgraded from version 0.5016 to 0.5018.
 
 =item *
 
-L<UNIVERSAL> has been upgraded from version 1.15 to 1.16.
+L<Pod::Checker> has been upgraded from version 1.75 to 1.76.
 
 =item *
 
-L<warnings> has been upgraded from version 1.65 to 1.66.
-
-=back
-
-=head2 Removed Modules and Pragmata
-
-=over 4
-
-=item *
-
-XXX Remove this section if Porting/corelist-perldelta.pl did not add any content here.
+L<SelfLoader> has been upgraded from version 1.26 to 1.27.
 
 =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<perlhacktips>
-
-=over 4
-
-=item *
-
-Document we can't use compound literals or array designators due to
-C++ compatibility.  [GH #21073]
-
-=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>.
-
-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 *
-
-XXX L<message|perldiag/"message">
-
-=item *
-
-L<Attempt to call undefined %s method with arguments via package
-"%s" (perhaps you forgot to load the package?)|
-perldiag/"Attempt to call undefined %s method with arguments via package
-"%s" (perhaps you forgot to load the package?)">
-
-(F) You called the C<import()> or C<unimport()> method of a class that
-has no import method defined in its inheritance graph, and passed an
-argument to the method. This is very often the sign of a mispelled
-package name in a use or require statement that has silently succeded
-due to a case insensitive file system.
-
-Another common reason this may happen is when mistakenly attempting to
-import or unimport a symbol from a class definition or package which
-does not use C<Exporter> or otherwise define its own C<import> or
-C<unimport> method.
-
-=back
-
-=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 *
-
-XXX Describe change here
-
-=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 L<XXX> with program names to get proper documentation linking. ]
-
-=head2 L<XXX>
-
-=over 4
-
-=item *
-
-XXX
-
-=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 *
-
-Update F<nm> output parsing for Darwin in F<t/porting/libperl.t> to
-handle changes in the output of nm on Darwin.  [GH #21117]
-
-=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 Windows
-
-Eliminated several header build warnings under MSVC with C</W4> to
-reduce noise for embedders. [GH #21031]
-
-=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 *
 
-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>.
-
-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
+C<dAX>, C<dITEMS> and hence C<dXSARGS> now declare C<AX> and C<items>
+as C<Stack_off_t> rather than C<SSize_t>.  This reverts back to
+compatibility with pre-64-bit stack support for default builds of perl
+where C<Stack_off_t> is C<I32>.  [GH #21782]
 
 =item *
 
-XXX
+A new function is now available to C<XS> code, L<perlapi/sv_langinfo>.
+This provides the same information as the existing
+L<perlapi/Perl_langinfo8>, but returns an SV instead of a S<C<char *>>,
+so that programmers don't have to concern themselves with the UTF-8ness
+of the result.  This new function is now the preferred interface for
+C<XS> code to the L<nl_langinfo(3)> C<libc> function.  From Perl space,
+this information continues to be provided by the L<I18N::Langinfo>
+module.
 
 =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
+none
 
 =back
 
-=head1 Errata From Previous Releases
-
-=over 4
-
-=item *
+=head1 Acknowledgements
 
-XXX Add anything here that we forgot to add, or were mistaken about, in
-the perldelta of a previous release.
+Perl 5.39.7 represents approximately 3 weeks of development since Perl
+5.39.6 and contains approximately 7,300 lines of changes across 160 files
+from 16 authors.
 
-=back
+Excluding auto-generated files, documentation and release tools, there were
+approximately 5,600 lines of changes to 79 .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.39.7:
 
-XXX If any significant core contributor or member of the CPAN community has
-died, add a short obituary here.
+Craig A. Berry, Dagfinn Ilmari Mannsåker, David Mitchell, Elvin Aslanov,
+H.Merijn Brand, James E Keenan, Karen Etheridge, Karl Williamson, Mathias
+Kende, Max Maischein, Peter John Acklam, Philippe Bruhat (BooK), Todd
+Rinaldo, Tony Cook, Yves Orton, Дилян Палаузов.
 
-=head1 Acknowledgements
+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.
 
-XXX Generate this with:
+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.
 
-  perl Porting/acknowledgements.pl v5.39.1..HEAD
+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