diff options
Diffstat (limited to 'pod/perldelta.pod')
-rw-r--r-- | pod/perldelta.pod | 475 |
1 files changed, 183 insertions, 292 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a520e733e1..5a9311f88a 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,172 +2,163 @@ =head1 NAME -perldelta - what is new for perl v5.23.8 +[ 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.9 =head1 DESCRIPTION -This document describes differences between the 5.23.7 release and the 5.23.8 +This document describes differences between the 5.23.8 release and the 5.23.9 release. -If you are upgrading from an earlier release such as 5.23.6, first read -L<perl5237delta>, which describes differences between 5.23.6 and 5.23.7. +If you are upgrading from an earlier release such as 5.23.7, first read +L<perl5238delta>, which describes differences between 5.23.7 and 5.23.8. -=head1 Core Enhancements +=head1 Notice -=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO> +XXX Any important notices here -When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the -C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now -included in the hash passed to the handler, if supported by the -platform. +=head1 Core Enhancements -=head1 Security +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</Performance Enhancements> section. -=head2 Set proper umask before calling C<mkstemp(3)> +[ List each enhancement as a =head2 entry ] -In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)> -and restoring it afterwards. This wrongfully tells open(2) to strip -the owner read and write bits from the given mode before applying it, -rather than the intended negation of leaving only those bits in place. +=head1 Security -Systems that use mode 0666 in C<mkstemp(3)> (like old versions of -glibc) create a file with permissions 0066, leaving world read and -write permissions regardless of current umask. +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L</Selected Bug Fixes> section. -This has been fixed by using umask 0177 instead. [perl #127322] +[ List each security issue as a =head2 entry ] =head1 Incompatible Changes -=head2 C<qr/\N{}/> now disallowed under C<use re "strict"> - -An empty C<\N{}> makes no sense, but for backwards compatibility is -silently accepted as doing nothing. But now this is a fatal error under -the experimental feature L<re/'strict' mode>. - -=head1 Performance Enhancements - -=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</Reporting Bugs> below. -The overhead of scope entry and exit has been considerably reduced, so -for example subroutine calls, loops and basic blocks are all faster now. -This empty function call now takes about a third less time to execute: +[ List each incompatible change as a =head2 entry ] - sub f{} f(); +=head1 Deprecations -=item * +XXX Any deprecated features, syntax, modules etc. should be listed here. -On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not -exist, is now 3.5x faster on a SSD (or any drive) than before. +=head2 Module removals -=back +XXX Remove this section if inapplicable. -=head1 Modules and Pragmata +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. -=head2 Updated Modules and Pragmata +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. -=over 4 +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. -=item * +=over -F<cpan/podlators/> has been upgraded from version 4.04 to 4.06. +=item XXX -=item * +XXX Note that deprecated modules should be listed here even if they are listed +as an updated module in the L</Modules and Pragmata> section. -The PathTools module collection has been upgraded from version 3.62 -to 3.63. +=back -=item * +[ List each other deprecation as a =head2 entry ] -L<DynaLoader> has been upgraded from version 1.37 to 1.38. +=head1 Performance Enhancements -DynaLoader now always looks for bootstrap files having the same base name as -the module for which the bootstrap code is being run. Previously, and only on -platforms that use C<mod2fname> to produce unique loadable library names, -L<DynaLoader> would look for the bootstrap file using a base name that matched -the loadable library and not find it. +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<Encode> has been upgraded from version 2.78 to 2.80. +=over 4 =item * -L<ExtUtils::CBuilder> has been upgraded from version 0.280224 to 0.280225. +XXX -=item * +=back -L<ExtUtils::MakeMaker> has been upgraded from version 7.10 to 7.10_01. +=head1 Modules and Pragmata -=item * +XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary +for important changes should then be added by hand. In an ideal world, +dual-life modules would have a F<Changes> file that could be cribbed. -L<File::Spec> has been upgraded from version 3.62 to 3.63. +[ Within each section, list entries as a =item entry ] -=item * +=head2 New Modules and Pragmata -L<IPC::SysV> has been upgraded from version 2.04 to 2.05. +=over 4 =item * -L<Module::CoreList> has been upgraded from version 5.20160120 to 5.20160121. - -=item * +XXX -L<ODBM_File> has been upgraded from version 1.12 to 1.13. +=back -=item * +=head2 Updated Modules and Pragmata -L<PerlIO::encoding> has been upgraded from version 0.23 to 0.24. +=over 4 =item * -L<POSIX> has been upgraded from version 1.59 to 1.63. +L<XXX> has been upgraded from version A.xx to B.yy. -It can now export constants for the C<code> value in the hash passed to the -L<sigaction|POSIX/sigaction> handler when using the C<SA_SIGINFO> flag. - -These previously deprecated functions are now removed: C<isalnum>, -C<isalpha>, C<iscntrl>, C<isdigit>, C<isgraph>, C<islower>, C<isprint>, -C<ispunct>, C<isspace>, C<isupper>, and C<isxdigit>. +=back -=item * +=head2 Removed Modules and Pragmata -L<Storable> has been upgraded from version 2.54 to 2.55. +=over 4 =item * -L<Time::HiRes> has been upgraded from version 1.9728 to 1.9730. - -It can now export Linux-specific and FreeBSD-specific C<clock_gettime()> -constants. It also now has emulation for OS X C<clock_nanosleep()>, -C<clock_gettime()>, and C<clock_getres()>. +XXX =back =head1 Documentation -=head2 Changes to Existing Documentation +XXX Changes to files in F<pod/> go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L<perlfunc>. -=head3 L<perlguts> +=head2 New Documentation -=over 4 +XXX Changes which create B<new> files in F<pod/> go here. -=item * +=head3 L<XXX> -A new section has been added, L<perlguts/"Dynamic Scope and the Context -Stack">, which explains how the perl context stack works. +XXX Description of the purpose of the new file here -=back +=head2 Changes to Existing Documentation -=head3 L<perlmodlib> +XXX Changes which significantly change existing files in F<pod/> go here. +However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics> +section. + +=head3 L<XXX> =over 4 =item * -We now recommend contacting the module-authors list or PAUSE in seeking -guidance on the naming of modules. +XXX Description of the change here =back @@ -177,26 +168,21 @@ 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<perldiag>. +XXX New or changed warnings emitted by the core's C<C> code go here. Also +include any changes in L<perldiag> that reconcile it to the C<C> code. + =head2 New Diagnostics +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings + =head3 New Errors =over 4 =item * -L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> - -=item * - -L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>"> - -=item * - -L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>"> +XXX L<message|perldiag/"message"> =back @@ -206,288 +192,193 @@ L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> =item * -L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>| -perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>> +XXX L<message|perldiag/"message"> =back -=head1 Configuration and Compilation - -=over 4 - -=item * - -The GNU Make makefile for Win32 now supports parallel builds. [perl #126632] +=head2 Changes to Existing Diagnostics -=item * +XXX Changes (i.e. rewording) of diagnostic messages go here -You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632] +=over 4 =item * -Bison 3.0 is now supported. +XXX Describe change here =back -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 +=head1 Utility Changes -=item VMS +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. +Most of these are built within the directory F<utils>. -=over +[ List utility changes as a =head2 entry for each utility and =item +entries for each change +Use L<XXX> with program names to get proper documentation linking. ] -=item * +=head2 L<XXX> -For those C<%ENV> elements based on the CRTL environ array, we've always -preserved case when setting them but did look-ups only after upcasing the -key first, which made lower- or mixed-case entries go missing. This problem -has been corrected by making C<%ENV> elements derived from the environ array -case-sensitive on look-up as well as case-preserving on store. +=over 4 =item * -Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only -considered logical names, but now consider all sources of C<%ENV> as -determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>. - -=back - -=item Win32 - -Builds using Microsoft Visual C++ 2003 and earlier no longer produce -an "INTERNAL COMPILER ERROR" message. [perl #126045] +XXX =back -=head1 Internal Changes - -=over 4 +=head1 Configuration and Compilation -=item * +XXX Changes to F<Configure>, F<installperl>, F<installman>, 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</Platform Support> section, instead. -The implementation of perl's context stack system, and its internal API, -have been heavily reworked. Note that no significant changes have been -made to any external APIs, but XS code which relies on such internal -details may need to be fixed. The main changes are: +[ List changes as a =item entry ]. =over 4 =item * -The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static -inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use -function args rather than implicitly relying on local vars such as -C<gimme> and C<newsp> being available. Also their functionality has -changed: in particular, C<cx_popblock()> no longer decrements -C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions -involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new -documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for -details on how to use them. +XXX -=item * +=back -Various macros, which now consistently have a CX_ prefix, have been added: +=head1 Testing - CX_CUR(), CX_LEAVE_SCOPE(), CX_POP() +XXX Any significant changes to the testing of a freshly built perl should be +listed here. Changes which create B<new> files in F<t/> go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F<t/> aren't worth summarizing, although the bugs +that they represent may be covered elsewhere. -or renamed: +[ List each test improvement as a =item entry ] - CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST() +=over 4 =item * -C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so -C<pp_enter*> and C<pp_leave*> no longer do +XXX - ENTER; SAVETMPS; ....; LEAVE +=back -=item * +=head1 Platform Support -C<cx_popblock()> now also restores C<PL_curpm>. +XXX Any changes to platform support should be listed in the sections below. -=item * +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -In C<dounwind()> for every context type, the current savestack frame is -now processed before each context is popped; formerly this was only done -for sub-like context frames. This action has been removed from -C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which -must be called before C<cx_popsub()> etc. +=head2 New Platforms -C<dounwind()> now also does a C<cx_popblock()> on the last popped frame -(formerly it only did the C<cx_popsub()> etc. actions on each frame). +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<hints/> +directories, or new subdirectories and F<README> files at the top level of the +source tree. -=item * +=over 4 -The temps stack is now freed on scope exit; previously, temps created -during the last statement of a block wouldn't be freed until the next -C<nextstate> following the block (apart from an existing hack that did -this for recursive subs in scalar context); and in something like -C<f(g())>, the temps created by the last statement in C<g()> would -formerly not be freed until the statement following the return from -C<f()>. +=item XXX-some-platform -=item * +XXX -Most values that were saved on the savestack on scope entry are now -saved in suitable new fields in the context struct, and saved and -restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much -faster. +=back -=item * +=head2 Discontinued Platforms -Various context struct fields have been added, removed or modified. +XXX List any platforms that this version of perl no longer compiles on. -=item * +=over 4 -The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been -considerably tidied up, including removing the C<argarray> field from the -context struct, and extracting out some common (but rarely used) code into -a separate function, C<clear_defarray()>. Also, useful subsets of -C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been -gathered into the new functions C<cx_popsub_args()> and -C<cx_popsub_common()>. +=item XXX-some-platform -=item * +XXX + +=back -C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest -of the C<pp_leave*>'s to process return args. +=head2 Platform-Specific Notes -=item * +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</Modules and Pragmata> section. -C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and -C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>. +=over 4 -=item * +=item XXX-some-platform -Some variables formerly declared by C<dMULTICALL> (but not documented) have -been removed. +XXX =back -=back +=head1 Internal Changes -=head1 Selected Bug Fixes +XXX Changes which affect the interface available to C<XS> 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 * -Line numbers larger than 2**31-1 but less than 2**32 are no longer -returned by caller() as negative numbers. [perl #126991] - -=item * +XXX -C<< unless ( I<assignment> ) >> now properly warns when syntax -warnings are enabled. [perl #127122] +=back -=item * +=head1 Selected Bug Fixes -Setting an C<ISA> glob to an array reference now properly adds -C<isaelem> magic to any existing elements. Previously modifying such -an element would not update the ISA cache, so method calls would call -the wrong function. Perl would also crash if the C<ISA> glob was -destroyed, since new code added in 5.23.7 would try to release the -C<isaelem> magic from the elements. [perl #127351] +XXX Important bug fixes in the core language are summarized here. Bug fixes in +files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>. -=item * +[ List each fix as a =item entry ] -If a here-doc was found while parsing another operator, the parser had -already read end of file, and the here-doc was not terminated, perl -could produce an assertion or a segmentation fault. This now reliably -complains about the unterminated here-doc. [perl #125540] +=over 4 =item * -untie() would sometimes return the last value returned by the UNTIE() -handler as well as it's normal value, messing up the stack. [perl -#126621] +XXX -=item * - -Fixed an operator precedence problem when C< castflags & 2> is true. -[perl #127474] +=back -=item * +=head1 Known Problems -Caching of DESTROY methods could result in a non-pointer or a -non-STASH stored in the SvSTASH() slot of a stash, breaking the B -STASH() method. The DESTROY method is now cached in the MRO metadata -for the stash. [perl #126410] +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be C<TODO>ed for the release would be noted here. Unfixed +platform specific bugs also go here. -=item * +[ List each fix as a =item entry ] -The AUTOLOAD method is now called when searching for a DESTROY method, -and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494] +=over 4 =item * -Avoid parsing beyond the end of the buffer when processing a C<#line> -directive with no filename. [perl #127334] - -=item * +XXX -Perl now raises a warning when a regular expression pattern looks like -it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but -there was some slight defect in its specification which causes it to -instead be treated as a regular bracketed character class. An example -would be missing the second colon in the above like this: -C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters. -The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">, -C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended -meaning, and now a warning is raised. No warning is raised unless the -specification is very close to one of the 14 legal POSIX classes. (See -L<perlrecharclass/POSIX Character Classes>.) -[perl #8904] +=back -=item * +=head1 Errata From Previous Releases -Certain regex patterns involving a complemented POSIX class in an -inverted bracketed character class, and matching something else -optionally would improperly fail to match. An example of one that could -fail is C</qr/_?[^\Wbar]\x{100}/>. This has been fixed. -[perl #127537] +=over 4 =item * -Perl 5.22 added support to the C99 hexadecimal floating point notation, -but sometimes misparses hex floats. This had been fixed. -[perl #127183] +XXX Add anything here that we forgot to add, or were mistaken about, in +the perldelta of a previous release. =back -=head1 Acknowledgements - -Perl 5.23.8 represents approximately 4 weeks of development since Perl 5.23.7 -and contains approximately 30,000 lines of changes across 350 files from 23 -authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 14,000 lines of changes to 210 .pm, .t, .c and .h files. +=head1 Obituary -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.23.8: +XXX If any significant core contributor has died, we've added a short obituary +here. -Aaron Crane, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari -Mannsåker, Daniel Dragan, David Mitchell, Ed J, Herbert Breunung, H.Merijn -Brand, James E Keenan, Jarkko Hietaniemi, Karl Williamson, Lukas Mai, Niko -Tyni, Pip Cet, Ricardo Signes, Sawyer X, Sisyphus, Stevan Little, Steve Hay, -Todd Rinaldo, Tom Hukins, Tony Cook. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. +=head1 Acknowledgements -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. +XXX Generate this with: -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. + perl Porting/acknowledgements.pl v5.23.8..HEAD =head1 Reporting Bugs |