This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Allow trie use for /iaa matching
[perl5.git] / pod / perldelta.pod
index bcaac82..722abf4 100644 (file)
@@ -1,26 +1,19 @@
 =encoding utf8
 
-=for comment
-Stuff that needs to be done still:
-e82485c [MERGE] refactor pp_match(), pp_subst(), regexec()
-6136213 [perl #52000] Warn/abort on attempted perl exit
-cccbbce Reap child in case where exception has been thrown
-70502ce [perl #119101] Extraneous warnings in Parse::ErrorString::Perl
-
 =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.19.3
+perldelta - what is new for perl v5.19.4
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.19.2 release and the 5.19.3
+This document describes differences between the 5.19.3 release and the 5.19.4
 release.
 
-If you are upgrading from an earlier release such as 5.19.1, first read
-L<perl5192delta>, which describes differences between 5.19.1 and 5.19.2.
+If you are upgrading from an earlier release such as 5.19.2, first read
+L<perl5193delta>, which describes differences between 5.19.2 and 5.19.3.
 
 =head1 Notice
 
@@ -34,14 +27,6 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>
-
-Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or
-B<-p> was a no-op, with this change, if you supply B<-F> then both
-B<-a> and B<-n> are implied and if you supply B<-a> then B<-n> is implied.
-
-You can still use B<-p> for its extra behaviour. [perl #116190]
-
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -93,16 +78,12 @@ as an updated module in the L</Modules and Pragmata> section.
 
 =head1 Performance Enhancements
 
-XXX Changes which enhance performance without changing behaviour go here.
-There may well be none in a stable release.
-
-[ List each enhancement as a =item entry ]
-
 =over 4
 
 =item *
 
-XXX
+The trie performance enhancement for regular expressions has now been
+extended to those compiled under C</iaa>.
 
 =back
 
@@ -134,107 +115,161 @@ XXX
 
 =item *
 
-L<B> has been upgraded from version 1.44 to 1.45.
+L<B> has been upgraded from version 1.45 to 1.46.
+
+The fix for [perl #118525] introduced a regression in the behaviour of
+C<B::CV::GV>, changing the return value from a C<B::SPECIAL> object on
+a C<NULL> C<CvGV> to C<undef>.  C<B::CV::GV> again returns a
+C<B::SPECIAL> object in this case. [perl #119351]
 
-Calling the C<GV> method on C<B::CV> objects created from a lexical
-sub would return nonsense, possibly crashing perl. C<GV> now returns
-C<undef> for lexical subs. [perl #118525]
+=item *
+
+L<B::Concise> has been upgraded from version 0.98 to 0.99.
 
-Added the C<NAME_HEK> method to return the name of a lexical sub.
+The handling of the C<glob> operator, broken since Perl 5.17.6, has been fixed.
 
 =item *
 
-L<bignum> has been upgraded from version 0.35 to 0.36.
+L<Carp> has been upgraded from version 1.31 to 1.32.
 
-L<bigrat> wasn't correctly updating an internal variable when C<use>d
-with a C<lib> option.
+=over 4
 
 =item *
 
-L<Carp> has been upgraded from 1.30 to 1.31
+In stack traces, subroutine arguments that are strings are now quoted
+in a consistent manner, regardless of what characters they contain and
+how they're internally represented.
 
-L<Carp> now handles objects with string overloads. It also allows objects
-to specify how they appear in the stack dump with a C<CARP_TRACE> method,
-and also allows the user to specify their own formatter for objects without
-C<CARP_TRACE> as well as other references. [perl #92446]
+=item *
+
+C<Carp> now won't vivify the C<overload::StrVal> glob or subroutine or the
+C<overload> stash.
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from 2.061 to 2.062.
+C<Carp> now avoids some unwanted Unicode warnings on older Perls.  This
+doesn't affect behaviour with current Perl.
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from 2.061 to 2.062.
+C<Carp::Heavy> detects version mismatch with C<Carp>, to give a good
+error message if a current (stub) C<Carp::Heavy> gets loaded by an old
+C<Carp> that expects C<Carp::Heavy> to provide subroutines.
+
+=back
 
 =item *
 
-L<Config::Perl::V> has been upgraded from version 0.18 to 0.19.
+L<Data::Dumper> has been upgraded from version 2.148 to 2.149.
+
+This upgrade is part of a larger change to make the array interface 64-bit safe
+by using SSize_t instead of I32 for array indices.
 
 =item *
 
-L<Data::Dumper> has been upgraded from version 2.147 to 2.148.
+L<Devel::Peek> has been upgraded from version 1.13 to 1.14.
 
-The compatbility of the XS implementation with the pure perl version
-under C<Useqq> has been improved. [perl #118933]
+This upgrade is part of a larger change to preserve referential identity when
+passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
+nonexistent array elements.
 
 =item *
 
-L<Devel::Peek> has been upgraded from version 1.12 to 1.13.
+L<DynaLoader> has been upgraded from version 1.19 to 1.20.
 
-The C<SvREFCNT_inc()> and C<SvREFCNT_dec()> functions have been
-removed and C<SvREFCNT()> will now work on non-scalars. [perl #117793]
+The documentation now makes it clear, as has always been the case, that
+C<dl_unload_file> is only called automatically to unload all loaded shared
+objects if the perl interpreter was built with the C macro
+DL_UNLOAD_ALL_AT_EXIT defined.
 
 =item *
 
-L<Exporter> has been upgraded from version 5.68 to 5.69.
+L<ExtUtils::MakeMaker> has been upgraded from version 6.72 to 6.74.
 
-L<Exporter> would ignore custom C<$SIG{__WARN__}> handlers in
-C<Exporter::Heavy>. [perl #39739]
+Numerous updates and bug fixes are incorporated.  See the F<Changes> file for
+full details.
 
 =item *
 
-The IO-Compress module collection has been upgraded from 2.061 to 2.062.
+L<File::Glob> has been upgraded from version 1.20 to 1.21.
+
+C<glob()> now warns in the context of C<use warnings "syscalls";> if
+the supplied pattern has an internal NUL (C<"\0">) character.
 
 =item *
 
-L<IPC::Cmd> has been upgraded from version 0.82 to 0.84.
+L<IPC::Open3> has been upgraded from 1.15 to 1.16.
 
-C<run_forked> has various fixes/improvements, L<Socket> is only used where
-needed and a regression introduced in 0.78 has been fixed.
+This upgrade is part of a larger change to preserve referential identity when
+passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
+nonexistent array elements.
 
 =item *
 
-The libnet module collection has been upgraded from version 1.22 to 1.23.
+L<Math::BigInt> has been upgraded from version 1.9992 to 1.9993.
+
+Cleaned up the L<Math::BigInt> and L<Math::BigFloat> documentation to
+be more consistent with other perl documentation. [perl #86686]
+
+Added a bint() method for rounding towards zero. [perl #85296]
 
 =item *
 
-L<List::Util> has been upgraded from version 1.27 to 1.30
+L<Math::BigInt::FastCalc> has been upgraded from version 0.30 to 0.31.
 
-L<List::Util> now includes C<pairgrep>, C<pairmap>, C<pairs>, C<pairkeys>,
-C<pairvalues> and C<pairfirst> functions that operate on even-sized lists of
-pairs.
+This upgrade is part of a larger change to make the array interface 64-bit safe
+by using SSize_t instead of I32 for array indices.
 
 =item *
 
-L<parent> has been upgraded from version 0.225 to 0.226.
+L<Module::CoreList> has been upgraded from version 2.97 to 2.98.
+
+The list of Perl versions covered has been updated.
 
 =item *
 
-L<Socket> has been upgraded from version 2.010 to 2.011.
+L<Module::Metadata> has been upgraded from version 1.000014 to 1.000016.
 
-Handle FreeBSD (or other platforms) returning shorter AF_UNIX sockaddr
-structures due to embedded sun_len. [cpan #86613]
+The module's DESCRIPTION has been re-worded regarding safety/security to
+satisfy CVE-2013-1437.
 
 =item *
 
-L<Storable> has been upgraded from version 2.45 to 2.46.
+L<mro> has been upgraded from 1.13 to 1.14.
 
-Avoid creating temporary objects for STORABLE_attach when they aren't
-required. [perl #118907]
+This upgrade is part of a larger change to make the array interface 64-bit safe
+by using SSize_t instead of I32 for array indices.
 
 =item *
 
-L<Time::Piece> has been upgraded from version 1.21 to 1.22.
+L<Perl::OSType> has been upgraded from version 1.003 to 1.004.
+
+The Unix OSType 'bitrig' has been added.
+
+=item *
+
+L<re> has been upgraded from version 0.25 to 0.26.
+
+A function signature has been corrected in the XS implementation.
+
+=item *
+
+L<Storable> has been upgraded from version 2.46 to 2.47.
+
+This upgrade is part of a larger change to preserve referential identity when
+passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
+nonexistent array elements.
+
+=item *
+
+L<warnings> has been upgraded from version 1.18 to 1.19.
+
+The C<syscalls> warnings category has been added to check for embedded NUL
+(C<"\0">) characters in pathnames and string arguments to other system calls.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.10 to 0.11.
 
 =back
 
@@ -267,19 +302,13 @@ XXX Changes which significantly change existing files in F<pod/> go here.
 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
 section.
 
-=head3 L<perlopentut>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-The C<open> tutorial has been completely rewriten by Tom Christiansen, and now
-focuses on covering only the basics, rather than providing a comprehensive
-reference to all things openable.  This rewrite came as the result of a
-vigorous discussion on perl5-porters kicked off by a set of improvements
-written by Alexander Hartmaier to the existing C<perlopentut>.  A "more than
-you ever wanted to know about C<open>" document may follow in subsequent
-versions of perl.
+XXX Description of the change here
 
 =back
 
@@ -313,7 +342,11 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
+
+(W syscalls) Embedded \0 characters in pathnames or other system call arguments
+produce a warning as of 5.20. The parts after the \0 were formerly ignored by
+system calls.
 
 =back
 
@@ -338,13 +371,13 @@ Most of these are built within the directories F<utils> and F<x2p>.
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
-=head3 L<XXX>
+=head3 L<find2perl>
 
 =over 4
 
 =item *
 
-XXX
+L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
 
 =back
 
@@ -361,7 +394,16 @@ L</Platform Support> section, instead.
 
 =item *
 
-XXX
+The F<Makefile.PL> for C<SDBM_File> now generates a better F<Makefile>,
+which avoids a race condition during parallel makes, which could cause the
+build to fail. This is the last known parallel make problem (on *nix
+platforms), and therefore we believe that a parallel make should now always
+be error free.
+
+=for comment
+
+Strictly only for a build where build files such as F<Makefile.SH> have not
+been updated by C<git> in an already configured and built tree.
 
 =back
 
@@ -379,7 +421,23 @@ that they represent may be covered elsewhere.
 
 =item *
 
-XXX
+The test script F<t/bigmem/regexp.t> has been added to test that regular
+expression matches on very large strings now succeed as expected.
+
+=item *
+
+Various cases of C<die>, C<last>, C<goto> and C<exit> triggering C<DESTROY> are
+now tested by the new test script F<t/op/rt119311.t>.
+
+=item *
+
+The new test script F<t/win32/signal.t> tests that C<$!> and C<$^E> are now
+preserved across signal handlers by the Win32 signal emulation code.
+
+=item *
+
+The test script F<t/x2p/find2perl.t> has been added to test the F<find2perl>
+program on platforms where it is practical to do so.
 
 =back
 
@@ -399,9 +457,9 @@ source tree.
 
 =over 4
 
-=item XXX-some-platform
+=item Bitrig
 
-XXX
+Compile support has been added for Bitrig, a fork of OpenBSD
 
 =back
 
@@ -426,9 +484,12 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item XXX-some-platform
+=item WinCE
 
-XXX
+The building of XS modules has largely been restored. Several still cannot
+(yet) be built but it is now possible to build Perl on WinCE with only a couple
+of further patches (to L<Socket> and L<ExtUtils::MakeMaker>), hopefully to be
+incorporated soon.
 
 =back
 
@@ -444,8 +505,7 @@ well.
 
 =item *
 
-C<sv_pos_b2u_flags> has been added to the API.  It is similar to
-C<sv_pos_b2u>, but supports long strings on 64-bit platforms.
+XXX
 
 =back
 
@@ -460,80 +520,8 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-Autovivifying a subroutine stub via C<\&$glob> started causing crashes in
-Perl 5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar
-that had had a glob assigned to it.  This has been fixed [perl #119051].
-
-=item *
-
-On 64-bit platforms C<pos> can now be set to a value higher than 2**31-1
-[perl #72766].
-
-=item *
-
-Perl used to leak an implementation detail when it came to referencing the
-return values of certain operators.  C<for ($a+$b) { warn \$_; warn \$_ }>
-used to display two different memory addresses, because the C<\> operator
-was copying the variable.  Under threaded builds, it would also happen for
-constants (C<for(1) { ... }>).  This has been fixed [perl #21979, #78194,
-#89188, #109746, #114838, #115388].
-
-=item *
-
-The range operator C<..> was returning the same modifiable scalars with
-each call, unless it was the only thing in a C<foreach> loop header.  This
-meant that changes to values within the list returned would be visible the
-next time the operator was executed [perl #3105].
-
-=item *
-
-Constant folding and subroutine inlining no longer cause operations that
-would normally return new modifiable scalars to return read-only values
-instead.
-
-=item *
-
-Closures of the form C<sub () { $some_variable }> are no longer inlined,
-causing changes to the variable to be ignored by callers of the subroutine
-[perl #79908].
-
-=item *
-
-Return values of certain operators such as C<ref> would sometimes be shared
-between recursive calls to the same subroutine, causing the inner call to
-modify the value returned by C<ref> in the outer call.  This has been
-fixed.
-
-=item *
-
-C<__PACKAGE__> and constants returning a package name or hash key are now
-consistently read-only.  In various previous Perl releases, they have
-become mutable under certain circumstances.
-
-=item *
-
-C</$qr/p> was broken in Perl 5.18.0; the C</p> flag was ignored.  This has
-been fixed [perl #118213].
-
-=item *
-
-Starting in v5.18.0, a construct like C</[#](?{})/x> would have its C<#>
-incorrectly interpreted as a comment.  The code block would be skipped,
-unparsed.  This has been corrected.
-
-=item *
-
-Starting in Perl 5.001, a regular expression like C</[#$a]/x> or
-C</[#]$a/x> would have its C<#> incorrectly interpreted as a comment, so
-the variable would not interpolate.  This has been corrected [perl #45667].
-
-=item *
-
-On non-threaded builds, setting C<${"_<filename"}> to a reference or
-typeglob no longer causes C<__FILE__> in that file to return a corrupt
-string, and no longer prevents C<#line> directives in string evals from
-providing the source lines to the debugger.  Threaded builds were
-unaffected.
+The value of C<$^E> is now saved across signal handlers on
+Win32. [perl #85104]
 
 =back
 
@@ -562,7 +550,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.19.2..HEAD
+  perl Porting/acknowledgements.pl v5.19.3..HEAD
 
 =head1 Reporting Bugs