X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/c0755d0f10aaf12573eabf0bd12a4aa182802211..d005d3c3ee5a7a24dbca1fc4a1d251e86eccb6ed:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 56b4e98..f97c710 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,464 +2,393 @@ =head1 NAME -perldelta - what is new for perl v5.23.4 +[ 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.23.7 =head1 DESCRIPTION -This document describes differences between the 5.23.3 release and the 5.23.4 +This document describes differences between the 5.23.6 release and the 5.23.7 release. -If you are upgrading from an earlier release such as 5.23.2, first read -L, which describes differences between 5.23.2 and 5.23.3. - -=head1 Incompatible Changes - -=head2 Lexical $_ has been removed - -C was introduced in Perl 5.10, and subsequently caused much confusion -with no obvious solution. In Perl 5.18.0, it was made experimental on the -theory that it would either be removed or redesigned in a less confusing (but -backward-incompatible) way. Over the following years, no alternatives were -proposed. The feature has now been removed and will fail to compile. - -=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>. - -The experimental Extended Bracketed Character Classes can contain regular -bracketed character classes within them. These differ from regular ones in -that white space is generally ignored, unless escaped by preceding it with a -backslash. The white space that is ignored is now limited to just tab C<\t> -and SPACE characters. Previously, it was any white space. See -L. - -=head1 Performance Enhancements +If you are upgrading from an earlier release such as 5.23.5, first read +L, which describes differences between 5.23.5 and 5.23.6. -=over 4 +=head1 Notice -=item * +XXX Any important notices here -C has been made much faster. +=head1 Core Enhancements -On platforms with a libc memchr() implementation which makes good use of -underlying hardware support, patterns which include fixed substrings will now -often be much faster; for example with glibc on a recent x86_64 CPU, this: +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. - $s = "a" x 1000 . "wxyz"; - $s =~ /wxyz/ for 1..30000 +[ List each enhancement as a =head2 entry ] -is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit ARM -Raspberry Pi, there will be a small or little speedup. Conversely, some -pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3 -times slower on the rPi, 1.5x slower on x86_64. +=head1 Security -=back +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L section. -=head1 Modules and Pragmata +[ List each security issue as a =head2 entry ] -=head2 Updated Modules and Pragmata +=head1 Incompatible Changes -=over 4 +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 1.59 to 1.60. +[ List each incompatible change as a =head2 entry ] -=item * +=head2 C is now tailored to Perl expectations -L has been upgraded from version 0.40 to 0.41. +This is now more suited to be a drop-in replacement for plain C<\b>, but +giving better results for parsing natural language. Previously it +strictly followed the current Unicode rules which calls for it to match +between each white space character. Now it doesn't generally match +within spans of white space, behaving like C<\b> does. See +L -=item * +=head1 Deprecations -L has been upgraded from version 2.068 to 2.069. +XXX Any deprecated features, syntax, modules etc. should be listed here. -=item * +=head2 Module removals -L has been upgraded from version 2.068_01 to 2.069. +XXX Remove this section if inapplicable. -=item * +The following modules will be removed from the core distribution in a +future release, and will at that time need to be installed from CPAN. +Distributions on CPAN which require these modules will need to list them as +prerequisites. -L has been upgraded from version 3.31 to 3.32. +The core versions of these modules will now issue C<"deprecated">-category +warnings to alert you to this fact. To silence these deprecation warnings, +install the modules in question from CPAN. -=item * +Note that these are (with rare exceptions) fine modules that you are encouraged +to continue to use. Their disinclusion from core primarily hinges on their +necessity to bootstrapping a fully functional, CPAN-capable Perl installation, +not usually on concerns over their design. -L has been upgraded from version 1.34 to 1.35. +=over -=item * +=item XXX -L has been upgraded from version 2.77 to 2.78. +XXX Note that deprecated modules should be listed here even if they are listed +as an updated module in the L section. -=item * +=back -L has been upgraded from version 0.014 to 0.016. +[ List each other deprecation as a =head2 entry ] -=item * +=head1 Performance Enhancements -L has been upgraded from version 0.280223 to 0.280224. +XXX Changes which enhance performance without changing behaviour go here. +There may well be none in a stable release. -=item * +[ List each enhancement as a =item entry ] -L has been upgraded from version 2.11 to 2.12. +=over 4 =item * -L has been upgraded from version 0.0605 to 0.0606. - -=item * +XXX -L has been upgraded from version 1.35 to 1.36. +=back -For an IO::Poll object C<$poll> with no file handles yet in it, -C<$poll-Epoll(10)> now sleeps for up to 10 seconds anyway instead of -returning 0 immediately. -L<[cpan #25049]|https://rt.cpan.org/Ticket/Display.html?id=25049> +=head1 Modules and Pragmata -=item * +XXX All changes to installed files in F, F, F and F +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F. A paragraph summary +for important changes should then be added by hand. In an ideal world, +dual-life modules would have a F file that could be cribbed. -The IO-Compress modules have been upgraded from version 2.068 to 2.069. +[ Within each section, list entries as a =item entry ] -=item * +=head2 New Modules and Pragmata -L has been upgraded from version 1.999701 to 1.999704. +=over 4 =item * -L has been upgraded from version 0.31 to 0.34. - -=item * +XXX -L has been upgraded from version 5.20150920 to 5.20151020. +=back -=item * +=head2 Updated Modules and Pragmata -L has been upgraded from version 1.000027 to 1.000029. +=over 4 =item * -L has been upgraded from version 1.008 to 1.009. +L has been upgraded from version 5.20151220 to 5.20160120. =item * -L has been upgraded from version 0.21 to 0.22. - -PerlIO::encoding objects are now properly duplicated. -L<[perl #31923]|https://rt.perl.org/Ticket/Display.html?id=31923> +The F bundle has been upgraded from version 2.28 to 4.04. -=item * +=back -L has been upgraded from version 1.57 to 1.58. +=head2 Removed Modules and Pragmata -If C was passed C<$!> as its argument then it accidentally -cleared C<$!>. This has been fixed. -L<[perl #126229]|https://rt.perl.org/Ticket/Display.html?id=126229> +=over 4 =item * -L has been upgraded from version 2.020_01 to 2.020_02. - -Various fixes have been applied to inet_pton for the benefit of MS VC++ builds -on Windows. In particular, this restores the build with MS VC++ 6.0. +XXX -=item * +=back -L has been upgraded from version 1.19 to 1.21. +=head1 Documentation -=item * +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. -L has been upgraded from version 1.33 to 1.35. +=head2 New Documentation -The C example now actually uses C. -L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051> +XXX Changes which create B files in F go here. -=back +=head3 L -=head1 Documentation +XXX Description of the purpose of the new file here =head2 Changes to Existing Documentation -=head3 L +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. + +=head3 L =over 4 =item * -The process of using undocumented globals has been documented, namely, that one -should send email to L -first to get the go-ahead for documenting and using an undocumented function or -global variable. +XXX Description of the change here =back -=head3 L +=head1 Diagnostics -=over 4 +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. -=item * +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. -Updated to note that anonymous subroutines can have signatures. +=head2 New Diagnostics -=back +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings -=head3 L +=head3 New Errors =over 4 =item * -The usage of C and C has been clarified. +XXX L =back -=head3 L +=head3 New Warnings =over 4 =item * -The specific true value of C<$!{E...}> is now documented, noting that it is -subject to change and not guaranteed. +XXX L =back -=head1 Diagnostics - -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 New Diagnostics +=head2 Changes to Existing Diagnostics -=head3 New Errors +XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * -L - -=item * +Accessing the C part of a glob as C instead of C is no +longer deprecated. It is discouraged to encourage uniformity (so that, for +example, one can grep more easily) but it will not be removed. [perl #127060] -L +=back -=item * +=head1 Utility Changes -L +XXX Changes to installed programs such as F and F go here. +Most of these are built within the directory F. -=back +[ List utility changes as a =head2 entry for each utility and =item +entries for each change +Use L with program names to get proper documentation linking. ] -=head2 Changes to Existing Diagnostics +=head2 L =over 4 =item * -L - -This error now reports the name of the non-lvalue subroutine you attempted to -use as an lvalue. +XXX =back =head1 Configuration and Compilation -=over 4 +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. -=item * +[ List changes as a =item entry ]. -Using the C define in combination with the default hash algorithm -C resulted in a fatal error while compiling -the interpreter, since Perl 5.17.10. This has been fixed. +=over 4 =item * -If you had F hints for C or C, they were -probably broken by the AmigaOS changes in Perl 5.23.3. This has been now -fixed. -L<[perl #126152]|https://rt.perl.org/Ticket/Display.html?id=126152> +F no longer probes for F by default. Originally +this was the "New Math" library, but the name has been re-used by the +GNOME NetworkManager. [perl #127131] =back -=head1 Platform Support - -=head2 Platform-Specific Notes +=head1 Testing -=over 4 +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 IRIX +[ List each test improvement as a =item entry ] -=over - -=item * - -Under some circumstances IRIX stdio fgetc() and fread() set the errno to -C, which made no sense according to either IRIX or POSIX docs. Errno -is now cleared in such cases. -L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977> +=over 4 =item * -Problems when multiplying long doubles by infinity have been fixed. -L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396> +XXX =back -=item MacOS X - -=over - -=item * - -Until now OS X builds of perl have specified a link target of 10.3 (Panther, -2003) but have not specified a compiler target. From now on, builds of perl on -OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X -version and specify that as the explicit build target in both compiler and -linker flags, thus preserving binary compatibility for extensions built later -regardless of changes in OS X, SDK, or compiler and linker versions. To -override the default value used in the build and preserved in the flags, -specify C before configuring and building -perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or -earlier there is no change to the behavior present when those systems were -current; the link target is still OS X 10.3 and there is no explicit compiler -target. +=head1 Platform Support -=back +XXX Any changes to platform support should be listed in the sections below. -=item VMS +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -=over +=head2 New Platforms -=item * +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. -Perl now implements its own C by scanning for processes in the -specified process group, which may not mean exactly the same thing as a Unix -process group, but allows us to send a signal to a parent (or master) process -and all of its sub-processes. At the perl level, this means we can now send a -negative pid like so: +=over 4 - kill SIGKILL, -$pid; +=item XXX-some-platform -to signal all processes in the same group as C<$pid>. +XXX =back -=item Win32 +=head2 Discontinued Platforms -=over +XXX List any platforms that this version of perl no longer compiles on. -=item * +=over 4 -A new build option C has been added to the makefiles. This -option is off by default, meaning the default is to do Windows registry -lookups. This option stops Perl from looking inside the registry for anything. -For what values are looked up in the registry see L. Internally, in -C, the name of this option is C. +=item XXX-some-platform -=item * +XXX -The behavior of Perl using C and -C to lookup certain values, including C<%ENV> -vars starting with C has changed. Previously, the 2 keys were checked -for entries at all times through Perl processes life time even if they did not -exist. For performance reasons, now, if the root key (i.e. -C or C) does -not exist at process start time, it will not be checked again for C<%ENV> -override entries for the remainder of the Perl processes life. This more -closely matches Unix behaviour in that the environment is copied or inherited -on startup and changing the variable in the parent process or another process -or editing F<.bashrc> will not change the environmental variable in other -existing, running, processes. +=back -=item * +=head2 Platform-Specific Notes -One glob fetch was removed for each C<-X> or C call whether done from -Perl code or internally from Perl's C code. The glob being looked up was -C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and -C slightly faster. +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. -=item * +=over 4 -During miniperl's process startup, during the build process, 4 to 8 IO calls -related to the process starting F<.pl> and the F file were -removed from the code opening and executing the first 1 or 2 F<.pl> files. +=item XXX-some-platform -=back +XXX =back =head1 Internal Changes -=over 4 +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 a =item entry ] -L had its return type changed from C to C. It -previously has always returned C<0> since Perl 5.000 stable but that was -undocumented. Although C is marked as public API, XS code is not -expected to be impacted since the proper API call would be through public API -C, or quasi-public C, or non-public -C calls, and the return value of C was previously a -meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>. +=over 4 =item * -The C and C macros have been improved to avoid various issues -with integer truncation and wrapping. In particular, some casts formerly used -within the macros have been removed. This means for example that passing an -unsigned nitems argument is likely to raise a compiler warning now (it's always -been documented to require a signed value; formerly int, lately SSize_t). +XXX =back =head1 Selected Bug Fixes +XXX Important bug fixes in the core language are summarized here. Bug fixes in +files in F and F are best summarized in L. + +[ List each fix as a =item entry ] + =over 4 =item * -There were places in regular expression patterns where comments (C<(?#...)>) -weren't allowed, but should have been. This is now fixed. -L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639> +Calls to the placeholder C<&PL_sv_yes> used internally when an +import() or unimport() method isn't found now correctly handle scalar +context. [perl #126042] =item * -Some regressions from Perl 5.20 has been fixed, in which some syntax errors in -L|perlrecharclass/Extended Bracketed Character Classes> constructs -within regular expression patterns could cause a segfault instead of a proper -error message. -L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180> -L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404> +Fixed some problems introduced in 5.23.2 with list assignment dealing +with magic and XS functions returning their arguments. [perl #126633] =item * -Some problems with attempting to extend the perl stack to around 2G or 4G -entries have been fixed. This was particularly an issue on 32-bit perls built -to use 64-bit integers, and was easily noticeable with the list repetition -operator, e.g. +Report more context when we see an array where we expect to see an +operator. [perl #123737] - @a = (1) x $big_number +=item * -Formerly perl may have crashed, depending on the exact value of C<$big_number>; -now it will typically raise an exception. -L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937> +Modifying an array that was previously a package C<@ISA> no longer +causes assertion failures or crashes. [perl #123788] -=item * +=back -In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if -the condition is C<(?!)> then perl failed the match outright instead of -matching the no-pattern. This has been fixed. -L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222> +=head1 Known Problems -=item * +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. -The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional -argument and set C/C appropriately as well. -L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186> +[ List each fix as a =item entry ] + +=over 4 =item * -Several bugs, including a segmentation fault, have been fixed with the bounds -checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>, -C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty -string; none of the C<\b{}> ones do. -L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319> +XXX =back @@ -469,25 +398,21 @@ L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319> =item * -(This was actually done in Perl 5.23.2, but the perldelta entry got missed.) -The way that C handles assignment with potentially common values -(e.g. C<($a,$b) = ($b, $a)> has changed. In particular the C -flag has been replaced with three more specific flags: +XXX Add anything here that we forgot to add, or were mistaken about, in +the perldelta of a previous release. - OPpASSIGN_COMMON_AGG - OPpASSIGN_COMMON_RC1 - OPpASSIGN_COMMON_SCALAR +=back -and the runtime now sometimes does a mark and sweep using the C to -detect common elements. +=head1 Obituary -=back +XXX If any significant core contributor has died, we've added a short obituary +here. =head1 Acknowledgements XXX Generate this with: - perl Porting/acknowledgements.pl v5.23.3..HEAD + perl Porting/acknowledgements.pl v5.23.6..HEAD =head1 Reporting Bugs