This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for 7e0dd61, MurmurHash64[AB]
[perl5.git] / pod / perldelta.pod
index 974a62c..4c28519 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.21.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.21.3
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.21.1 release and the 5.21.2
+This document describes differences between the 5.21.2 release and the 5.21.3
 release.
 
-If you are upgrading from an earlier release such as 5.21.0, first read
-L<perl5211delta>, which describes differences between 5.21.0 and 5.21.1.
+If you are upgrading from an earlier release such as 5.21.1, first read
+L<perl5212delta>, which describes differences between 5.21.1 and 5.21.2.
+
+=head1 Notice
+
+XXX Any important notices here
 
 =head1 Core Enhancements
 
-=head2 Better heuristics on older platforms for determining locale UTF8ness
+=head2 C<defined(@array = LIST)> is no longer fatal
 
-On platforms that implement neither the C99 standard nor the POSIX 2001
-standard, determining if the current locale is UTF8 or not depends on
-heuristics.  These are improved in this release.
+In 5.21.1, C<defined(@array)> was made fatal.  This has been relaxed
+to not die if the argument is assigning to an array.
 
 =head1 Security
 
-=head2 Perl is now always compiled with -D_FORTIFY_SOURCE=2 if available
-
-The 'code hardening' option called C<_FORTIFY_SOURCE>, available in
-gcc 4.*, is now always used for compiling Perl, if available.
+=head2 The L<Safe> module could allow outside packages to be replaced
 
-Note that this isn't necessarily a huge step since in many platforms
-the step had already been taken several years ago: many Linux
-distributions (like Fedora) have been using this option for Perl,
-and OS X has enforced the same for many years.
+Critical bugfix: outside packages could be replaced.  L<Safe> has
+been patched to 2.38 to address this.
 
+=head1 Incompatible Changes
 
-=head1 Deprecations
+=head2 S<C<use UNIVERSAL '...'>> is now a fatal error
 
-=head2 C<< /\C/ >> character class
+Importing functions from C<UNIVERSAL> has been deprecated since v5.12, and
+is now a fatal error.  S<C<"use UNIVERSAL">> without any arguments is still
+allowed.
 
-This character class, which matches a single byte, even if it appears
-in a multi-byte character has been deprecated. Matching single bytes
-in a multi-byte character breaks encapsulation, and can corrupt utf8
-strings.
+=head1 Modules and Pragmata
 
-=head1 Performance Enhancements
+=head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-Refactoring of C<< pp_tied >> and CC<< pp_ref >> for small improvements.
+L<B::Debug> has been upgraded from version 1.19 to 1.21
 
 =item *
 
-Pathtools don't try to load XS on miniperl.
+L<Config::Perl::V> has been upgraded from version 0.20 to 0.22.
 
 =item *
 
-A typo fix reduces the size of the C<< OP >> structure.
+L<CPAN::Meta> has been upgraded from version 2.141520 to 2.142060.
 
 =item *
 
-Hash lookups where the key is a constant is faster.
+L<CPAN::Meta::Requirements> has been upgraded from version 2.125 to 2.126.
 
-=back
-
-=head1 Modules and Pragmata
+=item *
 
-=head2 Updated Modules and Pragmata
+L<ExtUtils::Manifest> has been upgraded from version 1.64 to 1.65.
 
-=over 4
+The MANIFEST is now opened with C<:raw>, to prevent C<CRLF>s leaking in.
 
 =item *
 
-L<arybase> has been upgraded from version 0.07 to 0.08.
+L<HTTP::Tiny> has been upgraded from version 0.043 to 0.047.
 
 =item *
 
-L<B> has been upgraded from version 1.49 to 1.50.
-
-=item *
+L<perl5db.pl> has been upgraded from version 1.45 to 1.46.
 
-L<Devel::Peek> has been upgraded from version 1.17 to 1.18.
+Fixed the scope level handling of the debugger's C<y> command.
 
 =item *
 
-L<experimental> has been upgraded from version 0.007 to 0.008.
+L<POSIX> has been upgraded from version 1.41 to 1.42.
+
+Replaced the thread-unsafe code used to prevent duplicate warning
+messages for using the isxxx() functions.  [perl #122476]
 
 =item *
 
-L<ExtUtils::Manifest> has been upgraded from version 1.63 to 1.64.
+L<Safe> has been upgraded from version 2.37 to 2.38.
+
+Critical bugfix: outside packages could be replaced.
 
 =item *
 
-L<File::Copy> has been upgraded from version 2.29 to 2.30.
+L<Socket> has been upgraded from version 2.014 to 2.015.
 
-=item *
+Test suite updates, particularly useful for Solaris and cygwin, and
+a slight change to the pattern used for IPv4 address matching.
 
-The PathTools module collection (L<File::Spec> and friends) has been
-upgraded from version 3.48 to 3.49.
+=back
 
-=item *
+=head1 Documentation
 
-L<Filter::Simple> has been upgraded from version 0.91 to 0.92.
+=head2 Changes to Existing Documentation
 
-=item *
+=head3 L<perlexperiment>
 
-L<Hash::Util> has been upgraded from version 0.17 to 0.18.
+=over 4
 
 =item *
 
-L<IO> has been upgraded from version 1.32 to 1.33.
+Added reference to L<feature>.
 
-=item *
+=back
 
-L<IO::Socket::IP> has been upgraded from version 0.29 to 0.31.
+=head3 L<perlguts>
 
-A better fix for subclassing C<connect()>.
-L<[cpan #95983]|https://rt.cpan.org/Ticket/Display.html?id=95983>
-L<[cpan #97050]|https://rt.cpan.org/Ticket/Display.html?id=97050>
+=over 4
 
 =item *
 
-L<IPC::Open3> has been upgraded from version 1.16 to 1.17.
+Details on C level symbols and libperl.t added.
 
-=item *
+=back
 
-L<Math::BigInt> has been upgraded from version 1.9995 to 1.9996.
+=head3 L<perlhacktips>
 
-Correct handling of subclasses.
-L<[cpan #96254]|https://rt.cpan.org/Ticket/Display.html?id=96254>
-L<[cpan #96329]|https://rt.cpan.org/Ticket/Display.html?id=96329>
+=over 4
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.021001_01 to 5.021002.
+Recommended replacements for tmpfile, atoi, strtol, and strtoul added.
+=back
 
-=item *
+=head3 L<perlop>
 
-L<Pod::Usage> has been upgraded from version 1.63 to 1.64.
+=over 4
 
 =item *
 
-L<POSIX> has been upgraded from version 1.40 to 1.41.
+ASCII v. EBCDIC clarifications added.
 
-=item *
+=back
+
+=head3 L<perlsec>
 
-L<threads> has been upgraded from version 1.94 to 1.95.
+=over 4
 
 =item *
 
-L<warnings> has been upgraded from version 1.24 to 1.26.
+Comments added on algorithmic complexity and tied hashes.
 
 =back
 
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<< perlpolicy >>
+=head3 L<perlvms>
 
 =over 4
 
 =item *
 
-We now have a code of conduct for the I<< p5p >> mailing list, as documented
-in L<< perlpolicy/STANDARDS OF CONDUCT >>.
+Updated documentation on environment and shell interaction in VMS.
 
 =back
 
-=head3 L<< perlfunc >>
+=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 *
 
-Improve documentation of C<< our >>.
+L<Hexadecimal float: internal error|perldiag/"Hexadecimal float: internal error">
+
+(F) Something went horribly bad in hexadecimal float handling.
+
+=item *
+
+L<Hexadecimal float: unsupported long double format|perldiag/"Hexadecimal float: unsupported long double format">
+
+(F) You have configured Perl to use long doubles but
+the internals of the long double format are unknown,
+therefore the hexadecimal float output is impossible.
 
 =back
 
-=head3 L<< perlsyn >>
+=head3 New Warnings
 
 =over 4
 
 =item *
 
-The empty conditional in C<< for >> and C<< while >> is now documented
-in L<< perlsyn >>.
+L<Hexadecimal float: exponent overflow|perldiag/"Hexadecimal float: exponent overflow">
 
-=back
+(W overflow) The hexadecimal floating point has larger exponent
+than the floating point supports.
 
-=head1 Diagnostics
+=item *
 
-=head2 New Diagnostics
+L<Hexadecimal float: exponent underflow|perldiag/"Hexadecimal float: exponent underflow">
 
-=head3 New Warnings
-
-=over 4
+(W overflow) The hexadecimal floating point has smaller exponent
+than the floating point supports.
 
 =item *
 
-L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated
-as 0 in increment (++)">
+L<Hexadecimal float: mantissa overflow|perldiag/"Hexadecimal float: mantissa overflow">
 
-(W numeric) The indicated string was fed as an argument to the C<++> operator
-which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
-See L<perlop/Auto-increment and Auto-decrement> for details.
+(W overflow) The hexadecimal floating point literal had more bits in
+the mantissa (the part between the 0x and the exponent, also known as
+the fraction or the significand) than the floating point supports.
 
 =item *
 
-L<Redundant argument in %s|perldiag/Redundant argument in %s>
+L<Hexadecimal float: precision loss|perldiag/"Hexadecimal float: precision loss">
+
+(W overflow) The hexadecimal floating point had internally more
+digits than could be output.  This can be caused by unsupported
+long double formats, or by 64-bit integers not being available
+(needed to retrieve the digits under some configurations).
 
-(W redundant) You called a function with more arguments than other
-arguments you supplied indicated would be needed. Currently only
-emitted when a printf-type format required fewer arguments than were
-supplied, but might be used in the future for e.g. L<perlfunc/pack>.
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
 
-The warnings category C<< redundant >> is new. See also [RT #121025]
+L<require> with no argument or undef used to warn about a Null filename; now
+it dies with C<Missing or undefined argument to require>.
 
 =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 a =item entry ].
+
 =over 4
 
 =item *
 
-A new compilation flag, C<< -DPERL_OP_PARENT >> is available. For details,
-see the discussion below at L<< /Internal Changes >>.
+Internal handling of floating point values has been improved.
+
+=item *
+
+MurmurHash64A and MurmurHash64B can now be configured as the internal hash
+function.
 
 =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 *
 
-C<< test.pl >> now allows C<< plan skip_all => $reason >>, to make it
-more compatible with C<< Test::More >>.
+XXX
 
 =back
 
@@ -247,99 +287,119 @@ more compatible with C<< Test::More >>.
 
 =over 4
 
+=item Android
+
+Build support has been improved for cross-compiling in general and for
+Android in particular.
+
 =item Solaris
 
-Builds on Solaris 10 with C<-Dusedtrace> would fail early since make
-didn't follow implied dependencies to build C<perldtrace.h>.  Added an
-explicit dependency to C<depend>.
-L<[perl #120120]|https://rt.perl.org/Ticket/Display.html?id=120120>
+C<c99> options have been cleaned up, hints look for C<solstudio>
+as well as C<SUNWspro>, and support for native C<setenv> has been added.
+
+=item VMS
+
+C<finite>, C<finitel>, and C<isfinite> detection has been added to
+C<configure.com>, environment handling has had some minor changes, and
+a fix for legacy feature checking status.
+
+=item Windows
+
+C<%I64d> is now being used instead of C<%lld> for MinGW.
 
 =back
 
 =head1 Internal Changes
 
-=over 4
-
-=item *
+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.
 
-The following private API functions had their context parameter removed,
-C<Perl_cast_ulong>,  C<Perl_cast_i32>, C<Perl_cast_iv>,    C<Perl_cast_uv>,
-C<Perl_cv_const_sv>, C<Perl_mg_find>,  C<Perl_mg_findext>, C<Perl_mg_magical>,
-C<Perl_mini_mktime>, C<Perl_my_dirfd>, C<Perl_sv_backoff>, C<Perl_utf8_hop>.
+[ List each change as a =item entry ]
 
-Users of the public API prefix-less calls remain unaffected.
+=over 4
 
 =item *
 
-Experimental support for ops in the optree to be able to locate their
-parent, if any. A general-purpose function, C<< op_sibling_splice() >>
-allows for general manipulating an C<< op_sibling >> chain. The last op
-in such a chain is now marked with the field C<< op_lastsib >>.
+Added L<perlapi/sync_locale>.
+Changing the program's locale should be avoided by XS code.  Nevertheless,
+certain non-Perl libraries called from XS, such as C<Gtk> do so.  When this
+happens, Perl needs to be told that the locale has changed.  Use this function
+to do so, before returning to Perl.
 
-A new build define, C<< -DPERL_OP_PARENT >> has been added; if
-given, it forces the core to use C<< op_lastsib >> to detect the
-last sibling in a chain, freeing the last C<< op_sibling >> pointer,
-which then points back to the parent (instead of being C<< NULL >>).
+=item *
 
-A C-level C<< op_parent() >> function, and a C<< B >> C<< parent() >> method
-have been added; under a default build, they return C<< NULL >>, but when
-C<< -DPERL_OP_PARENT >> has been set, they return the parent of the current op.
+Added L<perlapi/grok_atou> as a safer replacement for atoi and strtol.
 
 =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<< s///e >> on tainted utf8 strings got C<< pos() >> messed up. This bug,
-introduced in 5.20, is now fixed. [RT #122148]
+Failing to compile C<use Foo> in an eval could leave a spurious
+C<BEGIN> subroutine definition, which would produce a "Subroutine
+BEGIN redefined" warning on the next use of C<use>, or other C<BEGIN>
+block.  [perl #122107]
 
 =item *
 
-A non-word boundary in a regular expression (C<< \B >>) did not always
-match the end of the string; in particular C<< q{} =~ /\B/ >> did not
-match. This bug, introduced in perl 5.14, is now fixed. [RT #122090]
+C<method { BLOCK } ARGS> syntax now correctly parses the arguments if they
+begin with an opening brace.  [perl #46947]
 
 =item *
 
-C<< " P" =~ /(?=.*P)P/ >> should match, but did not. This is now fixed.
-[RT #122171].
+External libraries and Perl may have different ideas of what the locale is.
+This is problematic when parsing version strings if the locale's numeric
+separator has been changed.  Version parsing has been patched to ensure
+it handles the locales correctly.  [perl #121930]
+
+=item *
+
+A bug has been fixed where zero-length assertions and code blocks inside of a
+regex could cause L<pos> to see an incorrect value.  [perl #122460]
 
 =back
 
-=head1 Acknowledgements
+=head1 Known Problems
 
-Perl 5.21.2 represents approximately 4 weeks of development since Perl 5.21.1
-and contains approximately 11,000 lines of changes across 220 files from 27
-authors.
+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.
 
-Excluding auto-generated files, documentation and release tools, there were
-approximately 5,700 lines of changes to 140 .pm, .t, .c and .h files.
+[ List each fix as a =item entry ]
 
-Perl continues to flourish into its third decade thanks to a vibrant community
-of users and developers. The following people are known to have contributed the
-improvements that became Perl 5.21.2:
+=over 4
 
-Aaron Crane, Abhijit Menon-Sen, Abigail, Alexandr Ciornii, brian d foy, Brian
-Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Daniel Dragan, David Golden,
-David Mitchell, Dmitri Tikhonov, George Greer, H.Merijn Brand, James E Keenan,
-Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Matthew Horsfall, Peter
-John Acklam, Peter Martini, Reini Urban, Ricardo Signes, Steve Hay, Tony Cook,
-Yves Orton, Ævar Arnfjörð Bjarmason.
+=item *
 
-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
+
+=back
+
+=head1 Errata From Previous Releases
+
+=over 4
+
+=item *
+
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
+
+=back
+
+=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.21.2..HEAD
 
 =head1 Reporting Bugs