X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/b2a6778b4b1c3d84180bbc518a6f3d36545d50bc..ba52ce15fe5ca68de1be69e394f41ccb48a731cc:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 483b25b..dc3c84e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,404 +2,160 @@ =head1 NAME -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. +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 -=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. +=head2 Mixed Unicode scripts are now detectable -=head1 Incompatible Changes - -=head2 Yada-yada is now strictly a statement +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 -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 + qr/(?script_run: \d+ \b )/x - ... . "foo"; - ... if $a < $b; +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. -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. +=head2 String- and number-specific bitwise ops are no longer experimental -=head2 Subroutines no longer need typeglobs +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: -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. + use feature "bitwise"; -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. + use v5.28; # "bitwise" now included -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. +They are also now enabled by the B<-E> command-line switch. -(This change actually happened in perl 5.27.5 but was omitted from its perldelta.) +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. -[perl #129916] [perl #132252] +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: -=head2 Sort algorithm can no longer be specified + SV * + bitop_handler (lobj, robj, swap) -Since Perl 5.8, the L pragma has had subpragmata C<_mergesort>, -C<_quicksort>, and C<_qsort> that can be used to specify which algorithm -perl should use to implement the L builtin. -This was always considered a dubious feature that might not last, -hence the underscore spellings, and they were documented as not being -portable beyond Perl 5.8. These subpragmata have now been deleted, -and any attempt to use them is an error. The L pragma otherwise -remains, and the algorithm-neutral C subpragma can be used to -control sorting behaviour. -[perl #119635] +may need to be changed to this: -=head1 Performance Enhancements + SV * + bitop_handler (lobj, robj, swap, ...) -=over 4 - -=item * +=head1 Incompatible Changes -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: +=head2 Smartmatch and switch reversion - $s .= "a=$a b=$b\n" +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. -As a special case, if the LHS of an assignment is a lexical variable or -C, the op itself handles retrieving the lexical variable, which -is faster. +=head1 Deprecations -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: +=head2 Use of code points over 0xFF in string bitwise operators - my $s; - my $a = "ab\x{100}cde"; - my $b = "fghij"; - my $c = "\x{101}klmn"; +Some uses of these already are illegal after a previous deprecation +cycle. This deprecates the remaining uses. See L. - for my $i (1..10_000_000) { - $s = "\x{100}wxyz"; - $s .= "foo=$a bar=$b baz=$c"; - } +=head1 Performance Enhancements -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. +=over 4 =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 -Key highlights in this release across several modules: - -=head2 Removal of use vars - -The usage of C has been discouraged since the introduction of C 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. - -=head2 Use of DynaLoader changed to XSLoader in many modules - -XSLoader is more modern, and most modules already require perl 5.6 or greater, so -no functionality is lost by switching. In some cases, we have also made changes to -the local implementation that may not be reflected in the version on CPAN due -to a desire to maintain more backwards compatibility. - -=head2 Updated Modules and Pragmata +=head2 New Modules and Pragmata =over 4 =item * -L has been upgraded from version 1.00 to 1.01. - -=item * - -L has been upgraded from version 0.31 to 0.32. - -=item * - -L has been upgraded from version 1.70 to 1.72. - -=item * - -L has been upgraded from version 1.002 to 1.003. - -=item * - -L has been upgraded from version 1.43 to 1.45. - -=item * - -L has been upgraded from version 2.26 to 2.27. - -=item * - -L has been upgraded from version 1.06 to 1.07. - -=item * - -L has been upgraded from version 1.43 to 1.44. - -If a package on the call stack contains a constant named C, Carp no -longer throws a "Not a GLOB reference" error. - -=item * - -L has been upgraded from version 2.074 to 2.075. - -This addresses a security vulnerability in older versions of the 'zlib' library -(which is bundled with Compress-Raw-Zlib). - -=item * - -L has been upgraded from version 0.01 to 0.02. - -=item * - -L has moved from cpan-first to perl-first maintenance - -Primary responsibility for the code in Devel::PPPort has moved into core perl. -In a practical sense there should be no change except that hopefully it will -stay more up to date with changes made to symbols in perl, rather than needing -to be updated after the fact. - -=item * - -L has been upgraded from version 1.42 to 1.44. - -=item * - -L has been upgraded from version 0.016 to 0.017. - -=item * - -L has been upgraded from version 0.280228 to 0.280229. - -=item * - -L has been upgraded from version 1.34 to 1.35. - -=item * - -L has been upgraded from version 1.06 to 1.07. - -=item * - -L has been upgraded from version 3.35 to 3.36. - -=item * - -L has been upgraded from version 3.35 to 3.36. - -=item * - -L has been upgraded from version 1.3 to 1.4. - -=item * - -L has been upgraded from version 2.23 to 2.24. - -=item * - -L has been upgraded from version 2.32 to 2.33. It will now use -Time::HiRes utime where available (perl #132401). - -=item * - -L has been upgraded from version 3.68 to 3.70. - -=item * - -L has been upgraded from version 1.07 to 1.08. - -=item * - -L has been upgraded from version 1.09 to 1.10. - -=item * - -L has been upgraded from version 0.94 to 0.95. - -=item * - -L has been upgraded from version 1.19 to 1.20. - -=item * - -L has been upgraded from version 0.14 to 0.15. - -=item * - -L has been upgraded from version 0.42 to 0.43. - -=item * - -The libnet distribution has been upgraded from version 3.10 to 3.11. - -=item * - -L has been upgraded from version 1.28 to 1.29. - -=item * - -L has been upgraded from version 5.20171020 to 5.20171120. - -=item * - -L has been upgraded from version 2.55 to 2.62. +XXX Remove this section if not applicable. -=item * - -L has been upgraded from version 1.14 to 1.15. - -=item * - -L has been upgraded from version 1.40 to 1.41. - -=item * - -L has been upgraded from version 1.2202 to 1.2203. - -=item * - -L has been upgraded from version 1.78 to 1.80. - -=item * - -L has been upgraded from version 0.35 to 0.36. - -=item * - -L has been upgraded from version 1.24 to 1.25. - -=item * - -L has been upgraded from version 2.020_03 to 2.020_04. - -=item * - -L has been upgraded from version 2.03 to 2.04. - -=item * - -L has been upgraded from version 2.64 to 2.65. - -=item * - -L has been upgraded from version 1.30 to 1.31. - -=item * - -L has been upgraded from version 1.302103 to 1.302111. - -=item * - -L has been upgraded from version 2.18 to 2.19. - -=item * - -L has been upgraded from version 1.06 to 1.07. - -=item * - -L has been upgraded from version 4.4 to 4.5. - -=item * - -L has been upgraded from version 1.03 to 1.04. +=back -=item * +=head2 Updated Modules and Pragmata -L has been upgraded from version 1.9746 to 1.9747. +=over 4 =item * -L has been upgraded from version 1.02 to 1.03. - -=item * +L has been upgraded from version A.xx to B.yy. -L has been upgraded from version 1.19 to 1.23. +If there was something important to note about this change, include that here. =item * -L has been upgraded from version 1.25 to 1.26. - -=item * +L has been upgraded from version 0.69 to 0.70. -L has been upgraded from version 1.01 to 1.02. +The function C now accepts an optional parameter to help in +diagnosing error returns. =item * -L has been upgraded from version 1.00 to 1.01. +L has been upgraded from version 0.29 to 0.30. -=item * - -L has been upgraded from version 1.08 to 1.09. +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.42 to 2.44. - -=item * +L has been upgraded from version 2.020_04 to 2.027. -L has been upgraded from version 1.37 to 1.38. +=back -=item * +=head2 Removed Modules and Pragmata -L has been upgraded from version 0.15 to 0.16. +=over 4 =item * -L has been upgraded from version 0.27 to 0.28. +XXX =back =head1 Documentation +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 Changes to Existing Documentation We have attempted to update the documentation to reflect the changes @@ -408,61 +164,58 @@ to L. Additionally, the following selected changes have been made: +=head3 L + =over 4 -=item * L +=item * -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 +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. - (? + croak("%s", SvPV_nolen(ERRSV)); -This entry has been removed, as the experimental support of this construct was -removed in perl 5.24.0. +or as a special case for C simply: -=item * + croak(NULL); -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. +=back -=item * +=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. +=over 4 =item * -The description of the C operator in L has been clarified. [perl #132460] +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] -=item * +=back + +=head3 L, L, L -L has been updated to note that C<\p{Word}> now includes -code points matching the C<\p{Join_Control}> property. The change to -the property was made in Perl 5.18, but not documented until now. There -are currently only two code points that match this property U+200C (ZERO -WIDTH NON-JOINER) and U+200D (ZERO WIDTH JOINER). +=over 4 =item * -The entry for C<$+> in perlvar has been expanded upon to describe handling of -multiply-named capturing groups. +Improve the documentation of while condition magic in various +places. [perl #132644] -=item * +=back -L has been updated to note that C's whitespace rules differ from that of -C's in that only ASCII whitespace is used. +=head3 L + +=over 4 =item * -L has been updated with some more cautions about using locale-specific -functions in threaded applications. +Clarify the documentation of B<< -m >>. [perl #131518] =back @@ -472,103 +225,72 @@ 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. -=head2 Changes to Existing Diagnostics +=head2 New Diagnostics + +=head3 New Errors =over 4 =item * -The diagnostic C has changed to C, because list-context initialization of -single aggregate state variables is now permitted. +LgotoE into a binary or list expression"> -=back +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] -=head1 Utility Changes +=back -=head2 L +=head2 Changes to Existing Diagnostics =over 4 =item * -C<--help> and C<--version> options have been added. +The C<< Unable to flush stdout >> error message was missing a trailing +newline. [debian #875361] =back -=head1 Configuration and Compilation - -=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 +=head1 Testing -=over 2 +Tests were added and changed to reflect the other additions and +changes in this release. Furthermore, these significant changes were +made: -=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 +=over 4 -=item HAS_STRNLEN +=item * -=item HAS_STRTOLD_L +Allow override of watchdog timer count in F. -=item I_WCHAR +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 -=back - -=head1 Packaging - -For the past few years we have released perl using three different archive -formats: bzip (C<.bz2>), LZMA2 (C<.xz>) and gzip (C<.gz>). Since xz compresses -better and decompresses faster, and gzip is more compatible and uses less memory, -we have dropped the C<.bz2> archive format with this release. -(If this poses a problem, do let us know; see L, below.) - =head1 Platform Support -=head2 Discontinued Platforms +=head2 Platform-Specific Notes =over 4 -=item PowerUX / Power MAX OS +=item Cygwin -Compiler hints and other support for these apparently long-defunct platforms has been removed. +A build with the quadmath library can now be done on Cygwin. -=back +=item FreeBSD -=head2 Platform-Specific Notes +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 Windows +Several fix-ups for F, marking function VMS has +(or doesn't have). -Visual C++ compiler version detection has been improved to work on non-English -language systems. =back @@ -578,35 +300,9 @@ language systems. =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 * - -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. - -=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, analogous to L|perlapi/PL_check> / -L|perlapi/wrap_op_checker>. +The format of the non-utf8 transliteration table attached to the C +field of C/C ops has changed. It's now a +C. =back @@ -616,66 +312,69 @@ L|perlapi/wrap_op_checker>. =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. +The C format specifier C<%.0f> no longer rounds incorrectly +[perl #47602], and now shows the correct sign for a negative zero. =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. +Fixed a use after free bug in pp_list introduced in 5.27.1. [perl #131954] =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. +Don't stringify numeric first arguments to +C<< system() >> on Windows or VMS. [perl #132633] + +=item * + +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). =item * -Regexp substitution using an overloaded replacement value that provides -a tainted stringification now correctly taints the resulting string. -[perl #115266] +C could give the wrong results when the +length of the replacement character list was greater than 0x7fff. =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] +C failed to add the implied +C<\x{100}-\x{7fffffff}> to the search character list. =back -=head1 Errata From Previous Releases +=head1 Known Problems =over 4 =item * -L under L, above, -was made for perl 5.27.5 but was mistakenly omitted from its perldelta. +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 @@ -683,7 +382,7 @@ was made for perl 5.27.5 but was mistakenly omitted from its perldelta. XXX Generate this with: - perl Porting/acknowledgements.pl v5.27.5..HEAD + perl Porting/acknowledgements.pl v5.27.7..HEAD =head1 Reporting Bugs