This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Users don't normally care about the blead releases
[perl5.git] / pod / perl5134delta.pod
index ae8c452..e90fbff 100644 (file)
@@ -1,15 +1,8 @@
 =encoding utf8
 
-=for rafl
-changelogged up to commit 34edcf0c
-* PERL_STATIC_INLINE might want to be mentioned
-
 =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.13.4
+perl5134delta - what is new for perl v5.13.4
 
 =head1 DESCRIPTION
 
@@ -20,84 +13,170 @@ If you are upgrading from an earlier release such as 5.13.2, first read
 L<perl5133delta>, which describes differences between 5.13.2 and
 5.13.3.
 
-=head1 Notice
-
-XXX Any important notices here
-
 =head1 Core Enhancements
 
-XXX New core language features go here. Summarise 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 ]
+=head2 C<srand()> now returns the seed
 
-=head1 Security
+This allows programs that need to have repeatable results to not have to come
+up with their own seed generating mechanism.  Instead, they can use C<srand()>
+and somehow stash the return for future use.  Typical is a test program which
+has too many combinations to test comprehensively in the time available to it
+each run.  It can test a random subset each time, and should there be a failure,
+log the seed used for that run so that it can later be used to reproduce the
+exact results.
 
-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.
+=head2 C<\N{I<name>}> and C<charnames> enhancements
 
-[ List each security issue as a =head2 entry ]
+C<\N{}>, C<charnames::vianame>, C<charnames::viacode> now know about every
+character in Unicode.  Previously, they didn't know about the Hangul syllables
+nor a number of CJK (Chinese/Japanese/Korean) characters.
 
 =head1 Incompatible Changes
 
-XXX For a release on a stable branch, this section aspires to be:
+=head2 Declare API incompatibility between blead releases
 
-    There are no changes intentionally incompatible with 5.XXX.XXX. If any
-    exist, they are bugs and reports are welcome.
+Only stable releases (5.10.x, 5.12.x, 5.14.x, ...) guarantee binary
+compatibility with each other, while blead releases (5.13.x, 5.15.x, ...) often
+break this compatibility. However, prior to perl 5.13.4, all blead releases had
+the same C<PERL_API_REVISION>, C<PERL_API_VERSION>, and C<PERL_API_SUBVERSION>,
+effectively declaring them as binary compatible, which they weren't. From now
+on, blead releases will have a C<PERL_API_SUBVERSION> equal to their
+C<PERL_SUBVERSION>, explicitly marking them as incompatible with each other.
 
-[ List each incompatible change as a =head2 entry ]
+Maintenance releases of stable perl versions will continue to make no
+intentionally incompatible API changes.
 
-=head1 Deprecations
+=head2 Check API compatibility when loading XS modules
 
-XXX Any deprecated features, syntax, modules etc. should be listed here.
-In particular, deprecated modules should be listed here even if they are
-listed as an updated module in the L</Modules and Pragmata> section.
+When perl's API changes in incompatible ways (which usually happens between
+every major release), XS modules compiled for previous versions of perl will not
+work anymore. They will need to be recompiled against the new perl.
 
-[ List each deprecation as a =head2 entry ]
+In order to ensure that modules are recompiled, and to prevent users from
+accidentally loading modules compiled for old perls into newer ones, the
+C<XS_APIVERSION_BOOTCHECK> macro has been added. That macro, which is called
+when loading every newly compiled extension, compares the API version of the
+running perl with the version a module has been compiled for and raises an
+exception if they don't match.
 
-=head1 Performance Enhancements
+=head2 Binary Incompatible with all previous Perls
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+Some bit fields have been reordered; therefore, this release will not be binary
+compatible with any previous Perl release.
 
-[ List each enhancement as a =item * entry ]
+=head2 Change in the parsing of certain prototypes
+
+Functions declared with the following prototypes now behave correctly as unary
+functions:
 
 =over 4
 
 =item *
 
-XXX
+C<*>
+
+=item *
+
+C<\sigil>
+
+=item *
+
+C<\[...]>
+
+=item *
+
+C<;$>
+
+=item *
+
+C<;*>
+
+=item *
+
+C<;\sigil>
+
+=item *
+
+C<;\[...]>
 
 =back
 
-=head1 Modules and Pragmata
+Due to this bug fix, functions using the C<(*)>, C<(;$)> and C<(;*)> prototypes
+are parsed with higher precedence than before. So in the following example:
 
-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>, which prints stub
-entries to STDOUT.  Results can be pasted in place of the '=head2' entries
-below.  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.
+  sub foo($);
+  foo $a < $b;
 
-[ Within each section, list entries as a =item NAME entry ]
+the second line is now parsed correctly as C<< foo($a) < $b >>, rather than
+C<< foo($a < $b) >>. This happens when one of these operators is used in
+an unparenthesised argument:
 
-=head2 New Modules and Pragmata
+  < > <= >= lt gt le ge
+  == != <=> eq ne cmp ~~
+  &
+  | ^
+  &&
+  || //
+  .. ...
+  ?:
+  = += -= *= etc.
+
+=head1 Deprecations
+
+=head2 List assignment to C<$[>
+
+After assignment to C<$[> has been deprecated and started to give warnings in
+perl version 5.12.0, this version of perl also starts to emit a warning when
+assigning to C<$[> in list context. This fixes an oversight in 5.12.0.
+
+=head1 Performance Enhancements
 
 =over 4
 
 =item *
 
-XXX
+Make string appending 100 times faster
+
+When doing a lot of string appending, perl could end up allocating a lot more
+memory than needed in a very inefficient way, if perl was configured to use the
+system's C<malloc> implementation instead of its own.
+
+C<sv_grow>, which is what's being used to allocate more memory if necessary when
+appending to a string, has now been taught how to round up the memory it
+requests to a certain geometric progression, making it much faster on certain
+platforms and configurations. On Win32, it's now about 100 times faster.
+
+=item *
+
+For weak references, the common case of just a single weak reference per
+referent has been optimised to reduce the storage required. In this case it
+saves the equivalent of one small perl array per referent.
+
+=item *
+
+C<XPV>, C<XPVIV>, and C<XPVNV> now only allocate the parts of the C<SV> body
+they actually use, saving some space.
 
 =back
 
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+This release does not introduce any new modules or pragmata.
+
 =head2 Updated Modules and Pragmata
 
 =over 4
 
+=item C<Archive::Tar>
+
+Upgraded from version 1.64 to 1.68.
+
+Among other things, the new version adds a new option to C<ptar> to allow safe
+creation of tarballs without world-writable files on Windows, allowing those
+archives to be uploaded to CPAN.
+
 =item C<B::Lint>
 
 Upgraded from version 1.11 to 1.12.
@@ -107,8 +186,14 @@ Upgraded from version 1.11 to 1.12.
 Upgraded from version 1.16 to 1.18.
 
 L<Carp> now detects incomplete L<caller()|perlfunc/"caller EXPR"> overrides and
-avoids using bogus C<@DB::args>. This fixes certain cases of C<Bizarre copy of
-ARRAY> caused by modules overriding C<caller()> incorrectly.
+avoids using bogus C<@DB::args>. To provide backtraces, Carp relies on
+particular behaviour of the caller built-in. Carp now detects if other code has
+overridden this with an incomplete implementation, and modifies its backtrace
+accordingly. Previously incomplete overrides would cause incorrect values in
+backtraces (best case), or obscure fatal errors (worst case)
+
+This fixes certain cases of C<Bizarre copy of ARRAY> caused by modules
+overriding C<caller()> incorrectly.
 
 =item C<Compress::Raw::Bzip2>
 
@@ -124,181 +209,169 @@ Upgraded from version 3.31 to 3.31_01.
 
 Various issues in L<File::Spec::VMS> have been fixed.
 
+=item C<I18N::Langinfo>
+
+Upgraded from version 0.03 to 0.04.
+
+C<langinfo()> now defaults to using C<$_> if there is no argument given, just
+like the documentation always claimed it did.
+
 =item C<IO::Compress>
 
 Upgraded from version 2.027 to 2.030.
 
-=back
+=item C<Module::CoreList>
 
-=head2 Removed Modules and Pragmata
+Upgraded from version 2.36 to 2.37.
 
-=over 4
+Besides listing the updated core modules of this release, it also stops listing
+the C<Filespec> module. That module never existed in core. The scripts
+generating C<Module::CoreList> confused it with C<VMS::Filespec>, which actually
+is a core module, since the time of perl 5.8.7.
 
-=item *
+=item C<Test::Harness>
 
-XXX
+Upgraded from version 3.21 to 3.22.
 
-=back
+=item C<Test::Simple>
 
-=head1 Documentation
+Upgraded from version 0.94 to 0.96.
 
-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>.
+Among many other things, subtests without a C<plan> or C<no_plan> now have an
+implicit C<done_testing()> added to them.
 
-=head2 New Documentation
+=item C<Unicode::Collate>
 
-XXX Changes which create B<new> files in F<pod/> go here.
+Upgraded from version 0.53 to 0.56.
 
-=head3 L<XXX>
+Among other things, it is now using UCA Revision 20 (based on Unicode 5.2.0) and
+supports a couple of new locales.
 
-XXX Description of the purpose of the new file here
+=item C<feature>
 
-=head2 Changes to Existing Documentation
+Upgraded from version 1.17 to 1.18.
 
-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.
+=back
 
-=head3 L<perlport>
+=head2 Removed Modules and Pragmata
 
-=over 4
+This release does not remove any modules or pragmata.
 
-=item *
+=head1 Documentation
 
-Documented a L<limitation|perlport/alarm> of L<alarm()|perlfunc/"alarm SECONDS">
-on Win32.
+=head2 Changes to Existing Documentation
 
-=back
+=head3 L<perldiag>
 
-=head1 Diagnostics
+=over 4
 
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages.  For the complete list of
-diagnostic messages, see L<perldiag>.
+=item *
 
-XXX New or changed warnings emitted by the core's C<C> code go here. Also
-include any changes in L<perldiag> that reconcile it to the C<C> code.
+The following existing diagnostics are now documented:
 
-[ Within each section, list entries as a =item entry ]
+=over 4
 
-=head2 New Diagnostics
+=item *
 
-XXX Newly added diagnostic messages go here
+L<Ambiguous use of %c resolved as operator %c|perldiag/"Ambiguous use of %c resolved as operator %c">
 
-=over 4
+=item *
+
+L<Ambiguous use of %c{%s} resolved to %c%s|perldiag/"Ambiguous use of %c{%s} resolved to %c%s">
 
 =item *
 
-XXX
+L<Ambiguous use of %c{%s%s} resolved to %c%s%s|perldiag/"Ambiguous use of %c{%s%s} resolved to %c%s%s">
 
-=back
+=item *
 
-=head2 Changes to Existing Diagnostics
+L<Ambiguous use of -%s resolved as -&%s()|perldiag/"Ambiguous use of -%s resolved as -&%s()">
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
+=item *
 
-=over 4
+L<Invalid strict version format (%s)|perldiag/"Invalid strict version format (%s)">
 
 =item *
 
-XXX
+L<Invalid version format (%s)|perldiag/"Invalid version format (%s)">
 
-=back
+=item *
 
-=head1 Utility Changes
+L<Invalid version object|perldiag/"Invalid version object">
 
-XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go
-here. Most of these are built within the directories F<utils> and F<x2p>.
+=back
 
-[ List utility changes as a =head3 entry for each utility and =item
-entries for each change
-Use L<XXX> with program names to get proper documentation linking. ]
+=back
 
-=head3 L<XXX>
+=head3 L<perlport>
 
 =over 4
 
 =item *
 
-XXX
+Documented a L<limitation|perlport/alarm> of L<alarm()|perlfunc/"alarm SECONDS">
+on Win32.
 
 =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 ].
+=head3 L<perlre>
 
 =over 4
 
 =item *
 
-Improve compatibility with C<C++> compilers.
+Minor fix to a multiple scalar match example.
 
 =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 summarising, although the bugs
-that they represent may be covered elsewhere.
-
-[ List each test improvement as a =item entry ]
+=head1 Configuration and Compilation
 
 =over 4
 
 =item *
 
-XXX
+Compatibility with C<C++> compilers has been improved.
 
-=back
+=item *
 
-=head1 Platform Support
+On compilers that support it, C<-Wwrite-strings> is now added to cflags by
+default.
 
-XXX Any changes to platform support should be listed in the sections below.
+=back
 
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+=head1 Testing
 
-=head2 New Platforms
+=over 4
 
-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.
+=item *
 
-=over 4
+F<t/op/print.t> has been added to test implicit printing of C<$_>.
 
-=item XXX-some-platform
+=item *
 
-XXX
+F<t/io/errnosig.t> has been added to test for restoration of of C<$!> when
+leaving signal handlers.
 
-=back
+=item *
 
-=head2 Discontinued Platforms
+F<t/op/tie_fetch_count.t> has been added to see if C<FETCH> is only called once
+on tied variables.
 
-XXX List any platforms that this version of perl no longer compiles on.
+=item *
 
-=over 4
+F<lib/Tie/ExtraHash.t> has been added to make sure the, previously untested,
+L<Tie::ExtraHash> keeps working.
 
-=item XXX-some-platform
+=item *
 
-XXX
+F<t/re/overload.t> has been added to test against string corruption in pattern
+matches on overloaded objects. This is a TODO test.
 
 =back
 
-=head2 Platform-Specific Notes
+=head1 Platform Support
 
-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.
+=head2 Platform-Specific Notes
 
 =over 4
 
@@ -312,7 +385,13 @@ Fixed a possible hang in F<t/op/readline.t>.
 
 =item *
 
-Fixed Makefile for SDK2003SP1 compilers.
+Fixed build process for SDK2003SP1 compilers.
+
+=item *
+
+When using old 32-bit compilers, the define C<_USE_32BIT_TIME_T> will now be set
+in C<$Config{ccflags}>. This improves portability when compiling XS extensions
+using new compilers, but for a perl compiled with old 32-bit compilers.
 
 =back
 
@@ -320,12 +399,6 @@ Fixed Makefile for SDK2003SP1 compilers.
 
 =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 test improvement as a =item entry ]
-
 =over 4
 
 =item Removed C<PERL_POLLUTE>
@@ -339,92 +412,121 @@ contains a more specific escape hatch:
 This can be used for modules that have not been upgraded to 5.6 naming
 conventions (and really should be completely obsolete by now).
 
-=item Declare API incompatibility between blead releases
+=item Added C<PERL_STATIC_INLINE>
 
-Only stable releases (5.10.x, 5.12.x, 5.14.x, ...) guarantee binary
-compatibility with each other, while blead releases (5.13.x, 5.15.x, ...) often
-break this compatibility. However, prior to perl 5.13.4, all blead releases had
-the same C<PERL_API_REVISION>, C<PERL_API_VERSION>, and C<PERL_API_SUBVERSION>,
-effectively declaring them as binary compatible, which they weren't. From now
-on, blead releases will have a C<PERL_API_SUBVERSION> equal to their
-C<PERL_SUBVERSION>, explicitly marking them as incompatible with each other.
+The C<PERL_STATIC_INLINE> define has been added to provide the best-guess
+incantation to use for static inline functions, if the C compiler supports
+C99-style static inline. If it doesn't, it'll give a plain C<static>.
 
-Maintainance releases of stable perl's will continue to make no intentionally
-incompatible changes.
+C<HAS_STATIC_INLINE> can be used to check if the compiler actually supports
+inline functions.
 
 =back
 
 =head1 Selected Bug Fixes
 
-XXX Important bug fixes in the core language are summarised here.
-Bug fixes in files in F<ext/> and F<lib/> are best summarised in
-L</Modules and Pragmata>.
-
-[ List each fix as a =item entry ]
-
 =over 4
 
 =item *
 
-Fixed possible memory leak when using L<caller()|perlfunc/"caller EXPR"> to set
-C<@DB::args>.
+A possible memory leak when using L<caller()|perlfunc/"caller EXPR"> to set
+C<@DB::args> has been fixed.
 
 =item *
 
 Several memory leaks when loading XS modules were fixed.
 
-=back
+=item *
 
-=head1 Known Problems
+A panic in the regular expression optimizer has been fixed (RT#75762).
 
-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, unless
-they were specific to a particular platform (see below).
+=item *
 
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+Assignments to lvalue subroutines now honor copy-on-write behavior again, which
+has been broken since version 5.10.0 (RT#75656).
 
-[ List each fix as a =item entry ]
+=item *
 
-=over 4
+Assignments to glob copies now behave just like assignments to regular globs
+(RT#1804).
+
+=item *
+
+Within signal handlers, C<$!> is now implicitly localized.
+
+=item *
+
+L<readline|perlfunc/"readline EXPR"> now honors C<< <> >> overloading on tied
+arguments.
 
 =item *
 
-XXX
+L<substr()|perlfunc/"substr EXPR,OFFSET,LENGTH,REPLACEMENT">,
+L<pos()|perlfunc/"index STR,SUBSTR,POSITION">, L<keys()|perlfunc/"keys HASH">,
+and L<vec()|perlfunc/"vec EXPR,OFFSET,BITS"> could, when used in combination
+with lvalues, result in leaking the scalar value they operate on, and cause its
+destruction to happen too late. This has now been fixed.
+
+=item *
+
+Building with C<PERL_GLOBAL_STRUCT>, which has been broken accidentally in
+5.13.3, now works again.
 
 =back
 
-=head1 Obituary
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+The changes in L<substr()|perlfunc/"substr EXPR,OFFSET,LENGTH,REPLACEMENT">
+broke C<HTML::Parser> <= 3.66. A fixed C<HTML::Parser> is available as version
+3.67 on CPAN.
+
+=item *
+
+The changes in prototype handling break C<Switch>. A patch has been sent
+upstream and will hopefully appear on CPAN soon.
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+=back
 
 =head1 Acknowledgements
 
-XXX The list of people to thank goes here.
+Perl 5.13.4 represents approximately one month of development since Perl 5.13.3,
+and contains 91,200 lines of changes across 436 files from 34 authors and
+committers.
+
+Thank you to the following for contributing to this release:
+
+Abigail, Andy Armstrong, Andy Dougherty, Chas. Owens, Chip Salzenberg, Chris
+'BinGOs' Williams, Craig A. Berry, David Cantrell, David Golden, David Mitchell,
+Eric Brine, Father Chrysostomos, Florian Ragwitz, George Greer, Gerard Goossen,
+H.Merijn Brand, James Mastros, Jan Dubois, Jerry D. Hedden, Joshua ben Jore,
+Karl Williamson, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯, Leon Brocard, Lubomir Rintel, Nicholas
+Clark, Paul Marquess, Rafael Garcia-Suarez, Reini Urban, Robin Barker, Slaven
+Rezic, Steve Peters, Tony Cook, Wolfram Humann, Zefram
 
 =head1 Reporting Bugs
 
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ .  There may also be
-information at http://www.perl.org/ , the Perl Home Page.
+If you find what you think is a bug, you might check the articles recently
+posted to the comp.lang.perl.misc newsgroup and the perl bug database at
+http://rt.perl.org/perlbug/ .  There may also be information at
+http://www.perl.org/ , the Perl Home Page.
 
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release.  Be sure to trim your bug down
-to a tiny but sufficient test case.  Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug@perl.org to be
-analysed by the Perl porting team.
+If you believe you have an unreported bug, please run the B<perlbug> program
+included with your release.  Be sure to trim your bug down to a tiny but
+sufficient test case.  Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
 
 If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
+inappropriate to send to a publicly archived mailing list, then please send it
+to perl5-security-report@perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able to
+help assess the impact of issues, figure out a resolution, and help co-ordinate
+the release of patches to mitigate or fix the problem across all platforms on
+which Perl is supported. Please only use this address for security issues in the
+Perl core, not for modules independently distributed on CPAN.
 
 =head1 SEE ALSO