X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/5c45d39a0ab01571e1fe33ede7c3ba60dae166e6..8b225b9cd8c7e6b254c637331556189572824c91:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f952192..27da054 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,12 +1,3 @@ -=for todo - -b51c3e77db (craigb) - Reduce excessive stat calls in glob on VMS -e141190569 (tonyc) - [perl #121366] avoid using an invalid SvPVX() in Perl_sv_pvn_force_flags -869747506f/00051dd553 (merijn) - gcc 4.9 by default does some optimizations that break perl / -fwrapv is broken prior to gcc-4.3 (#121505) -fc6f6f37f8 (craigb) - Make perlbug encoding-agnostic in handling prepared reports. -7e6b9e3a66 (craigb) - Attempt to satisfy CRLF expectations in perlbug on Windows. -78beb4ca6d (tonyc) - [perl #120998] avoid caller() crashing on eval '' stack frames - =encoding utf8 =head1 NAME @@ -14,15 +5,15 @@ fc6f6f37f8 (craigb) - Make perlbug encoding-agnostic in handling prepared report [ 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.19.11 +perldelta - what is new for perl v5.21.1 =head1 DESCRIPTION -This document describes differences between the 5.19.10 release and the 5.19.11 +This document describes differences between the 5.21.0 release and the 5.21.1 release. -If you are upgrading from an earlier release such as 5.19.9, first read -L, which describes differences between 5.19.9 and 5.19.10. +If you are upgrading from an earlier release such as 5.20.0, first read +L, which describes differences between 5.20.0 and 5.21.0. =head1 Notice @@ -36,6 +27,44 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] +=head2 Experimental C Backtrace API + +Starting from Perl 5.21.1, on some platforms Perl supports retrieving +the C level backtrace (similar to what symbolic debuggers like gdb do). + +The backtrace returns the stack trace of the C call frames, +with the symbol names (function names), the object names (like "perl"), +and if it can, also the source code locations (file:line). + +The supported platforms are Linux and OS X (some *BSD might work at +least partly, but they have not yet been tested). + +The feature needs to be enabled with C. + +Also included is a C API to retrieve backtraces. + +See L for more information. + +=head2 C now ignores any Unicode pattern white space + +The C regular expression modifier allows the pattern to contain +white space and comments, both of which are ignored, for improved +readability. Until now, not all the white space characters that Unicode +designates for this purpose were handled. The additional ones now +recognized are +U+0085 NEXT LINE, +U+200E LEFT-TO-RIGHT MARK, +U+200F RIGHT-TO-LEFT MARK, +U+2028 LINE SEPARATOR, +and +U+2029 PARAGRAPH SEPARATOR. + +=head2 S> can restrict which locale categories are affected + +It is now possible to pass a parameter to S> to specify +a subset of locale categories to be locale-aware, with the remaining +ones unaffected. See L for details. + =head1 Security XXX Any security-related notices go here. In particular, any security @@ -52,12 +81,98 @@ XXX For a release on a stable branch, this section aspires to be: If any exist, they are bugs, and we request that you submit a report. See L below. -[ List each incompatible change as a =head2 entry ] +=head2 S> now is a fatal error + +The C pragma has been deprecated since v5.18, and its use now +is a fatal error. + +=head2 C<\N{}> with a sequence of multiple spaces is now a fatal error. + +This has been deprecated since v5.18. + +=head2 In double-quotish C<\cI>, I must now be a printable ASCII character + +In prior releases, failure to do this raised a deprecation warning. + +=head2 Splitting the tokens C<(?> and C<(*> in regular expressions is +now a fatal compilation error. + +These had been deprecated since v5.18. + +=head2 5 additional characters are treated as white space under C in +regex patterns (unless escaped) + +The use of these characters with C outside bracketed character +classes and when not preceeded by a backslash has raised a deprecation +warning since v5.18. Now they will be ignored. See LfooEx> +for the list of the five characters. + +=head2 Comment lines within S> now are ended only by a C<\n> + +S> is an experimental feature, introduced in v5.18. It operates +as if C is always enabled. But there was a difference, comment +lines (following a C<#> character) were terminated by anything matching +C<\R> which includes all vertical whitespace, such as form feeds. For +consistency, this is now changed to match what terminates comment lines +outside S>, namely a C<\n> (even if escaped), which is the +same as what terminates a heredoc string and formats. + +=head2 Omitting % and @ on hash and array names is no longer permitted + +Really old Perl let you omit the @ on array names and the % on hash +names in some spots. This has issued a deprecation warning since Perl +5.0, and is no longer permitted. + +=head2 C<"$!"> text is now in English outside C<"use locale"> scope + +Previously, the text, unlike almost everything else, always came out +based on the current underlying locale of the program. (Also affected +on some systems is C<"$^E>".) For programs that are unprepared to +handle locale, this can cause garbage text to be displayed. It's better +to display text that is translatable via some tool than garbage text +which is much harder to figure out. + +=head2 C<"$!"> text will be returned in UTF-8 when appropriate + +The stringification of C<$!> and C<$^E> will have the UTF-8 flag set +when the text is actually non-ASCII UTF-8. This will enable programs +that are set up to be locale-aware to properly output messages in the +user's native language. Code that needs to continue the 5.20 and +earlier behavior can do the stringification within the scopes of both +'use bytes' and 'use locale ":messages". No other Perl operations will +be affected by locale; only C<$!> and C<$^E> stringification. The +'bytes' pragma causes the UTF-8 flag to not be set, just as in previous +Perl releases. This resolves [perl #112208]. + +=head2 MAD build option has been removed + +MAD = Misc Attribute Decoration; unmaintained attempt at preserving +the Perl parse tree more faithfully so that automatic conversion of +Perl 5 to Perl 6 would have been easier. + +This build-time configuration option had been unmaintained for years, +and had probably seriously diverged on both Perl 5 and Perl 6 sides. =head1 Deprecations XXX Any deprecated features, syntax, modules etc. should be listed here. +=head2 Using a NO-BREAK space in a character alias for C<\N{...}> is now +deprecated + +This non-graphic character is essentially indistinguishable from a +regular space, and so should not be allowed. See +L. + +=head2 A literal C<"{"> should now be escaped in a pattern + +If you want a literal left curly bracket (also called a left brace) in a +regular expression pattern, you should now escape it by either +preceding it with a backslash (C<"\{">) or enclosing it within square +brackets C<"[{]">, or by using C<\Q>; otherwise a deprecation warning +will be raised. This was first announced as forthcoming in the v5.16 +release; it will allow future extensions to the language to happen. + =head2 Module removals XXX Remove this section if inapplicable. @@ -98,7 +213,18 @@ There may well be none in a stable release. =item * -XXX +Many internal functions have been refactored to improve performance and reduce +their memory footprints. + +L<[perl #121436]|https://rt.perl.org/Ticket/Display.html?id=121436> +L<[perl #121906]|https://rt.perl.org/Ticket/Display.html?id=121906> +L<[perl #121969]|https://rt.perl.org/Ticket/Display.html?id=121969> + +=item * + +C<-T> and C<-B> filetests will return sooner when an empty file is detected. + +L =back @@ -128,60 +254,129 @@ XXX =item * -L has been upgraded from version 1.33 to 1.3301. +L has been upgraded from version 1.3301 to 1.34. -No changes have been made to the installed code other than the version bump to -keep in sync with the latest CPAN release. +Carp::Heavy now ignores version mismatches with Carp if Carp is newer +than 1.12, since Carp::Heavy's guts were merged into Carp at that +point. +L<[perl #121574]|https://rt.perl.org/Ticket/Display.html?id=121574> =item * -L has been upgraded from version 2.04-TRIAL to 2.05-TRIAL. +L has been upgraded from version 2.151 to 2.152. + +Changes to resolve Coverity issues. -TODO +XS dumps incorrectly stored the name of code references stored in a +GLOB. +L<[perl #122070]|https://rt.perl.org/Ticket/Display.html?id=122070> =item * -L has been upgraded from version 1.43 to 1.44. +L has been upgraded from version 2.60_01 to 2.62. -The debugger now correctly restores its input and output filehandles after -using the pager command. -[L] +B now has better error handling when the encoding name is nonexistent, +and a build breakage when upgrading L in perl-5.8.2 and earlier has +been fixed. =item * -L has been upgraded from version 1.63 to 1.64. +L has been upgraded from version 0.16 to 0.17. -When upgrading an already-installed file, L could mess up -the permissions of files if the old versions of files were hard or symbolic -links. This has now been fixed. -[L] +Minor bug fixes and documentation fixes to Hash::Util::hash_stats() + +=item * -The MM_TEST_ROOT feature has been removed from the tests. +The libnet collection of modules has been upgraded from version 1.25 to 1.27. + +There are only whitespace changes to the installed files. + +=item * + +The Locale-Codes collection of modules has been upgraded from vesion 3.30 to 3.31. + +Fixed a bug in the scripts used to extract data from spreadsheets that +prevented the SHP currency code from being found. +L<[cpan #94229]|https://rt.cpan.org/Ticket/Display.html?id=94229> + +=item * + +L has been upgraded from version 1.9993 to 1.9994. + +Synchronize POD changes from the CPAN release. + +C<< Math::BigFloat->blog(x) >> would sometimes return blog(2*x) when +the accuracy was greater than 70 digits. + +The result of C<< Math::BigFloat->bdiv() >> in list context now +satisfies C<< x = quotient * divisor + remainder >>. + +=item * + +L has been upgraded from version 0.2606 to 0.2607. + +Synchronize POD changes from the CPAN release. + +=item * + +L has been upgraded from version 1.000022 to 1.000024. + +Support installations on older perls with an L earlier +than 6.63_03 + +=item * + +L has been upgraded from version 1.09 to 1.10. + +=item * + +L has been upgraded from version 1.44 to 1.45. + +fork() in the debugger under C will now create a new window for +the forked process. L<[perl +#121333]|https://rt.perl.org/Ticket/Display.html?id=121333> + +The debugger now saves the current working directory on startup and +restores it when you restart your program with C or . L<[perl +#121509]|https://rt.perl.org/Ticket/Display.html?id=121509> + +=item * + +L has been upgraded from version 0.18 to 0.19. + +No changes in behaviour. =item * -L has been upgraded from version 6.92 to 6.94. +L has been upgraded from version 0.012 to 0.013. -A regression in MM_Unix.pm has been resolved. -[L<#96|https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/issues/96>] +No changes in behaviour. =item * -L has been upgraded from version 3.09 to 3.10. +L has been upgraded from version 0.18 to 0.19. -The list of Perl versions covered has been updated. +No changes in behaviour. =item * -L has been upgraded from version 1.08 to 1.09. +L has been upgraded from version 1.04 to 1.07. -The warning about the use of the C<:utf8> layer has been made more prominent. +Version 0.67's improved discontiguous contractions is invalidated by default +and is supported as a parameter 'long_contraction'. =item * -L has been upgraded from version 2.48 to 2.49. +L has been upgraded from version 1.17 to 1.18. + +The XSUB implementation has been removed in favour of pure Perl. -Recognition of tied SVs has been tightened up. +=item * + +A mismatch between the documentation and the code in utf8::downgrade() +was fixed in favour of the documentation. The optional second argument +is now correctly treated as a perl boolean (true/false semantics) and +not as an integer. =back @@ -214,13 +409,89 @@ XXX Changes which significantly change existing files in F go here. However, any changes to F should go in the L section. -=head3 L +=head3 L =over 4 =item * -XXX Description of the change here +C<-l> now notes that it will return false if symlinks aren't supported by the +file system. + +L<[perl #121523]|https://rt.perl.org/Ticket/Display.html?id=121523> + +=item * + +Note that C and C may fall back to the shell on +Win32. Only C and C indirect object +syntax will reliably avoid using the shell. + +This has also been noted in L. + +L<[perl #122046]|https://rt.perl.org/Ticket/Display.html?id=122046> + +=back + +=head3 L + +=over 4 + +=item * + +C - Fix documentation to mention the use of C instead of +C. + +L<[perl #121869]|https://rt.perl.org/Ticket/Display.html?id=121869> + +=item * + +Clarify where C may be embedded or is required to terminate a string. + +=item * + +Previously missing documentation due to formatting errors are now included. + +=item * + +Entries are now organized into groups rather than by file where they are found. + +=item * + +Alphabetical sorting of entries is now handled by the POD generator to make +entries easier to find when scanning. + +=back + +=head3 L + +=over 4 + +=item * + +Updated documentation for the C C target. + +L<[perl #121431]|https://rt.perl.org/Ticket/Display.html?id=121431> + +=back + +=head3 L + +=over 4 + +=item * + +The C modifier has been clarified to note that comments cannot be continued +onto the next line by escaping them. + +=back + +=head3 L + +=over 4 + +=item * + +The documentation includes many clarifications and fixes. =back @@ -254,7 +525,13 @@ XXX L =item * -XXX L +L: + +(S experimental::win32_perlio) The C<:win32> PerlIO layer is +experimental. If you want to take the risk of using this layer, +simply disable this warning: + + no warnings "experimental::win32_perlio"; =back @@ -266,28 +543,40 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -The now fatal error message C has been -reworded as C to emphasize -that in C<\cI>, I must be a I ASCII character. +<> should be quotes + +This warning has been changed to +L<< <> at require-statement should be quotes|perldiag/"<> at require-statement should be quotes" >> +to make the issue more identifiable. + +=item * + +L + +This warning is now only produced when the newline is at the end of +the filename. =back =head1 Utility Changes XXX Changes to installed programs such as F and F go here. -Most of these are built within the directories F and F. +Most of these are built within the directory F. -[ List utility changes as a =head3 entry for each utility and =item +[ 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. ] -=head3 L +=head2 F =over 4 =item * -XXX +The F directory has been removed from the Perl core. + +This removes find2perl, s2p and a2p. They have all been released to CPAN as +separate distributions (App::find2perl, App::s2p, App::a2p). =back @@ -304,7 +593,15 @@ L section, instead. =item * -XXX +C now supports parallel testing. + +For example: + + TEST_JOBS=9 make test.valgrind + +See L for more information. + +L<[perl #121431]|https://rt.perl.org/Ticket/Display.html?id=121431> =back @@ -354,9 +651,12 @@ XXX List any platforms that this version of perl no longer compiles on. =over 4 -=item XXX-some-platform +=item NeXTSTEP/OPENSTEP -XXX +NeXTSTEP was proprietary OS bundled with NeXT's workstations in the early +to mid 90's; OPENSTEP was an API specification that provided a NeXTSTEP-like +environment on a non-NeXTSTEP system. Both are now long dead, so support +for building Perl on them has been removed. =back @@ -369,32 +669,19 @@ L section. =over 4 -=item Win32 - -The time taken to build perl on Windows has been reduced quite significantly -(time savings in the region of 30-40% are typically seen) by reducing the -number of, usually failing, I/O calls for each L (for -miniperl only). -[L] - -About 15 minutes of idle sleeping was removed from running C due to -a bug in which the timeout monitor used for tests could not be cancelled once -the test completes, and the full timeout period elapsed before running the next -test file. -[L] - -On a perl built without psuedo-fork (psuedo-fork builds were not affected by -this bug), killing a process tree with L and a negative signal -resulted in kill() inverting the returned value. For example, if kill() killed -1 process tree PID then it returned 0 instead of 1, and if kill() was passed 2 -invalid PIDs then it returned 2 instead of 0. This has probably been the case -since the process tree kill feature was implemented on Win32. It has now been -corrected to follow the documented behaviour. -[L] - -The test harness now has no failures when perl is built on a FAT drive with the -Windows OS on an NTFS drive. -[L] +=item XXX-some-platform + +XXX + +=item OpenBSD + +On OpenBSD, Perl will now default to using the system C due to the +security features it provides. Perl's own malloc wrapper has been in use +since v5.14 due to performance reasons, but the OpenBSD project believes +the tradeoff is worth it and would prefer that users who need the speed +specifically ask for it. + +L<[perl #122000]|https://rt.perl.org/Ticket/Display.html?id=122000>. =back @@ -404,18 +691,32 @@ 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 a =item entry ] - =over 4 =item * -C is now initialized to the C locale. This affects only -C modules, as the Perl core usages always make sure this locale -category is correctly set for their purposes. C code remains -vulnerable to other code changing this category's locale. Further fixes -are planned in v5.22 to reduce these long-standing vulnerabilities. -[L] +The deprecated variable C has been removed. + +=item * + +Perl now tries to keep the locale category C set to "C" +except around operations that need it to be set to the program's +underlying locale. This protects the many XS modules that cannot cope +with the decimal radix character not being a dot. Prior to this +release, Perl initialized this category to "C", but a call to +C would change it. Now such a call will change the +underlying locale of the C category for the program, but the +locale exposed to XS code will remain "C". There is an API under +development for those relatively few modules that need to use the +underlying locale. This API will be nailed down during the course of +developing v5.21. Send email to L for +guidance. + +=item * + +A new macro L|perlapi/isUTF8_CHAR> has been written which +efficiently determines if the string given by its parameters begins +with a well-formed UTF-8 encoded character. =back @@ -430,25 +731,83 @@ files in F and F are best summarized in L. =item * -A regression involving the string value of C<$!> introduced in v5.19.2 -has been reverted for v5.20. -[L] -This re-breaks the bugs it fixed, -L, so -an alternative fix is planned for v5.22 +index() and rindex() no longer crash when used on strings over 2GB in +size. +L<[perl #121562]|https://rt.perl.org/Ticket/Display.html?id=121562>. =item * -A regression was introduced in v5.19.10 that under some circumstances -caused C matches to falsely fail. Now fixed. +A small previously intentional memory leak in PERL_SYS_INIT/PERL_SYS_INIT3 on +Win32 builds was fixed. This might affect embedders who repeatedly create and +destroy perl engines within the same process. =item * -A regression was introduced in the fix for -[L] that -prevented C (with a trailing slash) from finding .pmc files. This has -been fixed. -[L]. +C now returns the data for the program's underlying +locale even when called from outside the scope of S>. + +=item * + +C now works properly on platforms which don't have +C and/or C, or for which Perl has been compiled +to disregard either or both of these locale categories. In such +circumstances, there are now no entries for the corresponding values in +the hash returned by C. + +=item * + +C now marks appropriately the values it returns as +UTF-8 or not. Previously they were always returned as a bytes, even if +they were supposed to be encoded as UTF-8. + +=item * + +On Microsoft Windows, within the scope of C>, the following +POSIX character classes gave results for many locales that did not +conform to the POSIX standard: +C<[[:alnum:]]>, +C<[[:alpha:]]>, +C<[[:blank:]]>, +C<[[:digit:]]>, +C<[[:graph:]]>, +C<[[:lower:]]>, +C<[[:print:]]>, +C<[[:punct:]]>, +C<[[:upper:]]>, +C<[[:word:]]>, +and +C<[[:xdigit:]]>. +These are because the underlying Microsoft implementation does not +follow the standard. Perl now takes special precautions to correct for +this. + +=item * + +Many issues have been detected by L and +fixed. + +=item * + +system() and friends should now work properly on more Android builds. + +Due to an oversight, the value specified through -Dtargetsh to Configure +would end up being ignored by some of the build process. This caused perls +cross-compiled for Android to end up with defective versions of system(), +exec() and backticks: the commands would end up looking for C +instead of C, and so would fail for the vast majority +of devices, leaving C<$!> as C. + +=item * + +C, +C, +and +C +now work. Previously it was impossible to escape these three +left-characters with a backslash within a regular expression pattern +where otherwise they would be considered metacharacters, and the pattern +opening delimiter was the character, and the closing delimiter was its +mirror character. =back @@ -488,7 +847,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.19.10..HEAD + perl Porting/acknowledgements.pl v5.21.1..HEAD =head1 Reporting Bugs