X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/515c1ce3ec58ec5e61fada74b46e44f373540348..840d136c2c4af2a91d93c448456a52a1dda730b2:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index b9f02db..da3c958 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,236 +2,135 @@ =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.27.6 +perldelta - what is new for perl v5.27.8 =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.7 release and the 5.27.8 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. - -=head1 Notice - -XXX Any important notices here +If you are upgrading from an earlier release such as 5.27.6, first read +L, which describes differences between 5.27.6 and 5.27.7. =head1 Core Enhancements -XXX New core language features go here. Summarize user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L section. - -[ List each enhancement as a =head2 entry ] - -=head2 Initialisation of aggregate state variables +=head2 Close-on-exec flag set atomically -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. +When opening a file descriptor, perl now generally opens it with its +close-on-exec flag already set, on platforms that support doing so. +This improves thread safety, because it means that an C initiated +by one thread can no longer cause a file descriptor in the process +of being opened by another thread to be accidentally passed to the +executed program. -=head2 Full-size inode numbers +Additionally, perl now sets the close-on-exec flag more reliably, whether +it does so atomically or not. Most file descriptors were getting the +flag set, but some were being missed. -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. - -=head1 Security - -XXX Any security-related notices go here. In particular, any security -vulnerabilities closed should be noted here rather than in the -L section. - -[ List each security issue as a =head2 entry ] - -=head1 Incompatible Changes +=head2 Mixed Unicode scripts are now detectable -XXX For a release on a stable branch, this section aspires to be: +A mixture of scripts, such as Cyrillic and Latin, in a string is often +the sign of a spoofing attack. A new regular expression construct +now allows for easy detection of these. For example, you can say - There are no changes intentionally incompatible with 5.XXX.XXX - If any exist, they are bugs, and we request that you submit a - report. See L below. + qr/(?script_run: \d+ \b )/x -[ List each incompatible change as a =head2 entry ] +And the digits matched will all be from the same set of 10. You won't +get a look-alike digit from a different script that has a different +value than what it appears to be. -=head2 Yada-yada is now strictly a statement +=head2 String- and number-specific bitwise ops are no longer experimental -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 +The new string-specific (C<&. |. ^. ~.>) and number-specific (C<& | ^ ~>) +bitwise operators introduced in Perl 5.22 are no longer experimental. +Because the number-specific ops are spelled the same way as the existing +operators that choose their behaviour based on their operands, these +operators must still be enabled via the "bitwise" feature, in either of +these two ways: - ... . "foo"; - ... if $a < $b; + use feature "bitwise"; -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. + use v5.28; # "bitwise" now included -=head2 Subroutines no longer need typeglobs +They are also now enabled by the B<-E> command-line switch. -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. +The "bitwise" feature no longer emits a warning. Existing code that +disables the "experimental::bitwise" warning category that the feature +previously used will continue to work. -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. +One caveat that module authors ought to be aware of is that the numeric +operators now pass a fifth TRUE argument to overload methods. Any methods +that check the number of operands may croak if they do not expect so many. +XS authors in particular should be aware that this: -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. + SV * + bitop_handler (lobj, robj, swap) -[perl #129916] [perl #132252] +may need to be changed to this: -=head1 Deprecations + SV * + bitop_handler (lobj, robj, swap, ...) -XXX Any deprecated features, syntax, modules etc. should be listed here. - -=head2 Module removals - -XXX Remove this section if inapplicable. - -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. -Distributions on CPAN which require these modules will need to list them as -prerequisites. - -The core versions of these modules will now issue C<"deprecated">-category -warnings to alert you to this fact. To silence these deprecation warnings, -install the modules in question from CPAN. - -Note that these are (with rare exceptions) fine modules that you are encouraged -to continue to use. Their disinclusion from core primarily hinges on their -necessity to bootstrapping a fully functional, CPAN-capable Perl installation, -not usually on concerns over their design. - -=over - -=item XXX - -XXX Note that deprecated modules should be listed here even if they are listed -as an updated module in the L section. +=head1 Incompatible Changes -=back +=head2 Smartmatch and switch reversion -[ List each other deprecation as a =head2 entry ] +The changes to the experimental smart match operator (C<~~>) and switch +(C/C) constructs that were made in Perl 5.27.7 have been +reverted due to the extent of the trouble caused to CPAN modules. +It is expected that smartmatch will be changed again in the future, +but preceded by some kind of explicit deprecation. =head1 Performance Enhancements -XXX Changes which enhance performance without changing behaviour go here. -There may well be none in a stable release. - -[ List each enhancement as an =item entry ] - =over 4 =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. +The performance of pattern matching C<[[:ascii:]]> and C<[[:^ascii:]]> +has been improved significantly except on EBCDIC platforms. =back =head1 Modules and Pragmata -XXX All changes to installed files in F, F, F and F -go here. If Module::CoreList is updated, generate an initial draft of the -following sections using F. A paragraph summary -for important changes should then be added by hand. In an ideal world, -dual-life modules would have a F file that could be cribbed. - -The list of new and updated modules is modified automatically as part of -preparing a Perl release, so the only reason to manually add entries here is if -you're summarising the important changes in the module update. (Also, if the -manually-added details don't match the automatically-generated ones, the -release manager will have to investigate the situation carefully.) - -[ Within each section, list entries as an =item entry ] - -=head2 Removal of use vars +=head2 New Modules and Pragmata =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. +=item * + +XXX Remove this section if not applicable. =back -=head2 New Modules and Pragmata +=head2 Updated Modules and Pragmata =over 4 =item * -XXX +L has been upgraded from version A.xx to B.yy. -=back +If there was something important to note about this change, include that here. -=head2 Updated Modules and Pragmata +=item * -=over 4 +L has been upgraded from version 0.69 to 0.70. + +The function C now accepts an optional parameter to help in +diagnosing error returns. =item * -L has been upgraded from version 1.43 to 1.44. +L has been upgraded from version 0.29 to 0.30. -If a package on the call stack contains a constant named C, Carp no -longer throws a "Not a GLOB reference" error. +Platforms that use C to edit the names of loadable libraries now look for +bootstrap (.bs) files under the correct, non-edited name. =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.020_04 to 2.027. =back @@ -250,371 +149,211 @@ XXX XXX Changes to files in F go here. Consider grouping entries by file and be sure to link to the appropriate page, e.g. L. -=head2 New Documentation - -XXX Changes which create B files in F go here. - -=head3 L - -XXX Description of the purpose of the new file here - =head2 Changes to Existing Documentation We have attempted to update the documentation to reflect the changes listed in this document. If you find any we have missed, send email to L. -XXX Changes which significantly change existing files in F go here. -However, any changes to F should go in the L -section. - Additionally, the following selected changes have been made: -=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 - - (? =over 4 =item * -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. +An example in L used the string value of C as a +format string when calling croak(). If that string contains format +codes such as C<%s> this could crash the program. -=item * +This has been changed to a call to croak_sv(). -XXX Description of the change here +An alternative could have been to supply a trivial format string: -=back + croak("%s", SvPV_nolen(ERRSV)); -=head1 Diagnostics +or as a special case for C simply: -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L. - -XXX New or changed warnings emitted by the core's C code go here. Also -include any changes in L that reconcile it to the C code. - -=head2 New Diagnostics + croak(NULL); -XXX Newly added diagnostic messages go under here, separated into New Errors -and New Warnings +=back -=head3 New Errors +=head3 L =over 4 =item * -XXX L +Improve the documentation of C with a slightly more +explicit description of the sharing of iterator state, and with +caveats regarding the fragility of while-each loops. [perl #132644] =back -=head3 New Warnings +=head3 L, L, L =over 4 =item * -XXX L +Improve the documentation of while condition magic in various +places. [perl #132644] =back -=head2 Changes to Existing Diagnostics - -XXX Changes (i.e. rewording) of diagnostic messages go here +=head3 L =over 4 =item * -The diagnostic C has changed to C, because list-context initialization of -single aggregate state variables is now permitted. - -=item * - -XXX Describe change here +Clarify the documentation of B<< -m >>. [perl #131518] =back -=head1 Utility Changes +=head1 Diagnostics -XXX Changes to installed programs such as F and F go here. -Most of these are built within the directory F. +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L. -[ List utility changes as a =head2 entry for each utility and =item -entries for each change -Use L with program names to get proper documentation linking. ] +=head2 New Diagnostics -=head2 L +=head3 New Errors =over 4 =item * -XXX - -=back +LgotoE into a binary or list expression"> -=head1 Configuration and Compilation +Use of C to jump into the parameter of a binary or list operator has +been prohibited, to prevent crashes and stack corruption. [perl #130936] -XXX Changes to F, F, F, and analogous tools -go here. Any other changes to the Perl build process should be listed here. -However, any platform-specific changes should be listed in the -L section, instead. +=back -[ List changes as an =item entry ]. +=head2 Changes to Existing Diagnostics =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 +The C<< Unable to flush stdout >> error message was missing a trailing +newline. [debian #875361] =back =head1 Testing -XXX Any significant changes to the testing of a freshly built perl should be -listed here. Changes which create B files in F go here as do any -large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F aren't worth summarizing, although the bugs -that they represent may be covered elsewhere. - -XXX If there were no significant test changes, say this: - -Tests were added and changed to reflect the other additions and changes -in this release. - -XXX If instead there were significant changes, say this: - Tests were added and changed to reflect the other additions and changes in this release. Furthermore, these significant changes were made: -[ List each test improvement as an =item entry ] - =over 4 =item * -XXX - -=back - -=head1 Platform Support - -XXX Any changes to platform support should be listed in the sections below. - -[ Within the sections, list each platform as an =item entry with specific -changes as paragraphs below it. ] - -=head2 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 -directories, or new subdirectories and F files at the top level of the -source tree. - -=over 4 +Allow override of watchdog timer count in F. -=item XXX-some-platform - -XXX +This test can take a long time to run, so there is a timer to keep +this in check (currently, 5 minutes). This commit adds checking +the environment variable C<< PERL_TEST_TIME_OUT_FACTOR >>; if set, +the time out setting is multiplied by its value. =back -=head2 Discontinued Platforms +=head1 Platform Support -XXX List any platforms that this version of perl no longer compiles on. +=head2 Platform-Specific Notes =over 4 -=item XXX-some-platform - -XXX +=item Cygwin -=back +A build with the quadmath library can now be done on Cygwin. -=head2 Platform-Specific Notes +=item FreeBSD -XXX List any changes for specific platforms. This could include configuration -and compilation changes or changes in portability/compatibility. However, -changes within modules for platforms should generally be listed in the -L section. +FreeBSD's F<< /usr/share/mk/sys.mk >> specifies C<< -O2 >> for +architectures other than arm and mips. By default, compile perl +with the same optimization levels. -=over 4 +=item VMS -=item XXX-some-platform +Several fix-ups for F, marking function VMS has +(or doesn't have). -XXX =back -=head1 Internal Changes - -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 ] +=head1 Selected Bug Fixes =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. +The C format specifier C<%.0f> no longer rounds incorrectly +[perl #47602], and now shows the correct sign for a negative zero. =item * -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 - - my $x = "foo=$foo, bar=$bar\n"; - -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. +Fixed a use after free bug in pp_list introduced in 5.27.1. [perl #131954] =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>. - -=back - -=head1 Selected Bug Fixes +Don't stringify numeric first arguments to +C<< system() >> on Windows or VMS. [perl #132633] -XXX Important bug fixes in the core language are summarized here. Bug fixes in -files in F and F are best summarized in L. +=item * -[ List each fix as an =item entry ] - -=over 4 - -=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. +Fixed an issue where the error C<< Scalar value @arrayname[0] better +written as $arrayname >> would give an error C<< Cannot printf Inf with 'c' >> +when arrayname starts with C<< Inf >>. [perl #132645] =item * -The in-place reverse optimisation now correctly strengthens weak -references using the L|perlapi/sv_rvunweaken> -API function. +The Perl implementation of C<< getcwd() >> in C<< Cwd >> in the PathTools +distribution now behaves the same as XS implementation on errors: it +returns an error, and sets C<< $! >>. [perl #132648] =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] +Fixed argument counting in multiconcat when concatenating adjacent constants. +[perl #132646] =item * -Fixed a leaked SV when parsing an empty C<\N{}> at compile-time. -[perl #132245] +Vivify array elements when putting them on the stack. +Fixes [perl #8910] (reported in April 2002). =item * -Calling C on a directory or block device now yields a meaningful -error code in C<$!>. [perl #125774] +Fixed parsing of braced subscript after parens. Fixes [perl #8045] +(reported in December 2001). =back =head1 Known Problems -XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any -tests that had to be Ced for the release would be noted here. Unfixed -platform specific bugs also go here. - -[ List each fix as an =item entry ] - -=over 4 - -=item * - -XXX - -=back - -=head1 Errata From Previous Releases - =over 4 =item * -XXX Add anything here that we forgot to add, or were mistaken about, in -the perldelta of a previous release. +The bugfix for [perl #2754] in Perl 5.27.7 turned out to cause so much +trouble on CPAN [perl #132577] that it is being postponed. The bug has +been restored, so C in a C or C block now +once again permits the main program to run, and C in a C +block once again permits C blocks to run before exiting. The bug +will be fixed again for Perl 5.30. =back -=head1 Obituary - -XXX If any significant core contributor has died, we've added a short obituary -here. - =head1 Acknowledgements XXX Generate this with: - perl Porting/acknowledgements.pl v5.27.5..HEAD + perl Porting/acknowledgements.pl v5.27.7..HEAD =head1 Reporting Bugs