X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/c195675b2e089d3512360d47bd7b698d8e66a7f7..6e23836a54f586418eb81fac4af911e6d883ab19:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index bc45402..87fac1a 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,656 +2,68 @@ =head1 NAME -perldelta - what is new for perl v5.30.0 +[ this is a template for a new perldelta file. Any text flagged as XXX needs +to be processed before release. ] -=head1 DESCRIPTION - -This document describes differences between the 5.28.0 release and the 5.30.0 -release. - -If you are upgrading from an earlier release such as 5.26.0, first read -L, which describes differences between 5.26.0 and 5.28.0. - -=head1 Notice - -sv_utf8_(downgrade|decode) are no longer marked as experimental. -L<[perl #133788]|https://rt.perl.org/Ticket/Display.html?id=133788>. - -=head1 Core Enhancements - -=head2 Limited variable length lookbehind in regular expression pattern matching is now experimentally supported - -Using a lookbehind assertion (like C<(?<=foo?)> or C<(? previously -would generate an error and refuse to compile. Now it compiles (if the -maximum lookbehind is at most 255 characters), but raises a warning in -the new C warnings category. This is to caution you -that the precise behavior is subject to change based on feedback from -use in the field. - -See L and L. - -=head2 The upper limit C<"n"> specifiable in a regular expression quantifier of the form C<"{m,n}"> has been doubled to 65534 - -The meaning of an unbounded upper quantifier C<"{m,}"> remains unchanged. -It matches 2**31 - 1 times on most platforms, and more on ones where a C -language short variable is more than 4 bytes long. - -=head2 Unicode 12.1 is supported - -Because of a change in Unicode release cycles, Perl jumps from Unicode -10.0 in Perl 5.28 to Unicode 12.1 in Perl 5.30. - -For details on the Unicode changes, see -L for 11.0; -L for 12.0; -and -L for 12.1. -(Unicode 12.1 differs from 12.0 only in the addition of a single -character, that for the new Japanese era name.) - -The Word_Break property, as in past Perl releases, remains tailored to -behave more in line with expectations of Perl users. This means that -sequential runs of horizontal white space characters are not broken -apart, but kept as a single run. Unicode 11 changed from past versions -to be more in line with Perl, but it left several white space characters -as causing breaks: TAB, NO BREAK SPACE, and FIGURE SPACE (U+2007). We -have decided to continue to use the previous Perl tailoring with regards -to these. - -=head2 Wildcards in Unicode property value specifications are now partially supported - -You can now do something like this in a regular expression pattern - - qr! \p{nv= /(?x) \A [0-5] \z / }! - -which matches all Unicode code points whose numeric value is -between 0 and 5 inclusive. So, it could match the Thai or Bengali -digits whose numeric values are 0, 1, 2, 3, 4, or 5. - -This marks another step in implementing the regular expression features -the Unicode Consortium suggests. - -Most properties are supported, with the remainder planned for 5.32. -Details are in L. - -=head2 qr'\N{name}' is now supported - -Previously it was an error to evaluate a named character C<\N{...}> -within a single quoted regular expression pattern (whose evaluation is -deferred from the normal place). This restriction is now removed. - -=head2 Turkic UTF-8 locales are now seamlessly supported - -Turkic languages have different casing rules than other languages for -the characters C<"i"> and C<"I">. The uppercase of C<"i"> is LATIN -CAPITAL LETTER I WITH DOT ABOVE (U+0130); and the lowercase of C<"I"> is LATIN -SMALL LETTER DOTLESS I (U+0131). Unicode furnishes alternate casing -rules for use with Turkic languages. Previously, Perl ignored these, -but now, it uses them when it detects that it is operating under a -Turkic UTF-8 locale. - -=head2 It is now possible to compile perl to always use thread-safe locale operations. - -Previously, these calls were only used when the perl was compiled to be -multi-threaded. To always enable them, add - - -Accflags='-DUSE_THREAD_SAFE_LOCALE' - -to your F flags. - -=head2 Eliminate opASSIGN macro usage from core - -This macro is still defined but no longer used in core - -=head2 C<-Drv> now means something on C<-DDEBUGGING> builds - -Now, adding the verbose flag (C<-Dv>) to the C<-Dr> flag turns on all -possible regular expression debugging. - -=head1 Incompatible Changes - -=head2 Assigning non-zero to C<$[> is fatal - -Setting L<< C<$[>|perlvar/$[ >> to a non-zero value has been deprecated since -Perl 5.12 and now throws a fatal error. -See L<<< perldeprecation/Assigning non-zero to C<< $[ >> is fatal >>>. - -=head2 Delimiters must now be graphemes - -See L - -=head2 Some formerly deprecated uses of an unescaped left brace C<"{"> in -regular expression patterns are now illegal - -But to avoid breaking code unnecessarily, most instances that issued a -deprecation warning, remain legal and now have a non-deprecation warning -raised. See L. - -=head2 Previously deprecated sysread()/syswrite() on :utf8 handles is now fatal - -Calling sysread(), syswrite(), send() or recv() on a C<:utf8> handle, -whether applied explicitly or implicitly, is now fatal. This was -deprecated in perl 5.24. - -There were two problems with calling these functions on C<:utf8> -handles: - -=over - -=item * - -All four functions only paid attention to the C<:utf8> flag. Other -layers were completely ignored, so a handle with -C<:encoding(UTF-16LE)> layer would be treated as UTF-8. Other layers, -such as compression are completely ignored with or without the -C<:utf8> flag. - -=item * - -sysread() and recv() would read from the handle, skipping any -validation by the layers, and do no validation of their own. This -could lead to invalidly encoded perl scalars. - -=back - -L<[perl #125760]|https://rt.perl.org/Ticket/Display.html?id=125760>. - -=head2 my() in false conditional prohibited - -Declarations such as C are no longer permitted. - -L<[perl #133543]|https://rt.perl.org/Ticket/Display.html?id=133543>. - -=head2 Fatalize $* and $# - -These special variables, long deprecated, now throw exceptions when used. - -L<[perl #133583]|https://rt.perl.org/Ticket/Display.html?id=133583>. - -=head2 Fatalize unqualified use of dump() - -The C function, long discouraged, may no longer be used unless it is -fully qualified, I, C. - -L<[perl #133584]|https://rt.perl.org/Ticket/Display.html?id=133584>. - -=head2 Remove File::Glob::glob() - -The C function, long deprecated, has been removed and now -throws an exception which advises use of C instead. - -L<[perl #133586]|https://rt.perl.org/Ticket/Display.html?id=133586>. - -=head2 C no longer can return malformed UTF-8 - -It croaks if it would otherwise return a UTF-8 string that contains -malformed UTF-8. This protects agains potential security threats. This -is considered a bug fix as well. -L<[perl #131642]|https://rt.perl.org/Ticket/Display.html?id=131642>. - -=head2 Any set of digits in the Common script are legal in a script run of another script - -There are several sets of digits in the Common script. C<[0-9]> is the -most familiar. But there are also C<[\x{FF10}-\x{FF19}]> (FULLWIDTH -DIGIT ZERO - FULLWIDTH DIGIT NINE), and several sets for use in -mathematical notation, such as the MATHEMATICAL DOUBLE-STRUCK DIGITs. -Any of these sets should be able to appear in script runs of, say, -Greek. But the design of 5.30 overlooked all but the ASCII digits -C<[0-9]>, so the design was flawed. This has been fixed, so is both a -bug fix and an incompatibility. -L<[perl #133547]|https://rt.perl.org/Ticket/Display.html?id=133547>. - -All digits in a run still have to come from the same set of ten digits. - -=head2 JSON::PP enables allow_nonref by default - -As JSON::XS 4.0 changed its policy and enabled allow_nonref -by default, JSON::PP also enabled allow_nonref by default. - -=head1 Deprecations - -=head2 In XS code, use of various macros dealing with UTF-8. - -This deprecation was scheduled to become fatal in 5.30, but has been -delayed to 5.32 due to problems that showed up with some CPAN modules. -For details of what's affected, see L. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Translating from UTF-8 into the code point it represents now is done via a -deterministic finite automaton, speeding it up. As a typical example, -C now requires 12% fewer instructions than before. The -performance of checking that a sequence of bytes is valid UTF-8 is similarly -improved, again by using a DFA. - -=item * - -Eliminate recursion from finalize_op(). -L<[perl #108276]|https://rt.perl.org/Ticket/Display.html?id=108276>. - -=item * - -A handful of small optimizations related to character folding -and character classes in regular expressions. - -=item * - -Optimization of C to C conversions. -L<[perl #133677]|https://rt.perl.org/Ticket/Display.html?id=133677>. - -=item * - -Speed up of the integer stringification algorithm by processing -two digits at a time instead of one. -L<[perl #133691]|https://rt.perl.org/Ticket/Display.html?id=133691>. - -=item * - -Improvements based on LGTM analysis and recommendation. -(L). -L<[perl #133686]|https://rt.perl.org/Ticket/Display.html?id=133686>. -L<[perl #133699]|https://rt.perl.org/Ticket/Display.html?id=133699>. - -=item * - -Code optimizations in F, F, F. - -=item * - -Regular expression pattern matching of things like C]/> is -significantly sped up, where I is any ASCII character. Other classes -can get this speed up, but which ones is complicated and depends on the -underlying bit patterns of those characters, so differs between ASCII -and EBCDIC platforms, but all case pairs, like C are included, -as is C<[^01]>. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 2.30 to 2.32. - -=item * - -L has been upgraded from version 1.74 to 1.76. - -=item * - -L has been upgraded from version 1.003 to 1.004. - -=item * - -L has been upgraded from version 1.48 to 1.49. - -=item * - -L has been upgraded from version 0.49 to 0.51. - -=item * - -L has been upgraded from version 1.06 to 1.07. - -=item * - -L has been upgraded from version 1.38 to 1.50 - -=item * - -L has been upgraded from version 2.074 to 2.084. - -=item * - -L has been upgraded from version 2.076 to 2.084. - -=item * - -L has been upgraded from version 0.02 to 0.03. - -=item * - -L has been upgraded from version 0.29 to 0.32. - -=item * - -L. has been upgraded from version 0.30 to 0.32. This was due -to a new configuration variable that has influence on binary compatibility: -C. - -=item * - -L has been upgraded from version 2.20 to 2.22. - -=item * - -L has been upgraded from version 2.170 to 2.174 - -L now avoids leaking when Cing. - -=item * - -L has been upgraded from version 1.840 to 1.843. - -=item * - -L has been upgraded from version 0.03 to 0.04. - -=item * - -L has been upgraded from version 1.27 to 1.28. - -=item * - -L has been upgraded from version 3.40 to 3.52. - -=item * - -L has been upgraded from version 6.01 to 6.02. - -=item * - -L has been upgraded from version 2.97 to 3.01. - -=item * - -L has been upgraded from version 1.29 to 1.30. - -=item * - -L has been upgraded from version 0.019 to 0.020. - -=item * - -L has been upgraded from version 0.280230 to 0.280231. - -=item * - -L has been upgraded from version 1.70 to 1.72. - -=item * - -L has been upgraded from version 1.08 to 1.09. - -=item * - -L has been upgraded from version 3.39 to 3.40. -C parameters are no longer incorrectly included in the -automatically generated function prototype. -L<[perl #133654]|https://rt.perl.org/Ticket/Display.html?id=133654>. - -=item * - -L has been upgraded from version 1.52 to 1.54. - -=item * - -L has been upgraded from version 2.33 to 2.34. - -=item * - -L has been upgraded from version 1.34 to 1.36. - -C<$File::Find::dont_use_nlink> now defaults to 1 on all -platforms. -L<[perl #133673]|https://rt.perl.org/Ticket/Display.html?id=133673>. - -Variables C<< $Is_Win32 >> and C<< $Is_VMS >> are being initialized. - -=item * - -L has been upgraded from version 1.31 to 1.32. - -=item * - -L has been upgraded from version 2.15 to 2.16. - -=item * - -L has been upgraded from version 3.74 to 3.78. - -Silence L warning on Android builds if C is not defined. - -=item * - -L has been upgraded from version 0.2304 to 0.2309. - -=item * - -L has been upgraded from version 1.58 to 1.59. - -=item * - -L has been upgraded from version 1.17 to 1.18. - -=item * - -L has been upgraded from version 0.070 to 0.076. - -=item * - -L has been upgraded from version 0.17 to 0.18. - -=item * - -L has been upgraded from version 1.39 to 1.40. - -=item * - -IO-Compress has been upgraded from version 2.074 to 2.084. - -Adds support for C<< IO::Uncompress::Zstd >> and -C<< IO::Uncompress::UnLzip >>. - -The C<< BinModeIn >> and C<< BinModeOut >> options are now no-ops. -ALL files will be read/written in binmode. - -=item * - -L has been upgraded from version 1.00 to 1.02. - -=item * - -L has been upgraded from version 2.97001 to 4.02. - -L as JSON::XS 4.0 enables C by default. - -=item * - -L has been upgraded from version 0.64 to 0.65. - -=item * - -L has been upgraded from version 3.56 to 3.57. - -=item * - -L has been upgraded from version 1.999811 to 1.999816. - -C<< bnok() >> now supports the full Kronenburg extension. -L<[cpan #95628]|https://rt.cpan.org/Ticket/Display.html?id=95628>. - -=item * - -L has been upgraded from version 0.5006 to 0.5008. - -=item * - -L has been upgraded from version 0.2613 to 0.2614. - -=item * - -L has been upgraded from version 5.20180622 to 5.20190520. - -Changes to B::Op_private and Config - -=item * - -L has been upgraded from version 0.32 to 0.34. - -=item * - -L has been upgraded from version 1.000033 to 1.000036. - -Properly clean up temporary directories after testing. - -=item * - -L has been upgraded from version 1.14 to 1.15. - -=item * - -L has been upgraded from version 2.62 to 2.71. - -=item * - -L has been upgraded from version 1.15 to 1.16. - -=item * - -PathTools has been upgraded from version 3.74 to 3.78. - -=item * - -L has been upgraded from version 0.236 to 0.237. - -=item * - -L has been upgraded from version 1.54 to 1.55. - -Debugging threaded code no longer deadlocks in C nor -C. - -=item * - -L has been upgraded from version 5.021011 to 5.20190126. - -=item * - -L has been upgraded from version 0.26 to 0.27. - -Warnings enabled by setting the C flag in -C<$PerlIO::encoding::fallback> are now only produced if warnings are -enabled with C or setting C<$^W>. - -=item * - -L has been upgraded from version 0.29 to 0.30. - -=item * - -podlators has been upgraded from version 4.10 to 4.11. - -=item * - -L has been upgraded from version 1.84 to 1.88. - -=item * - -L has been upgraded from version 0.36 to 0.37. - -=item * - -L has been upgraded from version 1.14 to 1.15. - -=item * +perldelta - what is new for perl v5.31.3 -L has been upgraded from version 1.08 to 1.09. - -=item * - -L has been upgraded from version 3.08 to 3.15. - -Storable no longer probes for recursion limits at build time. -L<[perl #133708]|https://rt.perl.org/Ticket/Display.html?id=133708> -and others. - -Metasploit exploit code was included to test for CVE-2015-1992 -detection, this caused anti-virus detections on at least one AV suite. -The exploit code has been removed and replaced with a simple -functional test. -L<[perl #133706]|https://rt.perl.org/Ticket/Display.html?id=133706> - -=item * - -L has been upgraded from version 1.302133 to 1.302162. - -=item * - -L has been upgraded from version 3.12 to 3.13. - -=item * - -L has been upgraded from version 1.58 to 1.60. - -Added support for extra tracing of locking, this requires a -C<-DDEBUGGING> and extra compilation flags. - -=item * - -L has been upgraded from version 1.9759 to 1.9760. - -=item * - -L has been upgraded from version 1.25 to 1.28. - -=item * +=head1 DESCRIPTION -L has been upgraded from version 1.3204 to 1.33. +This document describes differences between the 5.31.2 release and the 5.31.3 +release. -=item * +If you are upgrading from an earlier release such as 5.31.1, first read +L, which describes differences between 5.31.1 and 5.31.2. -L has been upgraded from version 1.25 to 1.27. +=head1 Notice -=item * +XXX Any important notices here -L has been upgraded from version 0.70 to 0.72. +=head1 Core Enhancements -=item * +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. -L has been upgraded from version 1.02 to 1.03. +[ List each enhancement as a =head2 entry ] -=item * +=head1 Security -L has been upgraded from version 1.21 to 1.22. +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L section. -=item * +[ List each security issue as a =head2 entry ] -L has been upgraded from version 1.04 to 1.05. +=head1 Incompatible Changes -C no longer disables non-vars strict when checking if strict -vars is enabled. -L<[perl #130674]|https://rt.perl.org/Ticket/Display.html?id=130674>. +XXX For a release on a stable branch, this section aspires to be: -=item * + 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. -L has been upgraded from version 0.9923 to 0.9924. +[ List each incompatible change as a =head2 entry ] -=item * +=head2 Plain "0" string now treated as a number for range operator -L has been upgraded from version 1.42 to 1.44. +Previously a range C< "0" .. "-1" > would produce a range of numeric +strings from "0" through "99", this now produces an empty list, just +as C< 0 .. -1 > does. -=item * +This was due to a special case that treated strings starting with "0" +as strings so ranges like C< "00" .. "03" > produced C< "00", "01", +"02", "03" >, but didn't specially handle the string C<"0">. -L has been upgraded from version 0.98 to 1.00. +[perl #133695] -=item * +=head1 Deprecations -L has been upgraded from version 0.16 to 0.17. +XXX Any deprecated features, syntax, modules etc. should be listed here. -=back +=head2 Module removals -=head2 Removed Modules and Pragmata +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. @@ -667,130 +79,130 @@ 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 4 - -=item * - -B::Debug is no longer distributed with the core distribution. It -continues to be available on CPAN as -C<< L >>. +=over -=item * +=item XXX -Locale::Codes has been removed at the request of its author. It -continues to be available on CPAN as -C<< L >> -L<[perl #133458]|https://rt.perl.org/Ticket/Display.html?id=133458>. +XXX Note that deprecated modules should be listed here even if they are listed +as an updated module in the L section. =back -=head1 Documentation +[ List each other deprecation as a =head2 entry ] -=head2 Changes to Existing Documentation +=head1 Performance Enhancements -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 enhance performance without changing behaviour go here. +There may well be none in a stable release. -=head3 L +[ List each enhancement as an =item entry ] =over 4 =item * -C was wrongly listed as deprecated. This has been corrected. -L<[perl #133278]|https://rt.perl.org/Ticket/Display.html?id=133278> +XXX =back -=head3 L +=head1 Modules and Pragmata -=over 4 +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. -=item * +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 ] -We no longer have null (empty line) here doc terminators, so -L should not refer to them. +=head2 New Modules and Pragmata + +=over 4 =item * -The behaviour of C when the delimiter is an apostrophe has been clarified. -In particular, hyphens aren't special, and C<\x{}> isn't interpolated. -L<[perl #130679]|https://rt.perl.org/Ticket/Display.html?id=130679> +XXX Remove this section if not applicable. =back -=head3 L, L +=head2 Updated Modules and Pragmata =over 4 =item * -Improve docs for lastparen, lastcloseparen. - -=back - -=head3 L +L has been upgraded from version 3.54 to 3.55. -=over 4 +The test files generated on Win32 are now identical to when they are +generated on POSIX-like systems. =item * -The entry for L has been clarified to indicate that symbolic -links are followed for most tests. +L has been upgraded from version 1.36 to 1.37. + +On Win32, the tests no longer require either a file in the drive root +directory, or a writable root directory. =item * -Clarification of behaviour of C. +L has been upgraded from version 3.04 to 3.05. =item * -Try to clarify that C<< ref(qr/xx/) >> returns C rather than -C and why. -L<[perl #133751]|https://rt.perl.org/Ticket/Display.html?id=133751>. +L has been upgraded from version A.xx to B.yy. + +If there was something important to note about this change, include that here. =back -=head3 L +=head2 Removed Modules and Pragmata =over 4 =item * -Clarification of the syntax of /(?(cond)yes)/. +XXX =back -=head3 L +=head1 Documentation -=over 4 +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. -=item * +=head2 New Documentation -There are actually two slightly different types of UTF-8 locales: one for Turkic -languages and one for everything else. Starting in Perl v5.30, Perl seamlessly -handles both types. +XXX Changes which create B files in F go here. -=back +=head3 L -=head3 L +XXX Description of the purpose of the new file here -=over 4 +=head2 Changes to Existing Documentation -=item * +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. -Added a note for the ::xdigit:: character class. +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. -=back +Additionally, the following selected changes have been made: -=head3 L +=head3 L =over 4 =item * -More specific documentation of paragraph mode. -L<[perl #133722]|https://rt.perl.org/Ticket/Display.html?id=133722>. +XXX Description of the change here =back @@ -800,605 +212,253 @@ 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 - -=over 4 - -=item * - -As noted under L above, the deprecation warning -"Unescaped left brace in regex is deprecated here (and will be fatal in Perl -5.30), passed through in regex; marked by S<<-- HERE> in m/%s/" has been -changed to the non-deprecation warning "Unescaped left brace in regex is passed -through in regex; marked by S<<-- HERE> in m/%s/". +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. -=item * +=head2 New Diagnostics -Specifying C<\o{}> without anything between the braces now yields the -fatal error message "Empty \o{}". Previously it was "Number with no -digits". This means the same wording is used for this kind of error as -with similar constructs such as C<\p{}>. +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings -=item * +=head3 New Errors -Within the scope of the experimental feature C, -specifying C<\x{}> without anything between the braces now yields the -fatal error message "Empty \x{}". Previously it was "Number with no -digits". This means the same wording is used for this kind of error as -with similar constructs such as C<\p{}>. It is legal, though not wise -to have an empty C<\x> outside of C; it silently generates -a NUL character. +=over 4 =item * -L +XXX L -Attempts to push, pop, etc on a hash or glob now produce this message -rather than complaining that they no longer work on scalars. -L<[perl #130367]|https://rt.perl.org/Ticket/Display.html?id=130367>. - -=item * +=back -L +=head3 New Warnings -The file and line number is now reported for this error. -L<[perl #133524]|https://rt.perl.org/Ticket/Display.html?id=133524> +=over 4 =item * -Under C<< -Dr >> (or C<< use re 'Debug' >>) the compiled regex engine -program is displayed. It used to use two different spellings for I<< -infinity >>, -C<< INFINITY >>, and C<< INFTY >>. It now uses the latter exclusively, -as that spelling has been around the longest. +XXX L =back -=head1 Utility Changes +=head2 Changes to Existing Diagnostics -=head2 L +XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * -The generated prototype (with C<< PROTOTYPES: ENABLE >>) would include -C<< OUTLIST >> parameters, but these aren't arguments to the perl function. -This has been rectified. -L<[perl #133654]|https://rt.perl.org/Ticket/Display.html?id=133654>. +XXX Describe change here =back -=head1 Configuration and Compilation - -=over 4 - -=item * - -Normally the thread-safe locale functions are used only on threaded -builds. It is now possible to force their use on unthreaded builds on -systems that have them available, by including the -C<-Accflags='-DUSE_THREAD_SAFE_LOCALE'> option to F. +=head1 Utility Changes -=item * +XXX Changes to installed programs such as F and F go here. +Most of these are built within the directory F. -Improve detection of memrchr, strlcat, and strlcpy +[ 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. ] -=item * +=head2 L -Improve Configure detection of memmem(). -L<[perl #133760]|https://rt.perl.org/Ticket/Display.html?id=133760>. +=over 4 =item * -Multiple improvements and fixes for -DPERL_GLOBAL_STRUCT build option. +XXX -=item * +=back -Fix -DPERL_GLOBAL_STRUCT_PRIVATE build option. +=head1 Configuration and Compilation -=back +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. -=head1 Testing +[ List changes as an =item entry ]. =over 4 =item * -F -L<[perl #130367]|https://rt.perl.org/Ticket/Display.html?id=130367>. - -separate error for C, etc. on hash/glob. +XXX -=item * +=back -F -L<[perl #133660]|https://rt.perl.org/Ticket/Display.html?id=133660>. +=head1 Testing -Add test for C in overload leaking. +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. -=item * +XXX If there were no significant test changes, say this: -Split F into multiple test files. +Tests were added and changed to reflect the other additions and changes +in this release. -=item * +XXX If instead there were significant changes, say this: -Fix intermittent tests which failed due to race conditions which -surface during parallel testing. -L<[perl #133740]|https://rt.perl.org/Ticket/Display.html?id=133740>. +Tests were added and changed to reflect the other additions and +changes in this release. Furthermore, these significant changes were +made: -=item * +[ List each test improvement as an =item entry ] -Thoroughly test paragraph mode, using a new test file, -F. -L<[perl #133722]|https://rt.perl.org/Ticket/Display.html?id=133722>. +=over 4 =item * -Some tests in F<< t/io/eintr.t >> caused the process to hang on -pre-16 Darwin. These tests are skipped for those version of Darwin. +XXX =back =head1 Platform Support -=head2 Platform-Specific Notes - -=over 4 - -=item HP-UX 11.11 - -An obscure problem in C when compiling with HP C-ANSI-C has been fixed -by disabling optimizations in F. - -=item Mac OS X - -Perl's build and testing process on Mac OS X for C<-Duseshrplib> -builds is now compatible with Mac OS X System Integrity Protection -(SIP). - -SIP prevents binaries in F (and a few other places) being passed -the C environment variable. For our purposes this -prevents C from being passed to the shell, which -prevents that variable being passed to the testing or build process, -so running C couldn't find F. - -To work around that, the initial build of the F executable -expects to find F in the build directory, and the -library path is then adjusted during installation to point to the -installed library. - -L<[perl #126706]|https://rt.perl.org/Ticket/Display.html?id=126706>. - -=item Minix3 - -Some support for Minix3 has been re-added. - -=item Cygwin +XXX Any changes to platform support should be listed in the sections below. -Cygwin doesn't make C<< cuserid >> visible. +[ Within the sections, list each platform as an =item entry with specific +changes as paragraphs below it. ] -=item Win32 Mingw +=head2 New Platforms -C99 math functions are now available. - -=item Windows +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 -=item * - -The C build option which has long been available in -F (for B) and F (for B) is now -also available in F (for B). - -=item * - -The B makefile no longer defaults to Visual C++ 6.0 (a very old version -which is unlikely to be widely used today). As a result, it is now a -requirement to specify the C since there is no obvious choice of which -modern version to default to instead. Failure to specify C will result -in an error being output and the build will stop. - -(The B and B makefiles will automatically detect which compiler -is being used, so do not require C to be set. This feature has not yet -been added to the B makefile.) +=item XXX-some-platform -=item * - -C with warnings enabled for a C build no longer -warns about the sleep timeout being too large. -L<[perl #133376]|https://rt.perl.org/Ticket/Display.html?id=133376>. +XXX -=item * +=back -Support for compiling perl on Windows using Microsoft Visual Studio 2019 -(containing Visual C++ 14.2) has been added. +=head2 Discontinued Platforms -=item * +XXX List any platforms that this version of perl no longer compiles on. -socket() now sets C<$!> if the protocol, address family and socket -type combination is not found. -L<[perl #133853]|https://rt.perl.org/Ticket/Display.html?id=133853>. +=over 4 -=item * +=item XXX-some-platform -The Windows Server 2003 SP1 Platform SDK build, with its early x64 compiler and -tools, was accidentally broken in Perl 5.27.9. This has now been fixed. +XXX =back -=back +=head2 Platform-Specific Notes -=head1 Internal Changes +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. =over 4 -=item * - -The sizing pass has been eliminated from the regular expression -compiler. An extra pass may instead be needed in some cases to count -the number of parenthetical capture groups. +=item Windows -=item * +F could fail if environment varables starting with +C already existed. -A new function L> or its synonym, Strtod(), is -now available with the same signature as the libc strtod(). It provides -strotod() equivalent behavior on all platforms, using the best available -precision, depending on platform capabilities and F options, -while handling locale-related issues, such as if the radix character -should be a dot or comma. +=back -=item * +=head1 Internal Changes -Added C to copy a SV without processing get magic on -the source. -L<[perl #132964]|https://rt.perl.org/Ticket/Display.html?id=132964>. +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. -=item * +[ List each change as an =item entry ] -It is now forbidden to malloc more than C bytes. Much -code (including C optimizers) assumes that all data structures will not -be larger than this, so this catches such attempts before overflow -happens. +=over 4 =item * -Two new regnodes have been introduced C<< EXACT_ONLY8 >>, and -C<< EXACTFU_ONLY8 >>. They're equivalent to C<< EXACT >> and C<< EXACTFU >>, -except that they contain a code point which requires UTF-8 to -represent/match. Hence, if the target string isn't UTF-8, we know -it can't possibly match, without needing to try. +A new parser function L +allows a keyword plugin to parse a subroutine signature while C is in effect. This allows custom keywords to implement +semantics similar to regular C declarations that include signatures. +[perl #132474] =item * -C<< print_bytes_for_locale() >> is now defined if C<< DEBUGGING >>, -Prior, it didn't get defined unless C<< LC_COLLATE >> was defined -on the platform. +Since on some platforms we need to hold a mutex when temporarily +switching locales, new macros (C, +C and C) +have been added to make it easier to do this safely and efficiently +as part of [perl #134172]. =back =head1 Selected Bug Fixes -=over 4 - -=item * - -Compilation under C<-DPERL_MEM_LOG> and C<-DNO_LOCALE> have been fixed. - -=item * - -Perl 5.28 introduced an C optimization when comparing to -1 (or -indirectly, e.g. >= 0). When this optimization was triggered inside a C -clause it caused a warning ("Argument %s isn't numeric in smart match"). This -has now been fixed. -L<[perl #133368]|https://rt.perl.org/Ticket/Display.html?id=133368> - -=item * - -The new in-place editing code no longer leaks directory handles. -L<[perl #133314]|https://rt.perl.org/Ticket/Display.html?id=133314>. - -=item * - -Warnings produced from constant folding operations on overloaded -values no longer produce spurious "Use of uninitialized value" -warnings. -L<[perl #132683]|https://rt.perl.org/Ticket/Display.html?id=132683>. - -=item * - -Fix for "mutator not seen in (lex = ...) .= ..." -L<[perl #133441]|https://rt.perl.org/Ticket/Display.html?id=133441>. - -=item * - -C now properly NUL terminates the -zero-length SV produced. -L<[perl #132655]|https://rt.perl.org/Ticket/Display.html?id=132655>. - -=item * - -Improve the debugging output for calloc() calls with C<-Dm>. -L<[perl #133439]|https://rt.perl.org/Ticket/Display.html?id=133439>. - -=item * - -Regexp script runs were failing to permit ASCII digits in some cases. -L<[perl #133547]|https://rt.perl.org/Ticket/Display.html?id=133547>. - -=item * - -On Unix-like systems supporting a platform-specific technique for -determining L<< C<$^X>|perlvar/$^X >>, Perl failed to fall back to the -generic technique when the platform-specific one fails (for example, a Linux -system with /proc not mounted). This was a regression in Perl 5.28.0. -L<[perl #133573]|https://rt.perl.org/Ticket/Display.html?id=133573>. - -=item * - -L is now more robust with corrupt database files. The -improvements do not make SDBM files suitable as an interchange format. -L<[perl #132147]|https://rt.perl.org/Ticket/Display.html?id=132147>. - -=item * - -C or C now properly removes the -C<:utf8> flag from the default C<:crlf> I/O layer on Win32. -L<[perl #133604]|https://rt.perl.org/Ticket/Display.html?id=133604>. - -=item * - -The experimental reference aliasing feature was misinterpreting array and -hash slice assignment as being localised, e.g. +XXX Important bug fixes in the core language are summarized here. Bug fixes in +files in F and F are best summarized in L. - \(@a[3,5,7]) = \(....); - -was being interpreted as: - - local \(@a[3,5,7]) = \(....); - -L<[perl #133538]|https://rt.perl.org/Ticket/Display.html?id=133538>. - -=item * - -C within an C when C was UTF-8 upgraded -could panic if the C was non-ASCII. -L<[perl #134061]|https://rt.perl.org/Ticket/Display.html?id=134061>. - -=item * - -Correctly handle realloc() modifying C on success so that the -modification isn't visible to the perl user, since realloc() is called -implicitly by the interpreter. This modification is permitted by the -C standard, but has only been observed on FreeBSD 13.0-CURRENT. -L<[perl #133958]|https://rt.perl.org/Ticket/Display.html?id=133958>. - -=item * - -Perl now exposes POSIX C as C if -available. This is intended for use by C during bootstrapping -and may be removed or changed without notice. This fixes some -bootstrapping issues while building perl in a directory where some -ancestor directory isn't readable. -L<[perl #133951]|https://rt.perl.org/Ticket/Display.html?id=133951>. - -=item * - -C no longer can return malformed UTF-8. It croaks if it would -otherwise return a UTF-8 string that contains malformed UTF-8. This -protects agains potential security threats. -L<[perl #131642]|https://rt.perl.org/Ticket/Display.html?id=131642>. - -=item * - -See L. - -=item * - -Regular expression matching no longer leaves stale UTF-8 length magic -when updating C<$^R>. This could result in C returning -an incorrect value. - -=item * - -Reduce recursion on ops -L<[perl #108276]|https://rt.perl.org/Ticket/Display.html?id=108276>. - -This can prevent stack overflow when processing extremely deep op -trees. - -=item * - -Avoid leak in multiconcat with overloading. -L<[perl #133789]|https://rt.perl.org/Ticket/Display.html?id=133789>. - -=item * - -The handling of user-defined C<\p{}> properties (see -L) has been rewritten to -be in C (instead of Perl). This speeds things up, but in the process -several inconsistencies and bug fixes are made. +[ List each fix as an =item entry ] =over 4 -=item 1 - -A few error messages have minor wording changes. This is essentially -because the new way is integrated into the regex error handling -mechanism that marks the position in the input at which the error -occurred. That was not possible previously. The messages now also -contain additional back-trace-like information in case the error occurs -deep in nested calls. - -=item 2 - -A user-defined property is implemented as a perl subroutine with certain -highly constrained naming conventions. It was documented previously -that the sub would be in the current package if the package was -unspecified. This turned out not to be true in all cases, but now it -is. - -=item 3 - -All recursive calls are treated as infinite recursion. Previously they -would cause the interpreter to panic. Now, they cause the regex pattern -to fail to compile. - -=item 4 - -Similarly, any other error likely would lead to a panic; now to just the -pattern failing to compile. - -=item 5 - -The old mechanism did not detect illegal ranges in the definition of the -property. Now, the range max must not be smaller than the range min. -Otherwise, the pattern fails to compile. - -=item 6 - -The intention was to have each sub called only once during the lifetime -of the program, so that a property's definition is immutable. This was -relaxed so that it could be called once for all /i compilations, and -potentially a second time for non-/i (the sub is passed a parameter -indicating which). However, in practice there were instances when this -was broken, and multiple calls were possible. Those have been fixed. -Now (besides the /i,non-/i cases) the only way a sub can be called -multiple times is if some component of it has not been defined yet. For -example, suppose we have sub IsA() whose definition is known at compile -time, and it in turn calls isB() whose definition is not yet known. -isA() will be called each time a pattern it appears in is compiled. If -isA() also calls isC() and that definition is known, isC() will be -called just once. - -=item 7 - -There were some races and very long hangs should one thread be compiling -the same property as another simultaneously. These have now been fixed. - -=back - -=item * - -Fixed a failure to match properly. - -An EXACTFish regnode has a finite length it can hold for the string -being matched. If that length is exceeded, a second node is used for -the next segment of the string, for as many regnodes as are needed. -Care has to be taken where to break the string, in order to deal -multi-character folds in Unicode correctly. If we want to break a -string at a place which could potentially be in the middle of a -multi-character fold, we back off one (or more) characters, leaving -a shorter EXACTFish regnode. This backing off mechanism contained -an off-by-one error. -L<[perl #133756]|https://rt.perl.org/Ticket/Display.html?id=133756>. - =item * -A bare C call with no previous file handle now returns true. -L<[perl #133721]|https://rt.perl.org/Ticket/Display.html?id=133721> +C<< $@ = 100; die; >> now correctly propagates the 100 as an exception +instead of ignoring it. [perl #134291] =item * -Failing to compile a format now aborts compilation. Like other errors -in sub-parses this could leave the parser in a strange state, possibly -crashing perl if compilation continued. -L<[perl #132158]|https://rt.perl.org/Ticket/Display.html?id=132158> +C<< 0 0x@ >> no longer asserts in S_no_op(). [perl #134310] =item * -If an in-place edit is still in progress during global destruction and -the process exit code (as stored in C<$?>) is zero, perl will now -treat the in-place edit as successful, replacing the input file with -any output produced. +Exceptions thrown while C<$@> is read-only could result in infinite +recursion as perl tried to update C<$@>, which throws another +exception, resulting in a stack overflow. Perl now replaces C<$@> +with a copy if it's not a simple writable SV. [perl #134266] -This allows code like: +=back - perl -i -ne 'print "Foo"; last' +=head1 Known Problems -to replace the input file, while code like: +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. - perl -i -ne 'print "Foo"; die' +[ List each fix as an =item entry ] -will not. Partly resolves -L<[perl #133659]|https://rt.perl.org/Ticket/Display.html?id=133659>. +=over 4 =item * -A regression in 5.28 caused the following code to fail - - close(STDIN); open(CHILD, "|wc -l")' - -because the child's stdin would be closed on exec. This has now been fixed. - -=item * +XXX -Fixed an issue where compiling a regexp containing both compile-time -and run-time code blocks could lead to trying to compile something -which is invalid syntax. +=back -=item * +=head1 Errata From Previous Releases -Fixed build failures with C<< -DNO_LOCALE_NUMERIC >> and -C<< -DNO_LOCALE_COLLATE >>. -L<[perl #133696]|https://rt.perl.org/Ticket/Display.html?id=133696>. +=over 4 =item * -Prevent the tests in F<< ext/B/t/strict.t >> from being skipped. -L<[perl #133713]|https://rt.perl.org/Ticket/Display.html?id=133713>. +XXX Add anything here that we forgot to add, or were mistaken about, in +the perldelta of a previous release. -=item * +=back -C<< /di >> nodes ending or beginning in I are now C<< EXACTF >>. We do not -want two C<< EXACTFU >> to be joined together during optimization, -and to form a C<< ss >>, C<< sS >>, C<< Ss >> or C<< SS >> sequence; -they are the only multi-character sequences which may match differently -under C<< /ui >> and C<< /di >>. +=head1 Obituary -=back +XXX If any significant core contributor or member of the CPAN community has +died, add a short obituary here. =head1 Acknowledgements -Perl 5.30.0 represents approximately 11 months of development since Perl -5.28.0 and contains approximately 620,000 lines of changes across 1,300 -files from 58 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 510,000 lines of changes to 750 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.30.0: - -Aaron Crane, Abigail, Alberto Simões, Alexandr Savca, Andreas König, Andy -Dougherty, Aristotle Pagaltzis, Brian Greenfield, Chad Granum, Chris -'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Dan -Dedrick, Daniel Dragan, Dan Kogai, David Cantrell, David Mitchell, Dominic -Hargreaves, E. Choroba, Ed J, Eugen Konkov, François Perrad, Graham Knop, -Hauke D, H.Merijn Brand, Hugo van der Sanden, Jakub Wilk, James Clarke, -James E Keenan, Jerry D. Hedden, Jim Cromie, John SJ Anderson, Karen -Etheridge, Karl Williamson, Leon Timmermans, Matthias Bethke, Nicholas -Clark, Nicolas R., Niko Tyni, Pali, Petr Písař, Phil Pearl (Lobbes), -Richard Leach, Ryan Voots, Sawyer X, Shlomi Fish, Sisyphus, Slaven Rezic, -Steve Hay, Sullivan Beck, Tina Müller, Tomasz Konojacki, Tom Wyant, Tony -Cook, Unicode Consortium, Yves Orton, Zak B. Elep. - -he list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of most of the (very much appreciated) contributors who reported -issues to the Perl bug tracker. Noteworthy in this release were the large -number of bug fixes made possible by Sergey Aleynikov's high quality perlbug -reports for issues he discovered by fuzzing with AFL. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. +XXX Generate this with: + + perl Porting/acknowledgements.pl v5.31.2..HEAD =head1 Reporting Bugs