This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta changes for this branch
[perl5.git] / pod / perldelta.pod
index 5e172a2..00a33b6 100644 (file)
@@ -5,15 +5,15 @@
 [ 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.27.7
+perldelta - what is new for perl v5.27.9
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.27.6 release and the 5.27.7
+This document describes differences between the 5.27.8 release and the 5.27.9
 release.
 
-If you are upgrading from an earlier release such as 5.27.5, first read
-L<perl5276delta>, which describes differences between 5.27.5 and 5.27.6.
+If you are upgrading from an earlier release such as 5.27.7, first read
+L<perl5278delta>, which describes differences between 5.27.7 and 5.27.8.
 
 =head1 Notice
 
@@ -27,10 +27,22 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2  The C<sprintf> C<%j> format size modifier is now available with
-pre-C99 compilers
+=head2 New read-only predefined variable C<${^SAFE_LOCALES}>
 
-The actual size used depends on the platform, so remains unportable.
+This variable is 1 if the Perl interpreter is operating in an
+environment where it is safe to use and change locales (see
+L<perllocale>.)  This variable is true when the perl is
+unthreaded, or compiled in a platform that supports thread-safe locale
+operation (see next item).
+
+=head2 Locales are now thread-safe on systems that support them
+
+These systems include Windows starting with Visual Studio 2005, and in
+POSIX 2008 systems.
+
+The implication is that you are now free to use locales and changes them
+in a threaded environment.  Your changes affect only your thread.
+See L<perllocale/Multi-threaded operation>
 
 =head1 Security
 
@@ -50,29 +62,10 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 Over-radix digits in floating point literals
-
-Octal and binary floating point literals used to permit any hexadecimal
-digit to appear after the radix point.  The digits are now restricted
-to those appropriate for the radix, as digits before the radix point
-always were.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
 
-=head2 Assignment to C<$[> will be fatal in Perl 5.30
-
-Assigning a non-zero value to L<C<$[>|perlvar/$[> has been deprecated
-since Perl 5.12, but was never given a deadline for removal.  This has
-now been scheduled for Perl 5.30.
-
-=head2 hostname() won't accept arguments in Perl 5.32
-
-Passing arguments to C<Sys::Hostname::hostname()> was already deprecated,
-but didn't have a removal date.  This has now been scheduled for Perl
-5.32.  [perl #124349]
-
 =head2 Module removals
 
 XXX Remove this section if not applicable.
@@ -93,7 +86,7 @@ not usually on concerns over their design.
 
 =over
 
-=item L<Locale::Codes> and its associated Country, Currency and Language modules
+=item XXX
 
 XXX Note that deprecated modules should be listed here even if they are listed
 as an updated module in the L</Modules and Pragmata> section.
@@ -149,32 +142,9 @@ XXX Remove this section if not applicable.
 
 =item *
 
-L<Locale::Codes> has been upgraded from version 3.54 to 3.55
-
-B<NOTE>: L<Locale::Codes> is deprecated in core and will be removed
-from Perl 5.30.
-
-=item *
-
-L<threads> has been upgraded from version 2.19 to 2.20.
-The documentation now better describes the problems that arise when
-returning values from threads, and no longer warns about creating threads
-in C<BEGIN> blocks.  [perl #96538]
-
-=item *
-
-L<Data::Dumper> has been upgraded from version 2.167_02 to 2.169.
-Quoting of glob names now obeys the Useqq option [perl #119831].
-Attempts to set an option to C<undef> through a combined getter/setter
-method are no longer mistaken for getter calls [perl #113090].
-
-=item *
+L<XXX> has been upgraded from version A.xx to B.yy.
 
-L<Pod::Html> has been upgraded from version 1.2203 to 1.23.
-A title for the HTML document will now be automatically generated by
-default from a "NAME" section in the POD document, as it used to be
-before the module was rewritten to use L<Pod::Simple::XHTML> to do the
-core of its job.  [perl #110520]
+If there was something important to note about this change, include that here.
 
 =back
 
@@ -213,88 +183,7 @@ section.
 
 Additionally, the following selected changes have been made:
 
-=head3 L<perlapi>
-
-The API functions C<perl_parse()>, C<perl_run()>, and C<perl_destruct()>
-are now documented comprehensively, where previously the only
-documentation was a reference to the L<perlembed> tutorial.
-
-The documentation of C<newGIVENOP()> has been belatedly updated to
-account for the removal of lexical C<$_>.
-
-The API functions C<newCONSTSUB()> and C<newCONSTSUB_flags()> are
-documented much more comprehensively than before.
-
-=head3 L<perlop>
-
-The general explanation of operator precedence and associativity has
-been corrected and clarified.  [perl #127391]
-
-The documentation for the C<\> referencing operator now explains the
-unusual context that it supplies to its operand.  [perl #131061]
-
-=head3 L<perlsyn>
-
-The means to disambiguate between code blocks and hash constructors,
-already documented in L<perlref>, are now documented in L<perlsyn> too.
-[perl #130958]
-
-=head3 L<perlfunc>
-
-The documentation for the C<exists> operator no longer says that
-autovivification behaviour "may be fixed in a future release".
-We've determined that we're not going to change the default behaviour.
-[perl #127712]
-
-A couple of small details in the documentation for the C<bless> operator
-have been clarified.  [perl #124428]
-
-The description of C<@INC> hooks in the documentation for C<require>
-has been corrected to say that filter subroutines receive a useless
-first argument.  [perl #115754]
-
-The documentation of C<use> now explains what syntactically qualifies
-as a version number for its module version checking feature.
-
-=head3 L<perluniprops>
-
-For each binary table or property, the documentation now includes which
-characters in the range C<\x00-\xFF> it matches, as well as a list of
-the first few ranges of code points matched above that.
-
-=head3 L<perlobj>
-
-The documentation about C<DESTROY> methods has been corrected, updated,
-and revised, especially in regard to how they interact with exceptions.
-[perl #122753]
-
-=head3 L<perlsec>
-
-The documentation about set-id scripts has been updated and revised.
-[perl #74142]
-
-A section about using C<sudo> to run Perl scripts has been added.
-
-=head3 L<perlembed>
-
-The examples in L<perlembed> have been made more portable in the way
-they exit, and the example that gets an exit code from the embedded Perl
-interpreter now gets it from the right place.  The examples that pass
-a constructed argv to Perl now show the mandatory null C<argv[argc]>.
-
-=head3 L<perldebguts>
-
-The description of the conditions under which C<DB::sub()> will be called
-has been clarified.  [perl #131672]
-
-=head3 L<perlintern>
-
-The internal functions C<newXS_len_flags()> and C<newATTRSUB_x()> are
-now documented.
-
-=head3 L<perlgit>
-
-The precise rules for identifying C<smoke-me> branches are now stated.
+=head3 L<XXX>
 
 =over 4
 
@@ -324,10 +213,7 @@ and New Warnings
 
 =item *
 
-L<Can't "goto" into a "given" block|perldiag/"Can't E<quot>gotoE<quot> into a E<quot>givenE<quot> block">
-
-(F) A "goto" statement was executed to jump into the middle of a C<given>
-block.  You can't get there from here.  See L<perlfunc/goto>.
+XXX L<message|perldiag/"message">
 
 =back
 
@@ -337,12 +223,11 @@ block.  You can't get there from here.  See L<perlfunc/goto>.
 
 =item *
 
-L<Old package separator used in string|perldiag/"Old package separator used in string">
-
-(W syntax) You used the old package separator, "'", in a variable
-named inside a double-quoted string; e.g., C<"In $name's house">.  This
-is equivalent to C<"In $name::s house">.  If you meant the former, put
-a backslash before the apostrophe (C<"In $name\'s house">).
+L<Locale '%s' contains (at least) the following characters which have
+non-standard meanings: %s  The Perl program will use the standard
+meanings|perldiag/"Locale '%s' contains (at least) the following
+characters which have non-standard meanings: %s  The Perl program will
+use the standard meanings">.
 
 =back
 
@@ -356,30 +241,6 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 XXX Describe change here
 
-=item *
-
-The warning about useless use of a concatenation operator in void context
-is now generated for expressions with multiple concatenations, such as
-C<$a.$b.$c>, which used to mistakenly not warn.  [perl #6997]
-
-=item *
-
-Warnings that a variable or subroutine "masks earlier declaration in same
-...", or that an C<our> variable has been redeclared, have been moved to a
-new warnings category "shadow".  Previously they were in category "misc".
-
-=item *
-
-The deprecation warning from C<Sys::Hostname::hostname()> saying that
-it doesn't accept arguments now states the Perl version in which the
-warning will be upgraded to an error.  [perl #124349]
-
-=item *
-
-The L<perldiag> entry for the error regarding a set-id script has been
-expanded to make clear that the error is reporting a specific security
-vulnerability, and to advise how to fix it.
-
 =back
 
 =head1 Utility Changes
@@ -416,13 +277,6 @@ L</Platform Support> section, instead.
 
 XXX
 
-=item *
-
-Where an HTML version of the doucmentation is installed, the HTML
-documents now use relative links to refer to each other.  Links from
-the index page of L<perlipc> to the individual section documents are
-now correct.  [perl #110056]
-
 =back
 
 =head1 Testing
@@ -450,7 +304,8 @@ made:
 
 =item *
 
-XXX
+F<harness> no longer waits for 30 seconds when running
+F<t/io/openpid.t>.  [perl #121028][perl #132867]
 
 =back
 
@@ -474,6 +329,12 @@ source tree.
 
 XXX
 
+=item VMS
+
+CRTL features can now be set by embedders before invoking Perl by using the
+C<decc$feature_set> and C<decc$feature_set_value> functions.  Previously any attempt
+to set features after image initialization were ignored.
+
 =back
 
 =head2 Discontinued Platforms
@@ -497,10 +358,9 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item Windows
+=item XXX-some-platform
 
-We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++
-versions earlier than 14.1.
+XXX
 
 =back
 
@@ -510,25 +370,25 @@ 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 change as an =item entry ]
+
 =over 4
 
 =item *
 
-XS modules can now automatically get reentrant versions of system
-functions on threaded perls.
+A new compiler C<#define>, C<dTHX_DEBUGGING>. has been added.  This is
+useful for XS or C code that only need the thread context because their
+debugging statements that get compiled only under C<-DDEBUGGING> need
+one.
+
+=item *
 
-By saying
+A new API function L<perlapi/Perl_setlocale> has been added.
 
- #define PERL_REENTRANT
+=item *
 
-near the beginning of an C<XS> file, it will be compiled so that
-whatever reentrant functions perl knows about on that system will
-automatically and invisibly be used instead of the plain, non-reentrant
-versions.  For example, if you write C<getpwnam()> in your code, on a
-system that has C<pwnam_r()> all calls to the former will be translated
-invisibly into the latter.  This does not happen except on threaded
-perls, as they aren't needed otherwise.  Be aware that which functions
-have reentrant versions varies from system to system.
+L<perlapi/sync_locale> has been revised to return a boolean as to
+whether the system was using the global locale or not.
 
 =back
 
@@ -543,81 +403,22 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-XXX
-
-=item *
-
-Digits past the radix point in octal and binary floating point literals
-now have the correct weight on platforms where a floating point
-significand doesn't fit into an integer type.
-
-=item *
-
-C<exit(0)> in a C<UNITCHECK> or C<CHECK> block no longer permits the
-main program to run, and C<exit(0)> in a C<BEGIN> block no longer permits
-C<INIT> blocks to run before exiting.  [perl #2754]
-
-=item *
-
-The canonical truth value no longer has a spurious special meaning as
-a callable.  It used to be a magic placeholder for a missing C<import>
-or C<unimport> method.  It is now treated like any other string C<1>.
-[perl #126042]
-
-=item *
-
-The C<readpipe()> built-in function now checks at compile time that
-it has only one parameter expression, and puts it in scalar context,
-thus ensuring that it doesn't corrupt the stack at runtime.  [perl #4574]
-
-=item *
-
-C<sort> now performs correct reference counting when aliasing C<$a> and
-C<$b>, thus avoiding premature destruction and leakage of scalars if they
-are re-aliased during execution of the sort comparator.  [perl #92264]
-
-=item *
-
-Perl's own C<malloc> no longer gets confused by attempts to allocate
-more than a gigabyte on a 64-bit platform.  [perl #119829]
-
-=item *
-
-Stacked file test operators in a sort comparator expression no longer
-cause a crash.  [perl #129347]
-
-=item *
-
-An identity C<tr///> transformation on a reference is no longer mistaken
-for that reference for the purposes of deciding whether it can be
-assigned to.  [perl #130578]
-
-=item *
-
-Lengthy hexadecimal, octal, or binary floating point literals no
-longer cause undefined behaviour when parsing digits that are of such
-low significance that they can't affect the floating point value.
-[perl #131894]
-
-=item *
-
-C<open $$scalarref...> and similar invocations no longer leak the file
-handle.  [perl #115814]
-
-=item *
-
-Some convoluted kinds of regexp no longer cause an arithmetic overflow
-when compiled.  [perl #131893]
-
-=item *
+Failures while compiling code within other constructs, such as with
+string interpolation and the right part of C<s///e> now cause
+compilation to abort earlier.
 
-The default typemap, by avoiding C<newGVgen>, now no longer leaks when
-XSUBs return file handles (C<PerlIO *> or C<FILE *>).  [perl #115814]
+Previously compilation could continue in order to report other errors,
+but the failed sub-parse could leave partly parsed constructs on the
+parser shift-reduce stack, confusing the parser, leading to perl
+crashes. [perl #125351]
 
 =item *
 
-Creating a C<BEGIN> block as an XS subroutine with a prototype no longer
-crashes because of the early freeing of the subroutine.
+On threaded perls where the decimal point (radix) character is not a
+dot, it has been possible for a race to occur between threads when one
+needs to use the real radix character.  This has now been fixed by use
+of a mutex on systems without thread-safe locales, and the problem just
+doesn't come up on those with thread-safe locales.
 
 =back
 
@@ -657,7 +458,7 @@ died, add a short obituary here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.27.6..HEAD
+  perl Porting/acknowledgements.pl v5.27.8..HEAD
 
 =head1 Reporting Bugs