This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for goto ""
[perl5.git] / pod / perldelta.pod
index 8d545d0..8ed60e0 100644 (file)
@@ -1,25 +1,20 @@
 =encoding utf8
 
-=for comment
-This has been completed up to 0aae26c14, except for:
-803e389        rurban  CYG17 utf8 paths
-d9298c1        rurban  mymalloc isn't thread safe
-
 =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.15.8
+perldelta - what is new for perl v5.17.0
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.7 release and
-the 5.15.8 release.
+This document describes differences between the 5.16.0 release and
+the 5.17.0 release.
 
-If you are upgrading from an earlier release such as 5.15.6, first read
-L<perl5157delta>, which describes differences between 5.15.6 and
-5.15.7.
+If you are upgrading from an earlier release such as 5.16.0, first read
+L<perl5160delta>, which describes differences between 5.15.0 and
+5.16.0.
 
 =head1 Notice
 
@@ -33,126 +28,6 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Improved ability to mix locales and Unicode, including UTF-8 locales
-
-An optional parameter has been added to C<use locale>
-
- use locale ':not_characters';
-
-which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
-portions of the current locale.  Instead, the character set is assumed
-to be Unicode.  This allows locales and Unicode to be seamlessly mixed,
-including the increasingly frequent UTF-8 locales.  When using this
-hybrid form of locales, the C<:locale> layer to the L<open> pragma can
-be used to interface with the file system, and there are CPAN modules
-available for ARGV and environment variable conversions.
-
-Full details are in L<perllocale>.
-
-=head2 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
-
-Unicode foldcase is an extension to lowercase that gives better results
-when comparing two strings case-insensitively.  It has long been used
-internally in regular expression C</i> matching.  Now it is available
-explicitly through the new C<fc> function call (enabled by
-S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
-C<CORE::fc>) or through the new C<\F> sequence in double-quotish
-strings.
-
-Full details are in L<perlfunc/fc>.
-
-=head2 C<_> in subroutine prototypes
-
-The C<_> character in subroutine prototypes is now allowed before C<@> or
-C<%>.
-
-=head2 Supports (I<almost>) Unicode 6.1
-
-Besides the addition of whole new scripts, and new characters in
-existing scripts, this new version of Unicode, as always, makes some
-changes to existing characters.  One change that may trip up some
-applications is that the General Category of two characters in the
-Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from
-Other_Symbol to Other_Punctuation.  The same change has been made for
-a character in each of Tibetan, Ethiopic, and Aegean.
-The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE
-through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General
-Category changed from Other_Symbol to Other_Numeric.  The Line Break
-property has changes for Hebrew and Japanese; and as a consequence of
-other changes in 6.1, the Perl regular expression construct C<\X> now
-works differently for some characters in Thai and Lao.
-
-New aliases (synonyms) have been defined for many property values;
-these, along with the previously existing ones, are all cross indexed in
-L<perluniprops>.
-
-The return value of C<charnames::viacode()> is affected by other
-changes:
-
- Code point      Old Name             New Name
-   U+000A    LINE FEED (LF)        LINE FEED
-   U+000C    FORM FEED (FF)        FORM FEED
-   U+000D    CARRIAGE RETURN (CR)  CARRIAGE RETURN
-   U+0085    NEXT LINE (NEL)       NEXT LINE
-   U+008E    SINGLE-SHIFT 2        SINGLE-SHIFT-2
-   U+008F    SINGLE-SHIFT 3        SINGLE-SHIFT-3
-   U+0091    PRIVATE USE 1         PRIVATE USE-1
-   U+0092    PRIVATE USE 2         PRIVATE USE-2
-   U+2118    SCRIPT CAPITAL P      WEIERSTRASS ELLIPTIC FUNCTION
-
-Perl will accept any of these names as input, but
-C<charnames::viacode()> now returns the new name of each pair.  The
-change for U+2118 is considered by Unicode to be a correction, that is
-the original name was a mistake (but again, it will remain forever valid
-to use it to refer to U+2118).  But most of these changes are the
-fallout of the mistake Unicode 6.0 made in naming a character used in
-Japanese cell phones to be "BELL", which conflicts with the long
-standing industry use of (and Unicode's recommendation to use) that name
-to mean the ASCII control character at U+0007.  As a result, that name
-has been deprecated in Perl since v5.14; and any use of it will raise a
-warning message (unless turned off).  The name "ALERT" is now the
-preferred name for this code point, with "BEL" being an acceptable short
-form.  The name for the new cell phone character, at code point U+1F514,
-remains undefined in this version of Perl (hence we don't quite
-implement all of Unicode 6.1), but starting in v5.18, BELL will mean
-this character, and not U+0007.
-
-Unicode has taken steps to make sure that this sort of mistake does not
-happen again.  The Standard now includes all the generally accepted
-names and abbreviations for control characters, whereas previously it
-didn't (though there were recommended names for most of them, which Perl
-used).  This means that most of those recommended names are now
-officially in the Standard.  Unicode did not recommend names for the
-four code points listed above between U+008E and U+008F, and in
-standardizing them Unicode subtly changed the names that Perl had
-previously given them, by replacing the final blank in each name by a
-hyphen.  Unicode also officially accepts names that Perl had deprecated,
-such as FILE SEPARATOR.  Now the only deprecated name is BELL.
-Finally, Perl now uses the new official names instead of the old
-(now considered obsolete) names for the first four code points in the
-list above (the ones which have the parentheses in them).
-
-Now that the names have been placed in the Unicode standard, these kinds
-of changes should not happen again, though corrections, such as to
-U+2118, are still possible.
-
-Unicode also added some name abbreviations, which Perl now accepts:
-SP for SPACE;
-TAB for CHARACTER TABULATION;
-NEW LINE, END OF LINE, NL, and EOL for LINE FEED;
-LOCKING-SHIFT ONE for SHIFT OUT;
-LOCKING-SHIFT ZERO for SHIFT IN;
-and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.
-
-More details on this version of Unicode are provided in
-L<http://www.unicode.org/versions/Unicode6.1.0/>.
-
-=head2 Added C<is_utf8_char_buf()>
-
-This function is designed to replace the deprecated L</is_utf8_char()>
-function.  It includes an extra parameter to make sure it doesn't read
-past the end of the input buffer.
-
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -161,13 +36,6 @@ L</Selected Bug Fixes> section.
 
 [ List each security issue as a =head2 entry ]
 
-=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
-
-The latter function is now deprecated because its API is insufficient to
-guarantee that it doesn't read (up to 12 bytes in the worst case) beyond
-the end of its input string.  See
-L<is_utf8_char_buf()|/Added is_utf8_char_buf()>.
-
 =head1 Incompatible Changes
 
 XXX For a release on a stable branch, this section aspires to be:
@@ -178,62 +46,6 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 Special blocks called in void context
-
-Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
-called in void context.  This avoids wasteful copying of the result of the
-last statement [perl #108794].
-
-=head2 The C<overloading> pragma and regexp objects
-
-With C<no overloading>, regular expression objects returned by C<qr//> are
-now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
-expression itself [perl #108780].
-
-=head2 Two XS typemap Entries removed
-
-Two presumably unused XS typemap entries have been removed from the
-core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
-a user of these, please see the instructions on how to regain them
-in L<perlxstypemap>.
-
-=head2 Unicode 6.1 has incompatibilities with Unicode 6.0
-
-These are detailed in L</Supports (almost) Unicode 6.1> above.
-
-=head2 Changed returns for some properties in C<Unicode::UCD::prop_invmap()>
-
-The return values for C<prop_invmap> have been changed for some
-properties to make the returned lists significantly smaller.  This
-allows those lists to be searched faster.
-
-This function was introduced earlier in the v5.15 series of releases,
-and the API will not be considered stable until v5.16.
-
-See L<Unicode::UCD/prop_invmap()> for details on the new interface.
-
-=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads
-
-The POSIX emulation of C<$$> and C<getppid()> under the obsolete
-LinuxThreads implementation has been removed (the C<$$> emulation was
-actually removed in v5.15.0). This only impacts users of Linux 2.4 and
-users of Debian GNU/kFreeBSD up to and including 6.0, not the vast
-majority of Linux installations that use NPTL threads.
-
-This means that C<getppid()> like C<$$> is now always guaranteed to
-return the OS's idea of the current state of the process, not perl's
-cached version of it.
-
-See the documentation for L<$$|perlvar/$$> for details.
-
-=head2 Which Non-ASCII characters get quoted by C<quotemeta> and C<\Q> has changed
-
-This is unlikely to result in a real problem, as Perl does not attach
-special meaning to any non-ASCII character, so it is currently
-irrelevant which are quoted or not.  This change fixes bug [perl #77654] and
-bring Perl's behavior more into line with Unicode's recommendations.
-See L<perlfunc/quotemeta>.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -242,12 +54,6 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=head2 C<is_utf8_char()>
-
-This function is deprecated because it could read beyond the end of the
-input string.  Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>
-instead.
-
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -281,8 +87,7 @@ cribbed.
 
 =item *
 
-The C<mmap> PerlIO layer is no longer implemented by perl itself, but has
-been moved out into the new L<PerlIO::mmap> module.
+XXX
 
 =back
 
@@ -292,144 +97,7 @@ been moved out into the new L<PerlIO::mmap> module.
 
 =item *
 
-L<arybase> has been upgraded from version 0.03 to version 0.04.
-
-List slices no longer modify items on the stack belonging to outer lists
-[perl #109570].
-
-=item *
-
-L<B> has been upgraded from version 1.33 to version 1.34.
-
-C<B::COP> now has a C<stashflags> method, corresponding to a new internal
-field added in 5.15.4 [perl #108860].
-
-=item *
-
-L<Carp> has been upgraded from version 1.24 to version 1.25.
-
-It now puts a dot after the file and line number, just like errors from
-C<die> [perl #106538].
-
-=item *
-
-L<Compress::Raw::Bzip2> has been upgraded from version 2.045 to version 2.048.
-
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.045 to version 2.048.
-
-=item *
-
-L<Compress::Zlib> has been upgraded from version 2.046 to version 2.048.
-
-=item *
-
-L<CPAN::Meta> has been upgraded from version 2.113640 to version 2.120351.
-
-Work around a memory leak bug involving version objects in boolean context.
-
-=item *
-
-L<CPAN::Meta::YAML> has been upgraded from version 0.005 to version 0.007.
-
-=item *
-
-L<CPANPLUS> has been upgraded from version 0.9116 to version 0.9118.
-
-=item *
-
-L<CPANPLUS::Dist::Build> has been upgraded from version 0.60 to version 0.62.
-
-=item *
-
-L<DB_File> has been upgraded from version 1.824 to version 1.826.
-
-=item *
-
-L<diagnostics> has been upgraded from version 1.27 to version 1.28.
-
-When searching for F<perldiag.pod>, it no longer uses paths that were only
-relevant on Perl 5.004 and earlier.
-
-=item *
-
-L<ExtUtils::ParseXS> has been upgraded from version 3.12 to version 3.15.
-
-The new version comes with important tools for sharing typemaps between
-different CPAN distributions.
-
-=item *
-
-L<File::Copy> has been upgraded from version 2.21 to version 2.23.
-
-It no longer emits warnings when copying files with newlines in their names
-[perl #109104].
-
-=item *
-
-L<IPC::Cmd> has been upgraded from version 0.72 to version 0.76.
-
-=item *
-
-L<Math::Complex> has been upgraded from version 1.58 to version 1.59.
-
-This avoids a new core warning.
-
-=item *
-
-L<Module::Metadata> has been upgraded from version 1.000007 to version 1.000009.
-
-Adds C<provides> method to generate a CPAN META provides data structure
-correctly; use of C<package_versions_from_directory> is discouraged.
-
-=item *
-
-L<Parse::CPAN::Meta> has been upgraded from version 1.4401 to version 1.4402.
-
-=item *
-
-L<perlfaq> has been upgraded from version 5.0150038 to version 5.0150039.
-
-=item *
-
-L<Pod::Functions> has been upgraded from version 1.04 to version 1.05.
-
-F<Functions.pm> is now generated at perl build time from annotations in
-F<perlfunc.pod>. This will ensure that L<Pod::Functions> and L<perlfunc>
-remain in synchronisation.
-
-=item *
-
-L<Pod::Parser> has been upgraded from version 1.37 to version 1.51.
-
-=item *
-
-L<Term::ReadLine> has been upgraded from version 1.07 to version 1.08.
-
-Its C<tkRunning> method now supports L<AnyEvent> event loops, and not just
-L<Tk>.  A more general mechanism has been proposed, so this may be reverted
-before Perl 5.16 [perl #108470].
-
-=item *
-
-L<Socket> has been upgraded from version 1.97 to version 1.98.
-
-=item *
-
-L<Time::HiRes>  has been upgraded from version 1.9724 to version 1.9725.
-
-C<Time::HiRes::stat()> no longer corrupts the Perl stack.
-
-=item *
-
-L<Unicode::UCD> has been upgraded from version 0.39 to 0.40.
-
-The only change is to fix a formatting error in the Pod.
-
-=item *
-
-L<Version::Requirements> has been upgraded from version 0.101021 to version 0.101022.
+L<XXX> has been upgraded from version 0.69 to version 0.70.
 
 =back
 
@@ -439,8 +107,7 @@ L<Version::Requirements> has been upgraded from version 0.101021 to version 0.10
 
 =item *
 
-F<t/porting/perlfunc.t> has been added, to test that changes to
-F<pod/perlfunc.pod> do not inadvertently break the build of L<Pod::Functions>.
+XXX
 
 =back
 
@@ -453,12 +120,6 @@ file and be sure to link to the appropriate page, e.g. L<perlfunc>.
 
 XXX Changes which create B<new> files in F<pod/> go here.
 
-=head3 L<perlxstypemap>
-
-The new manual describes the XS typemapping mechanism in unprecedented
-detail and combines new documentation with information extracted from
-L<perlxs> and the previously unofficial list of all core typemaps.
-
 =head3 L<XXX>
 
 XXX Description of the purpose of the new file here
@@ -584,11 +245,6 @@ that they represent may be covered elsewhere.
 
 XXX
 
-=item *
-
-The test suite for typemaps has been extended to cover a larger fraction of
-the core typemaps.
-
 =back
 
 =head1 Platform Support
@@ -668,102 +324,8 @@ L</Modules and Pragmata>.
 
 =item *
 
-C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
-by an overloaded object on the left-hand side.
-
-=item *
-
-C<stat _> no longer warns about unopened filehandles [perl #71002].
-
-=item *
-
-C<stat> on an unopened filehandle now warns consistently, instead of
-skipping the warning at times.
-
-=item *
-
-A change in an earlier 5.15 release caused warning hints to propagate into
-C<do $file>.  This has been fixed [rt.cpan.org #72767].
-
-=item *
-
-Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
-after assigning C<${ qr// }> to a hash element and locking it with
-L<Hash::Util>.  This could result in double frees, crashes or erratic
-behaviour.
-
-=item *
-
-In 5.15.7, some typeglobs in the CORE namespace were made read-only by
-mistake.  This has been fixed [rt.cpan.org #74289].
-
-=item *
-
-C<-t> now works when stacked with other filetest operators [perl #77388].
-
-=item *
-
-Stacked filetest operators now only call FETCH once on a tied argument.
-
-=item *
-
-C</.*/g> would sometimes refuse to match at the end of a string that ends
-with "\n".  This has been fixed [perl #109206].
-
-=item *
-
-C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> now match identically (when not
-under a differing locale).  This fixes a regression introduced in 5.14
-in which the first expression could match characters outside of ASCII,
-such as the KELVIN SIGN.
-
-=item *
-
-Method calls whose arguments were all surrounded with C<my()> or C<our()>
-(as in C<<$object->method(my($a,$b)) >>) used to force lvalue context on
-the subroutine.  This would prevent lvalue methods from returning certain
-values.  Due to lvalue fixes earlier in the 5.15.x series, it would also
-prevent non-lvalue methods from being called [perl #109264].
-
-=for comment
-This bug I<did> affect earlier stable releases.  It is just the last
-sentence that does not apply to 5.14.
-
-=item *
-
-The C<SvPVutf8> C function no longer tries to modify its argument,
-resulting in errors [perl #108994].
-
-=item *
-
-C<SvPVutf8> now works properly with magical variables.
-
-=item *
-
-C<SvPVbyte> now works properly non-PVs.
-
-=item *
-
-C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under
-C<use locale> when the platform supports that.  Previously, they used
-the platform's native character set.
-
-=item *
-
-A regression introduced in 5.13.6 was fixed.  This involved an inverted
-bracketed character class in a regular expression that consisted solely
-of a Unicode property, that property wasn't getting inverted outside the
-Latin1 range.
-
-=item *
-
-C<quotemeta> now quotes consistently the same non-ASCII characters under
-C<use feature 'unicode_strings'>, regardless of whether the string is
-encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the
-infamous L<perlunicode/The "Unicode Bug">.  [perl #77654].
-
-Which of these code points is quoted has changed, based on Unicode's
-recommendations.  See L<perlfunc/quotemeta> for details.
+C<goto ''> now looks for an empty label, producing the "goto must have
+label" error message, instead of exiting the program [perl #111794].
 
 =back
 
@@ -795,7 +357,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.7..HEAD
+  perl Porting/acknowledgements.pl v5.16.0..HEAD
 
 =head1 Reporting Bugs