X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a6c31837e629c46be2f7496149b36a4b79f93484..364b8cf9b4fc5c83097a45783243e57a1440aadf:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 03d545c..94b416c 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -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.6 +perldelta - what is new for perl v5.27.7 =head1 DESCRIPTION -This document describes differences between the 5.27.5 release and the 5.27.6 +This document describes differences between the 5.27.6 release and the 5.27.7 release. -If you are upgrading from an earlier release such as 5.27.4, first read -L, which describes differences between 5.27.4 and 5.27.5. +If you are upgrading from an earlier release such as 5.27.5, first read +L, which describes differences between 5.27.5 and 5.27.6. =head1 Notice @@ -27,23 +27,10 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] -=head2 Initialisation of aggregate state variables +=head2 The C C<%j> format size modifier is now available with +pre-C99 compilers -A persistent lexical array or hash variable can now be initialized, -by an expression such as C. Initialization of a -list of persistent lexical variables is still not possible. - -=head2 Full-size inode numbers - -On platforms where inode numbers are of a type larger than perl's native -integer numerical types, L will preserve the full -content of large inode numbers by returning them in the form of strings of -decimal digits. Exact comparison of inode numbers can thus be achieved by -comparing with C rather than C<==>. Comparison with C<==>, and other -numerical operations (which are usually meaningless on inode numbers), -work as well as they did before, which is to say they fall back to -floating point, and ultimately operate on a fairly useless rounded inode -number if the real inode number is too big for the floating point format. +The actual size used depends on the platform, so remains unportable. =head1 Security @@ -63,47 +50,32 @@ XXX For a release on a stable branch, this section aspires to be: [ List each incompatible change as a =head2 entry ] -=head2 Yada-yada is now strictly a statement - -By the time of its initial stable release in Perl 5.12, the C<...> -(yada-yada) operator was explicitly intended to serve as a statement, -not an expression. However, the original implementation was confused -on this point, leading to inconsistent parsing. The operator was -accidentally accepted in a few situations where it did not serve as a -complete statement, such as - - ... . "foo"; - ... if $a < $b; +=head2 Over-radix digits in floating point literals -The parsing has now been made consistent, permitting yada-yada only as -a statement. Affected code can use C to put a yada-yada into -an arbitrary expression context. +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. -=head2 Subroutines no longer need typeglobs +=head1 Deprecations -Perl 5.22.0 introduced an optimization allowing subroutines to be stored in -packages as simple sub refs, not requiring a full typeglob (thus -potentially saving large amounts of memeory). However, the optimization -was flawed: it only applied to the main package. +XXX Any deprecated features, syntax, modules etc. should be listed here. -This optimization has now been extended to all packages. This may break -compatibility with introspection code that looks inside stashes and expects -everything in them to be a typeglob. +=head2 Assignment to C<$[> will be fatal in Perl 5.30 -When this optimization happens, the typeglob still notionally exists, so -accessing it will cause the stash entry to be upgraded to a typeglob. The -optimization does not apply to XSUBs or exported subroutines, and calling a -method will undo it, since method calls cache things in typeglobs. +Assigning a non-zero value to L|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. -[perl #129916] [perl #132252] +=head2 hostname() won't accept arguments in Perl 5.32 -=head1 Deprecations - -XXX Any deprecated features, syntax, modules etc. should be listed here. +Passing arguments to C 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 inapplicable. +XXX Remove this section if not applicable. The following modules will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN. @@ -121,7 +93,7 @@ not usually on concerns over their design. =over -=item XXX +=item L and its associated Country, Currency and Language modules XXX Note that deprecated modules should be listed here even if they are listed as an updated module in the L section. @@ -141,43 +113,7 @@ There may well be none in a stable release. =item * -Many string concatenation expressions are now considerably faster, due -to the introduction internally of a C opcode which combines -multiple concatenations, and optionally a C<=> or C<.=>, into a single -action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this -whole expression is now handled as a single op: - - $s .= "a=$a b=$b\n" - -As a special case, if the LHS of an assign is a lexical variable or -C, the op itself handles retrieving the lexical variable, which -is faster. - -In general, the more the expression includes a mix of constant strings and -variable expressions, the longer the expression, and the more it mixes -together non-utf8 and utf8 strings, the more marked the performance -improvement. For example on a C system, this code has been -benchmarked running four times faster: - - my $s; - my $a = "ab\x{100}cde"; - my $b = "fghij"; - my $c = "\x{101}klmn"; - - for my $i (1..10_000_000) { - $s = "\x{100}wxyz"; - $s .= "foo=$a bar=$b baz=$c"; - } - -In addition, C expressions which have a constant format -containing only C<%s> and C<%%> format elements, and which have a fixed -number of arguments, are now also optimised into a C op. - -=item * - -Subroutines in packages no longer need to be stored in typeglobs, saving -large amounts of memory. See L -under L, above. +XXX =back @@ -197,25 +133,13 @@ release manager will have to investigate the situation carefully.) [ Within each section, list entries as an =item entry ] -=head2 Removal of use vars - -=over 4 - -The usage of "use vars" has been discouraged since the introduction of our in -Perl 5.6.0. Where possible the usage of this pragma has now been removed from -the Perl source code. - -This had a slight effect (for the better) on the output of WARNING_BITS in B::Deparse. - -=back - =head2 New Modules and Pragmata =over 4 =item * -XXX +XXX Remove this section if not applicable. =back @@ -225,21 +149,24 @@ XXX =item * -L has been upgraded from version 1.43 to 1.44. +L has been upgraded from version 3.54 to 3.55 -If a package on the call stack contains a constant named C, Carp no -longer throws a "Not a GLOB reference" error. +B: L is deprecated in core and will be removed +from Perl 5.30. =item * -L has been upgraded from version 2.32 to 2.33. It will now use -Time::HiRes utime where available (RT #132401). +L 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 blocks. [perl #96538] =item * -To address a security vulnerability in older versions of the 'zlib' library -(which is bundled with Compress-Raw-Zlib), L has been -upgraded to CPAN version 2.075. +L 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 through a combined getter/setter +method are no longer mistaken for getter calls [perl #113090]. =back @@ -278,29 +205,84 @@ section. Additionally, the following selected changes have been made: -=head3 L +=head3 L -This now gives more ideas as to workarounds to the issue that was -introduced in Perl 5.18 (but not documented explicitly in its perldelta) -for the fact that some Unicode C rules cause a few sequences such as +The API functions C, C, and C +are now documented comprehensively, where previously the only +documentation was a reference to the L tutorial. - (? has been belatedly updated to +account for the removal of lexical C<$_>. -to be considered variable length, and hence disallowed. +The API functions C and C are +documented much more comprehensively than before. -=over 4 +=head3 L -=item * +The general explanation of operator precedence and associativity has +been corrected and clarified. [perl #127391] -The section on reference counting in L has been heavily revised, -to describe references in the way a programmer needs to think about them -rather than in terms of the physical data structures. +The documentation for the C<\> referencing operator now explains the +unusual context that it supplies to its operand. [perl #131061] -=item * +=head3 L + +The means to disambiguate between code blocks and hash constructors, +already documented in L, are now documented in L too. +[perl #130958] + +=head3 L + +The documentation for the C 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 operator +have been clarified. [perl #124428] + +The description of C<@INC> hooks in the documentation for C +has been corrected to say that filter subroutines receive a useless +first argument. [perl #115754] + +The documentation of C now explains what syntactically qualifies +as a version number for its module version checking feature. + +=head3 L + +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 -The section "Truth and Falsehood" in L has been removed from -that document, where it didn't belong, and merged into the existing -paragraph on the same topic in L. +The documentation about set-id scripts has been updated and revised. +[perl #74142] + +A section about using C to run Perl scripts has been added. + +=head3 L + +The examples in L 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. + +=head3 L + +The description of the conditions under which C will be called +has been clarified. [perl #131672] + +=head3 L + +The internal functions C and C are +now documented. + +=head3 L + +The precise rules for identifying C branches are now stated. + +=over 4 =item * @@ -328,7 +310,10 @@ and New Warnings =item * -XXX L +LgotoE into a EgivenE block"> + +(F) A "goto" statement was executed to jump into the middle of a C +block. You can't get there from here. See L. =back @@ -338,7 +323,12 @@ XXX L =item * -XXX L +L + +(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">). =back @@ -350,14 +340,25 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -The diagnostic C has changed to C, because list-context initialization of -single aggregate state variables is now permitted. +XXX Describe change here =item * -XXX Describe change here +Warnings that a variable or subroutine "masks earlier declaration in same +...", or that an C 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 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 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 @@ -391,43 +392,9 @@ L section, instead. =over 4 -=item C89 requirement - -Perl has been documented as requiring a C89 compiler to build since October -1998. A variety of simplifications have now been made to Perl's internals to -rely on the features specified by the C89 standard. We believe that this -internal change hasn't altered the set of platforms that Perl builds on, but -please report a bug if Perl now has new problems building on your platform. - -=item New probes - -=over 2 - -=item HAS_BUILTIN_ADD_OVERFLOW - -=item HAS_BUILTIN_MUL_OVERFLOW - -=item HAS_BUILTIN_SUB_OVERFLOW - -=item HAS_THREAD_SAFE_NL_LANGINFO_L - -=item HAS_LOCALECONV_L - -=item HAS_MBRLEN - -=item HAS_MBRTOWC - -=item HAS_MEMRCHR - -=item HAS_NANOSLEEP - -=item HAS_STRNLEN - -=item HAS_STRTOLD_L - -=item I_WCHAR +=item * -=back +XXX =back @@ -505,8 +472,8 @@ L section. =item Windows -Visual C++ compiler version detection has been improved to work on non-English -language systems. +We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++ +versions earlier than 14.1. =back @@ -516,41 +483,25 @@ XXX Changes which affect the interface available to C 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 * -A new optimisation phase has been added to the compiler, -C, which does a top-down scan of a complete optree -just before the peephole optimiser is run. This phase is not currently -hookable. - -=item * +XS modules can now automatically get reentrant versions of system +functions on threaded perls. -An C op has been added. At C time, a -chain of C and C ops, together optionally with an -C and/or C, are combined into a single -C op. The op is of type C, and the aux array -contains the argument count, plus a pointer to a constant string and a set -of segment lengths. For example with +By saying - my $x = "foo=$foo, bar=$bar\n"; + #define PERL_REENTRANT -the constant string would be C<"foo=, bar=\n"> and the segment lengths -would be (4,6,1). If the string contains characters such as C<\x80>, whose -representation changes under utf8, two sets of strings plus lengths are -precomputed and stored. - -=item * - -Direct access to L|perlapi/PL_keyword_plugin> is not -safe in the presence of multithreading. A new -L|perlapi/wrap_keyword_plugin> function has been -added to allow XS modules to safely define custom keywords even when -loaded from a thread, analoguous to L|perlapi/PL_check> / -L|perlapi/wrap_op_checker>. +near the beginning of an C 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 in your code, on a +system that has C 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. =back @@ -565,49 +516,81 @@ files in F and F are best summarized in L. =item * -C, C, and file test operators now fail if given a -filename containing a nul character, in the same way that C -already fails. +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 in a C or C block no longer permits the +main program to run, and C in a C block no longer permits +C 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 +or C method. It is now treated like any other string C<1>. +[perl #126042] + +=item * + +The C 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 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 no longer gets confused by attempts to allocate +more than a gigabyte on a 64-bit platform. [perl #119829] =item * -C, C, and file test operators now reliably set C<$!> when -failing due to being applied to a closed or otherwise invalid file handle. +Stacked file test operators in a sort comparator expression no longer +cause a crash. [perl #129347] =item * -File test operators for Unix permission bits that don't exist on a -particular platform, such as C<-k> (sticky bit) on Windows, now check that -the file being tested exists before returning the blanket false result, -and yield the appropriate errors if the argument doesn't refer to a file. +An identity C 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 * -The in-place reverse optimisation now correctly strengthens weak -references using the L|perlapi/sv_rvunweaken> -API function. +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 * -Fixed a read before buffer when parsing a range starting with C<\N{}> -at the beginning of the character set for the transliteration -operator. [perl #132245] +C and similar invocations no longer leak the file +handle. [perl #115814] =item * -Fixed a leaked SV when parsing an empty C<\N{}> at compile-time. -[perl #132245] +Some convoluted kinds of regexp no longer cause an arithmetic overflow +when compiled. [perl #131893] =item * -Calling C on a directory or block device now yields a meaningful -error code in C<$!>. [perl #125774] +The default typemap, by avoiding C, now no longer leaks when +XSUBs return file handles (C or C). [perl #115814] =item * -Lexical sub declarations in C blocks such as C -could corrupt the stack, erasing items already on the stack in the -enclosing statement. This has been fixed. [perl #132442] +Creating a C block as an XS subroutine with a prototype no longer +crashes because of the early freeing of the subroutine. =back @@ -640,14 +623,14 @@ the perldelta of a previous release. =head1 Obituary -XXX If any significant core contributor has died, we've added a short obituary -here. +XXX If any significant core contributor or member of the CPAN community has +died, add a short obituary here. =head1 Acknowledgements XXX Generate this with: - perl Porting/acknowledgements.pl v5.27.5..HEAD + perl Porting/acknowledgements.pl v5.27.6..HEAD =head1 Reporting Bugs