diff options
author | Ricardo Signes <rjbs@cpan.org> | 2016-03-13 19:22:56 -0400 |
---|---|---|
committer | Ricardo Signes <rjbs@cpan.org> | 2016-04-10 19:37:51 -0400 |
commit | 957eb5eda34e343cfacd85d01cb4355460901228 (patch) | |
tree | 371eb8d7ca9553970608c1c3f4aa52a56991ce21 | |
parent | d8c1164880e88f2d7a7e2a827ea7e4e2a4f9485d (diff) | |
download | perl-957eb5eda34e343cfacd85d01cb4355460901228.tar.gz |
perldelta: merge in changes from perl5238delta
-rw-r--r-- | Porting/perl5240delta.pod | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/Porting/perl5240delta.pod b/Porting/perl5240delta.pod index 6f31a52415..68bc9e07e5 100644 --- a/Porting/perl5240delta.pod +++ b/Porting/perl5240delta.pod @@ -78,6 +78,13 @@ That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends the existing reordering mechanism (which allows reordering for arguments that are used as format fields, widths, and vector separators). +=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO> + +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 Security =head2 fix out of boundary access in Win32 path handling @@ -95,8 +102,27 @@ L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862> Added validation that will detect both a short salt and invalid characters in the salt. L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922> +=head2 Set proper umask before calling C<mkstemp(3)> + +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. + +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. + +This has been fixed by using umask 0177 instead. [perl #127322] + =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>. + =head2 C<qr/\b{wb}/> is now tailored to Perl expectations This is now more suited to be a drop-in replacement for plain C<\b>, but @@ -250,6 +276,19 @@ are called on handle with the C<:utf8> layer. =item * +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: + + sub f{} f(); + +=item * + +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. + +=item * + Many languages, such as Chinese, are caseless. Perl now knows about most modern commercially important ones, and skips much of the work when a program tries to change case in them (like C<ucfirst()>) or match @@ -456,6 +495,28 @@ exports anything. [perl #125410] =head2 Changes to Existing Documentation +=head3 L<perlguts> + +=over 4 + +=item * + +A new section has been added, L<perlguts/"Dynamic Scope and the Context +Stack">, which explains how the perl context stack works. + +=back + +=head3 L<perlmodlib> + +=over 4 + +=item * + +We now recommend contacting the module-authors list or PAUSE in seeking +guidance on the naming of modules. + +=back + =head3 L<perlsyn> =over 4 @@ -718,6 +779,11 @@ L<Character following \p must be '{' or a single-character Unicode property name =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>"> + +=item * + L<Illegal user-defined property name|perldiag/"Illegal user-defined property name"> =item * @@ -731,6 +797,16 @@ zeroes or overflows perl's unsigned integer representation. L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> +=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>"> + =back =head3 New Warnings @@ -739,6 +815,11 @@ L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE =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>> + +=item * + L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles"> (W deprecated) The sysread(), recv(), syswrite() and send() operators @@ -801,6 +882,18 @@ L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" =item * +The GNU Make makefile for Win32 now supports parallel builds. [perl #126632] + +=item * + +You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632] + +=item * + +Bison 3.0 is now supported. + +=item * + F<Configure> no longer probes for F<libnm> by default. Originally this was the "New Math" library, but the name has been re-used by the GNOME NetworkManager. @@ -953,6 +1046,20 @@ negative pid like so: to signal all processes in the same group as C<$pid>. +=item * + +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. + +=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 FreeBSD @@ -1006,6 +1113,11 @@ During miniperl's process startup, during the build process, 4 to 8 IO calls related to the process starting F<.pl> and the F<buildcustomize.pl> file were removed from the code opening and executing the first 1 or 2 F<.pl> files. +=item * + +Builds using Microsoft Visual C++ 2003 and earlier no longer produce +an "INTERNAL COMPILER ERROR" message. [perl #126045] + =back =item EBCDIC @@ -1125,6 +1237,107 @@ Perl 5.22.1. =item * +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: + +=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. + +=item * + +Various macros, which now consistently have a CX_ prefix, have been added: + + CX_CUR(), CX_LEAVE_SCOPE(), CX_POP() + +or renamed: + + CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST() + +=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 + + ENTER; SAVETMPS; ....; LEAVE + +=item * + +C<cx_popblock()> now also restores C<PL_curpm>. + +=item * + +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. + +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). + +=item * + +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 * + +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. + +=item * + +Various context struct fields have been added, removed or modified. + +=item * + +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 * + +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. + +=item * + +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>. + +=item * + +Some variables formerly declared by C<dMULTICALL> (but not documented) have +been removed. + +=back + +=item * + The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has been removed. It was documented as deprecated in Perl 5.20, with a statement that it would be removed early in the 5.21.x series; that has now finally @@ -1217,6 +1430,89 @@ C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed. =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 * + +C<< unless ( I<assignment> ) >> now properly warns when syntax +warnings are enabled. [perl #127122] + +=item * + +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] + +=item * + +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] + +=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] + +=item * + +Fixed an operator precedence problem when C< castflags & 2> is true. +[perl #127474] + +=item * + +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] + +=item * + +The AUTOLOAD method is now called when searching for a DESTROY method, +and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494] + +=item * + +Avoid parsing beyond the end of the buffer when processing a C<#line> +directive with no filename. [perl #127334] + +=item * + +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] + +=item * + +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] + +=item * + +Perl 5.22 added support to the C99 hexadecimal floating point notation, +but sometimes misparses hex floats. This had been fixed. +[perl #127183] + +=item * + A regression that allowed undeclared barewords in hash keys to work despite strictures has been fixed. L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981> |