This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 0.71
[perl5.git] / pod / perldelta.pod
index b9c5cb0..535ded9 100644 (file)
@@ -1,24 +1,20 @@
 =encoding utf8
 
-=for comment
-This has been completed up to dbe92b04c, except for 1b9f127-fad448f, which
-Karl Williamson says he will do.
-
 =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.8
+perldelta - what is new for perl v5.13.9
 
 =head1 DESCRIPTION
 
 This document describes differences between the 5.13.8 release and
-the 5.13.7 release.
+the 5.13.9 release.
 
-If you are upgrading from an earlier release such as 5.13.6, first read
-L<perl5137delta>, which describes differences between 5.13.6 and
-5.13.7.
+If you are upgrading from an earlier release such as 5.13.7, first read
+L<perl5138delta>, which describes differences between 5.13.7 and
+5.13.8.
 
 =head1 Notice
 
@@ -32,31 +28,43 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 C<-d:-foo> calls C<Devel::foo::unimport>
-
-The syntax C<-dI<B<:>foo>> was extended in 5.6.1 to make C<-dI<:fooB<=bar>>>
-equivalent to C<-MDevel::foo=bar>, which expands
-internally to C<use Devel::foo 'bar';>.
-F<perl> now allows prefixing the module name with C<->, with the same
-semantics as C<-M>, I<i.e.>
-
-=over 4
-
-=item C<-d:-foo>
-
-Equivalent to C<-M-Devel::foo>, expands to
-C<no Devel::foo;>, calls C<< Devel::foo->unimport() >>
-if the method exists.
+=head2 New regular expression modifier C</a>
+
+The C</a> regular expression modifier restricts C<\s> to match precisely
+the five characters C<[ \f\n\r\t]>, C<\d> to match precisely the 10
+characters C<[0-9]>, C<\w> to match precisely the 63 characters
+C<[A-Za-z0-9_]>, and the Posix (C<[[:posix:]]>) character classes to
+match only the appropriate ASCII characters.  The complements, of
+course, match everything but; and C<\b> and C<\B> are correspondingly
+affected.  Otherwise, C</a> behaves like the C</u> modifier, in that
+case-insensitive matching uses Unicode semantics; for example, "k" will
+match the Unicode C<\N{KELVIN SIGN}> under C</i> matching, and code
+points in the Latin1 range, above ASCII will have Unicode semantics when
+it comes to case-insensitive matching.  Like its cousins (C</u>, C</l>,
+and C</d>), and in spite of the terminology, C</a> in 5.14 will not
+actually be able to be used as a suffix at the end of a regular
+expression (this restriction is planned to be lifted in 5.16).  It must
+occur either as an infix modifier, such as C<(?a:...)> or (C<(?a)...>,
+or it can be turned on within the lexical scope of C<use re '/a'>.
+Turning on C</a> turns off the other "character set" modifiers.
+
+=head2 Any unsigned value can be encoded as a character
+
+With this release, Perl is adopting a model that any unsigned value can
+be treated as a code point and encoded internally (as utf8) without
+warnings -- not just the code points that are legal in Unicode.
+However, unless utf8 warnings have been
+explicitly lexically turned off, outputting or performing a
+Unicode-defined operation (such as upper-casing) on such a code point
+will generate a warning.  Attempting to input these using strict rules
+(such as with the C<:encoding('UTF-8')> layer) will continue to fail.
+Prior to this release the handling was very inconsistent, and incorrect
+in places.  Also, the Unicode non-characters, some of which previously were
+erroneously considered illegal in places by Perl, contrary to the Unicode
+standard, are now always legal internally.  But inputting or outputting
+them will work the same as for the non-legal Unicode code points, as the
+Unicode standard says they are illegal for "open interchange".
 
-=item C<-d:-foo=bar>
-
-Equivalent to C<-M-Devel::foo=bar>, expands to C<no Devel::foo 'bar';>,
-calls C<< Devel::foo->unimport('bar') >> if the method exists.
-
-=back
-
-This is particularly useful to suppresses the default actions of a
-C<Devel::*> module's C<import> method whilst still loading it for debugging.
 
 =head1 Security
 
@@ -68,20 +76,12 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
-=head2 Attempting to use C<:=> as an empty attribute list is now a syntax error
-
-Previously C<my $pi := 4;> was exactly equivalent to C<my $pi : = 4;>,
-with the C<:> being treated as the start of an attribute list, ending before
-the C<=>. The use of C<:=> to mean C<: => was deprecated in 5.12.0, and is now
-a syntax error. This will allow the future use of C<:=> as a new token.
+XXX For a release on a stable branch, this section aspires to be:
 
-We find no Perl 5 code on CPAN using this construction, outside the core's
-tests for it, so we believe that this change will have very little impact on
-real-world codebases.
+    There are no changes intentionally incompatible with 5.XXX.XXX. If any
+    exist, they are bugs and reports are welcome.
 
-If it is absolutely necessary to have empty attribute lists (for example,
-because of a code generator) then avoid the error by adding a space before
-the C<=>.
+[ List each incompatible change as a =head2 entry ]
 
 =head1 Deprecations
 
@@ -91,20 +91,6 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=head2 C<?PATTERN?> is deprecated
-
-C<?PATTERN?> (without the initial m) has been deprecated and now produces
-a warning.
-
-=head2 C<sv_compile_2op> is now deprecated
-
-The C<sv_compile_2op> is now deprecated, and will be removed. Searches suggest
-that nothing on CPAN is using it, so this should have zero impact.
-
-It attempted to provide an API to compile code down to an optree, but failed
-to bind correctly to lexicals in the enclosing scope. It's not possible to
-fix this problem within the constraints of its parameters and return value.
-
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -138,7 +124,35 @@ cribbed.
 
 =item *
 
-XXX
+L<CPAN::Meta::YAML> 0.002 has been added as a dual-life module.  It supports a
+subset of YAML sufficient for reading and writing META.yml and MYMETA.yml files
+included with CPAN distributions or generated by the module installation
+toolchain. It should not be used for any other general YAML parsing or
+generation task.
+
+=item *
+
+L<HTTP::Tiny> 0.009 has been added as a dual-life module.  It is a very
+small, simple HTTP/1.1 client designed for simple GET requests and file
+mirroring.  It has has been added to enable CPAN.pm and CPANPLUS to
+"bootstrap" HTTP access to CPAN using pure Perl without relying on external
+binaries like F<curl> or F<wget>.
+
+=item *
+
+L<Module::Metadata> 1.000003 has been added as a dual-life module.  It gathers
+package and POD information from Perl module files.  It is a standalone module
+based on Module::Build::ModuleInfo for use by other module installation
+toolchain components.  Module::Build::ModuleInfo has been deprecated in
+favor of this module instead.
+
+=item *
+
+L<Perl::OSType> 1.002 has been added as a dual-life module.  It maps Perl
+operating system names (e.g. 'dragonfly' or 'MSWin32') to more generic types
+with standardized names (e.g.  "Unix" or "Windows").  It has been refactored
+out of Module::Build and ExtUtils::CBuilder and consolidates such mappings into
+a single location for easier maintenance.
 
 =back
 
@@ -148,59 +162,105 @@ XXX
 
 =item *
 
-C<IPC::Cmd> has been upgraded from 0.64 to 0.66
+C<Archive::Extract> has been upgraded from version 0.46 to 0.48
+
+=item *
+
+C<Archive::Tar> has been upgraded from version 1.74 to 1.76
+
+=item *
+
+C<CGI> has been upgraded from version 3.50 to 3.51
+
+=item *
+
+C<Compress::Raw::Bzip2> has been upgraded from version 2.031 to 2.033
+
+=item *
+
+C<Compress::Raw::Zlib> has been upgraded from version 2.030 to 2.033
+
+=item *
+
+C<CPAN> has been upgraded from version 1.94_62 to 1.94_63
+
+=item *
+
+C<CPANPLUS> has been upgraded from version 0.9010 to 0.9011
+
+=item *
+
+C<CPANPLUS::Dist::Build> has been upgraded from version 0.50 to 0.52
+
+=item *
 
-Resolves an issue with splitting Win32 command lines
-and documentation enhancements.
+C<DB_File> has been upgraded from version 1.820 to 1.821
 
 =item *
 
-C<Memoize> has been upgraded from version 1.01_03 to 1.02.
+C<Encode> has been upgraded from version 2.40 to 2.42.
+Now, all 66 Unicode non-characters are treated the same way U+FFFF has
+always been treated; if it was disallowed, all 66 are disallowed; if it
+warned, all 66 warn.
 
 =item *
 
-C<MIME::Base64> has been upgraded from 3.10 to 3.13
+C<File::Fetch> has been upgraded from version 0.28 to 0.32
+
+=item *
 
-Now provides encode_base64url and decode_base64url functions to process
-the base64 scheme for "URL applications".
+C<IO::Compress> has been upgraded from version 2.030 to 2.033
 
 =item *
 
-C<overload> has been upgraded from 1.11 to 1.12.
+C<IPC::Cmd> has been upgraded from version 0.66 to 0.68
 
 =item *
 
-C<PerlIO::scalar> has been upgraded from 0.10 to 0.11.
+C<Log::Message> has been upgraded from version 0.02 to 0.04
 
-A C<read> after a C<seek> beyond the end of the string no longer thinks it
-has data to read
-L<[perl #78716]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78716>.
+=item *
+
+C<Module::Load::Conditional> has been upgraded from version 0.38 to 0.40
 
 =item *
 
-C<re> has been upgraded from 0.14 to 0.15.
+C<Object::Accessor> has been upgraded from version 0.36 to 0.38
 
 =item *
 
-C<Socket> has been upgraded from 1.91 to 1.92.
+C<Params::Check> has been upgraded from version 0.26 to 0.28
+
+=item *
 
-It has several new functions for handling IPv6 addresses.
+C<Pod::LaTeX> has been upgraded from version 0.58 to 0.59
 
 =item *
 
-C<Time::HiRes> has been upgraded from 1.9721 to 1.9721_01.
+C<Term::UI> has been upgraded from version 0.20 to 0.24
 
 =item *
 
-C<Unicode::Collate> has been upgraded from 0.67 to 0.68
+C<threads> has been upgraded from version 1.81_03 to 1.82
 
 =item *
 
-C<Unicode::UCD> has been upgraded from 0.29 to 0.30.
+C<threads::shared> has been upgraded from version 1.35 to 1.36
 
 =item *
 
-C<version> has been upgraded from 0.82 to 0.86.
+C<Time::Local> has been upgraded from version 1.1901_01 to 1.2000.
+
+=item *
+
+C<Unicode::Collate> has been upgraded from version 0.68 to 0.71
+
+This also sees the switch from using the pure-perl version of this
+module to the XS version.
+
+=item *
+
+C<Unicode::Normalize> has been upgraded from version 1.07 to 1.10
 
 =back
 
@@ -393,7 +453,38 @@ be noted as well.
 
 =item *
 
-XXX
+The opcode bodies for C<chop> and C<chomp> and for C<schop> and C<schomp> have
+been merged. The implementation functions C<Perl_do_chop()> and
+C<Perl_do_chomp()>, never part of the public API, have been merged and moved to
+a static function in F<pp.c>. This shrinks the perl binary slightly, and should
+not affect any code outside the core (unless it is relying on the order of side
+effects when C<chomp> is passed a I<list> of values).
+
+=item *
+
+Some of the flags parameters to the uvuni_to_utf8_flags() and
+utf8n_to_uvuni() have changed.  This is a result of Perl now allowing
+internal storage and manipulation of code points that are problematic
+in some situations.  Hence, the default actions for these functions has
+been complemented to allow these code points.  The new flags are
+documented in L<perlapi>.  Code that requires the problematic code
+points to be rejected needs to change to use these flags.  Some flag
+names are retained for backward source compatibility, though they do
+nothing, as they are now the default.  However the flags
+C<UNICODE_ALLOW_FDD0>, C<UNICODE_ALLOW_FFFF>, C<UNICODE_ILLEGAL>, and
+C<UNICODE_IS_ILLEGAL> have been removed, as they stem from a
+fundamentally broken model of how the Unicode non-character code points
+should be handled, which is now described in
+L<perlunicode/Non-character code points>.  See also L</Selected Bug Fixes>.
+
+=item *
+
+Certain shared flags in the C<pmop.op_pmflags> and C<regexp.extflags>
+structures have been removed.  These are: C<Rxf_Pmf_LOCALE>,
+C<Rxf_Pmf_UNICODE>, and C<PMf_LOCALE>.  Instead there are encodes and
+three static in-line functions for accessing the information:
+C<get_regex_charset()>, C<set_regex_charset()>, and C<get_regex_charset_name()>,
+which are defined in the places where the orginal flags were.
 
 =back
 
@@ -409,52 +500,16 @@ L</Modules and Pragmata>.
 
 =item *
 
-C<BEGIN {require 5.12.0}> now behaves as documented, rather than behaving
-identically to C<use 5.12.0;>. Previously, C<require> in a C<BEGIN> block
-was erroneously executing the C<use feature ':5.12.0'> and
-C<use strict; use warnings;> behaviour, which only C<use> was documented to
-provide
-L<[perl #69050]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=69050>.
-
-=item *
-
-C<use 5.42>
-L<[perl #69050]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=69050>,
-C<use 6> and C<no 5> no longer leak memory.
-
-=item *
-
-C<eval "BEGIN{die}"> no longer leaks memory on non-threaded builds.
-
-=item *
-
-PerlIO no longer crashes when called recursively, e.g., from a signal
-handler. Now it just leaks memory
-L<[perl #75556]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75556>.
-
-=item *
-
-Defining a constant with the same name as one of perl's special blocks
-(e.g., INIT) stopped working in 5.12.0, but has now been fixed
-L<[perl #78634]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78634>.
-
-=item *
-
-A reference to a literal value used as a hash key (C<$hash{\"foo"}>) used
-to be stringified, even if the hash was tied
-L<[perl #79178]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=79178>.
-
-=item *
-
-A number of bugs with regular expression bracketed character classes
-have been fixed, mostly having to do with matching characters in the
-non-ASCII Latin-1 range.
-
-=item *
-
-A closure containing an C<if> statement followed by a constant or variable
-is no longer treated as a constant
-L<[perl #63540]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=63540>.
+The handling of Unicode non-characters has changed.
+Previously they were mostly considered illegal, except that only one of
+the 66 of them was known about in places.  The Unicode standard
+considers them legal, but forbids the "open interchange" of them.
+This is part of the change to allow the internal use of any code point
+(see L</Core Enhancements>).  Together, these changes resolve
+L<# 38722|https://rt.perl.org/rt3/Ticket/Display.html?id=38722>,
+L<# 51918|http://rt.perl.org/rt3/Ticket/Display.html?id=51918>,
+L<# 51936|http://rt.perl.org/rt3/Ticket/Display.html?id=51936>,
+L<# 63446|http://rt.perl.org/rt3/Ticket/Display.html?id=63446>
 
 =back