This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Point submitters to perlbug@perl.org, not perl5-porters@perl.org
[perl5.git] / pod / perl5112delta.pod
index b2a6522..c53a622 100644 (file)
@@ -1,54 +1,69 @@
 =head1 NAME
 
-[ Any text flagged as XXX needs to be processed before release. ]
-
-perldelta - what is new for perl v5.11.2
+perl5112delta - what is new for perl v5.11.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.11.1 release and
-the 5.11.2 release.
-
-=head1 Notice
-
-XXX Unlikely to need this section.
-
-=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 reports are welcome.
-
+This document describes differences between the 5.11.1 release and the
+5.11.2 release.
 
 =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.
-
-=head1 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.
+=head2 qr overloading
+
+It is now possible to overload the C<qr//> operator, that is,
+conversion to regexp, like it was already possible to overload
+conversion to boolean, string or number of objects. It is invoked when
+an object appears on the right hand side of the C<=~> operator, or when
+it is interpolated into a regexp. See L<overload>.
+
+=head2 Pluggable keywords
+
+Extension modules can now cleanly hook into the Perl parser to define
+new kinds of keyword-headed expression and compound statement. The
+syntax following the keyword is defined entirely by the extension. This
+allow a completely non-Perl sublanguage to be parsed inline, with the
+right ops cleanly generated. This feature is currently considered
+experimental.
+
+See L<perlapi/PL_keyword_plugin> for the mechanism. The Perl core
+source distribution also includes a new module
+L<XS::APItest::KeywordRPN>, which implements reverse Polish notation
+arithmetic via pluggable keywords. This module is mainly used for test
+purposes, and is not normally installed, but also serves as an example
+of how to use the new mechanism.
+
+=head2 APIs for more internals
+
+The lowest layers of the lexer and parts of the pad system now have C
+APIs available to XS extensions. These are necessary to support proper
+use of pluggable keywords, but have other uses too. The new APIs are
+experimental, and only cover a small proportion of what would be
+necessary to take full advantage of the core's facilities in these
+areas. It is intended that the Perl 5.13 development cycle will see the
+addition of a full range of clean, supported interfaces.
+
+=head2 Overridable function lookup
+
+Where an extension module hooks the creation of rv2cv ops to modify the
+subroutine lookup process, this now works correctly for bareword
+subroutine calls. This means that prototypes on subroutines referenced
+this way will be processed correctly. (Previously bareword subroutine
+names were initially looked up, for parsing purposes, by an unhookable
+mechanism, so extensions could only properly influence subroutine names
+that appeared with an C<&> sigil.)
 
 =head1 Modules and Pragmata
 
-XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
-go here, in a list ordered by distribution name. Minimally it should be the
-module version, but it's more useful to the end user to give a paragraph's
-summary of the module's changes. In an ideal world, dual-life modules would
-have a F<Changes> file that could be cribbed.
-
 =head2 New Modules and Pragmata
 
 =over 4
 
-=item C<XXX>
+=item C<legacy>
 
-XXX
+Preserves legacy behaviors or enable new non-default behaviors.
+Currently the only behaviour concerns semantics for the 128 characters
+on ASCII systems that have the 8th bit set.
 
 =back
 
@@ -56,9 +71,13 @@ XXX
 
 =over 4
 
-=item C<XXX>
+=item C<diagnostics>
+
+Supports %.0f formatting internally.
+
+=item C<overload>
 
-XXX
+Allow overloading of 'qr'.
 
 =back
 
@@ -66,102 +85,145 @@ XXX
 
 =over 4
 
-=item C<XXX>
+=item C<B::Concise>
 
-XXX
+Optimize reversing an array in-place, avoid using defined %hash in core
+code and tests.
 
-=back
+=item C<B::Deparse>
 
-=head1 Utility Changes
+Teach B::Deparse about in-place reverse.
 
-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>.
+=item C<Carp>
 
-=over 4
+Refine Carp caller() fix and add tests.
 
-=item F<XXX>
+=item C<Compress::Zlib>
 
-XXX
+Updated to 2.022.
 
-=back
+=item C<CPANPLUS>
 
-=head1 New Documentation
+Updated to 0.89_09.
 
-XXX Changes which create B<new> files in F<pod/> go here.
+=item C<Encode>
 
-=over 4
+Updated to 2.38.
 
-=item L<XXX>
+=item C<ExtUtils::CBuilder>
 
-XXX
+Updated to 0.27.
 
-=back
+=item C<Env>
 
-=head1 Changes to Existing Documentation
+Add EXISTS and DELETE methods to Env.pm.
 
-XXX Changes which significantly change existing files in F<pod/> go here.
-Any changes to F<pod/perldiag.pod> should go in L</New or Changed Diagnostics>.
+=item C<File::Fetch>
 
+Updated to 0.22.
 
-=head1 Performance Enhancements
+=item C<I8N::Langinfo>
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+Correctly document export of I18N::Langinfo.
 
-=over 4
+=item C<I8N::LangTags>
 
-=item *
+In I18N::LangTags::Detect, avoid using defined @array and defined
+%hash.
 
-XXX
+=item C<IO::Compress>
 
-=back
+Updated to 2.022.
 
-=head1 Installation and Configuration Improvements
+=item C<IPC::Cmd>
 
-XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
-go here.
+Updated to 0.54.
 
-=head2 Configuration improvements
+=item C<List::Util>
 
-XXX
+Updated to 1.22.
 
-=head2 Compilation improvements
+=item C<Locale::Maketext>
 
-XXX
+In Locale::Maketext, avoid using defined @array and defined %hash.
+Convert the odd Locale::Maketext test out from Test to Test::More.
 
-=head2 Platform Specific Changes
+=item C<Module::Build>
 
-=over 4
+Updated to 0.35_08.
 
-=item XXX-some-platform
+=item C<Module::CoreList>
 
-XXX
+Implemented is_deprecated().
+
+=item C<Pod::Simple>
+
+Updated to 3.10.
+
+=item C<Scalar::Util>
+
+Updated to 1.22.
+
+=item C<Switch>
+
+Updated to 2.16.
 
 =back
 
-=head1 Selected Bug Fixes
+=head1 Utility Changes
 
-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>.
+=over 4
+
+=item F<a2p>
+
+Fixed bugs with the match() operator in list context, remove mention of
+$[.
+
+=back
+
+=head1 Performance Enhancements
 
 =over 4
 
 =item *
 
-XXX
+Reversing an array to itself (as in C<@a = reverse @a>) in void context
+now happens in-place and is several orders of magnitude faster than it
+used to be. It will also preserve non-existent elements whenever
+possible, i.e. for non magical arrays or tied arrays with C<EXISTS> and
+C<DELETE> methods.
 
 =back
 
 =head1 New or Changed Diagnostics
 
-XXX New or changed warnings emitted by the core's C<C> code go here.
+Several new diagnostics, see L<perldiag> for details.
 
 =over 4
 
-=item C<XXX>
+=item C<Bad plugin affecting keyword '%s'>
+
+=item C<gmtime(%.0f) too large>
 
-XXX
+=item C<Lexing code attempted to stuff non-Latin-1 character into Latin-1 input>
+
+=item C<Lexing code internal error (%s)>
+
+=item C<localtime(%.0f) too large>
+
+=item C<Overloaded dereference did not return a reference>
+
+=item C<Overloaded qr did not return a REGEXP>
+
+=item C<Perl_pmflag() is deprecated, and will be removed from the XS API>
+
+=back
+
+One diagnostic has been removed:
+
+=over 4
+
+=item C<Runaway format>
 
 =back
 
@@ -171,102 +233,111 @@ XXX
 
 =item *
 
-C<Perl_pmflag> has been removed from the public API. Calling it now generates
-a deprecation warning, and it will be removed in a future release. Although
-listed as part of the API, it was never documented, and only ever used in
-F<toke.c>, and prior to 5.10, F<regcomp.c>. In core, it has been replaced by a
-static function.
+C<Perl_pmflag> has been removed from the public API. Calling it now
+generates a deprecation warning, and it will be removed in a future
+release. Although listed as part of the API, it was never documented,
+and only ever used in F<toke.c>, and prior to 5.10, F<regcomp.c>. In
+core, it has been replaced by a static function.
 
 =back
 
 =head1 New Tests
 
-XXX Changes which create B<new> files in F<t/> go here. Changes to
-existing files in F<t/> aren't worth summarising, although the bugs that
-they represent may be.
-
 =over 4
 
-=item F<XXX>
+=item F<t/op/while_readdir.t>
 
-XXX
+Test that a bare readdir in while loop sets $_.
 
 =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, unless
-they were specific to a particular platform (see below).
-
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.10.1 or 5.11.1.
-
 =over 4
 
-=item *
+=item Known test failures on VMS
 
-XXX
+Perl 5.11.2 fails a small set of core and CPAN tests as of this
+release. With luck, that'll be sorted out for 5.11.3.
 
 =back
 
 =head1 Deprecations
 
-XXX Add any new known deprecations here.
-
 The following items are now deprecated.
 
-=over 4
+=head2 Use of C<:=> to mean an empty attribute list is now deprecated.
 
-=item *
+An accident of Perl's parser meant that these constructions were all
+equivalent:
 
-XXX
+    my $pi := 4;
+    my $pi : = 4;
+    my $pi :  = 4;
 
-=back
-
-=head1 Platform Specific Notes
+with the C<:> being treated as the start of an attribute list, which
+ends before the C<=>. As whitespace is not significant here, all are
+parsed as an empty attribute list, hence all the above are equivalent
+to, and better written as
 
-XXX Any changes specific to a particular platform. VMS and Win32 are the usual
-stars here. It's probably best to group changes under the same section layout
-as the main perldelta
+    my $pi = 4;
 
-=head1 Obituary
+because no attribute processing is done for an empty list.
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+As is, this meant that C<:=> cannot be used as a new token, without
+silently changing the meaning of existing code. Hence that particular
+form is now deprecated, and will become a syntax error. If it is
+absolutely necessary to have empty attribute lists (for example,
+because of a code generator) then avoid the warning by adding a space
+before the C<=>.
 
 =head1 Acknowledgements
 
-XXX The list of people to thank goes here.
+Perl 5.11.2 represents approximately 3 weeks development since Perl
+5.11.1 and contains 29,992 lines of changes across 458 files from 38
+authors and committers:
+
+Abhijit Menon-Sen, Abigail, Ben Morrow, Bo Borgerson, Brad Gilbert,
+Bram, Chris Williams, Craig A. Berry, Daniel Frederick Crisman, Dave
+Rolsky, David E. Wheeler, David Golden, Eric Brine, Father
+Chrysostomos, Frank Wiegand, Gerard Goossen, Gisle Aas, Graham Barr,
+Harmen, H.Merijn Brand, Jan Dubois, Jerry D. Hedden, Jesse Vincent,
+Karl Williamson, Kevin Ryde, Leon Brocard, Nicholas Clark, Paul
+Marquess, Philippe Bruhat, Rafael Garcia-Suarez, Sisyphus, Steffen
+Mueller, Steve Hay, Steve Peters, Vincent Pit, Yuval Kogman, Yves
+Orton, and Zefram.
 
+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.
 
 =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.
+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.
+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
 
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
+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.