This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge perl5256delta.pod
authorSawyer X <xsawyerx@cpan.org>
Wed, 10 May 2017 12:20:38 +0000 (14:20 +0200)
committerSawyer X <xsawyerx@cpan.org>
Wed, 10 May 2017 12:20:38 +0000 (14:20 +0200)
pod/perl5260delta.pod

index 98a3550..85be673 100644 (file)
@@ -186,6 +186,18 @@ C<(keys @_) = ...>, which are also errors.  [perl #128187]
 
 =item *
 
+Converting a single-digit string to a number is now substantially faster.
+
+=item *
+
+The internal op implementing the C<split> builtin has been simplified and
+sped up. Firstly, it no longer requires a subsidiary internal C<pushre> op
+to do its work. Secondly, code of the form C<my @x = split(...)> is now
+optimised in the same way as C<@x = split(...)>, and is therefore a few
+percent faster.
+
+=item *
+
 The rather slow implementation for the experimental subroutine signatures
 feature has been made much faster; it is now comparable in speed with the
 old-style C<my ($a, $b, @c) = @_>.
@@ -213,6 +225,12 @@ this matches the behaviour for non-bareword constants.
 
 =item *
 
+L<B::Concise> has been upgraded from version 0.998 to 0.999.
+
+Its output is now more descriptive for C<op_private> flags.
+
+=item *
+
 L<encoding> has been upgraded from version 2.17 to 2.17_01.
 
 This module's default mode is no longer supported as of Perl 5.25.3.  It now
@@ -234,6 +252,25 @@ end-of-file.  [perl #107726]
 
 =item *
 
+L<HTTP::Tiny> has been upgraded from version 0.064 to 0.070.
+
+Internal 599-series errors now include the redirect history.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.44 to 2.51.
+
+IPv6 addresses and C<AF_INET6> sockets are now supported, along with several
+other enhancements.
+
+=item *
+
+L<overload> has been upgraded from version 1.26 to 1.27.
+
+Its compilation speed has been improved slightly.
+
+=item *
+
 L<POSIX> has been upgraded from version 1.65 to 1.69. This remedies several
 defects in making its symbols exportable. [perl #127821]
 The C<POSIX::tmpnam()> interface has been removed,
@@ -255,6 +292,13 @@ with 5.8 has been restored.
 
 =item *
 
+L<Time::HiRes> has been upgraded from version 1.9739 to 1.9740_01.
+
+It now builds on systems with C++11 compilers (such as G++ 6 and Clang++
+3.9).
+
+=item *
+
 L<XSLoader> has been upgraded from version 0.21 to 0.22, fixing a security hole
 in which binary files could be loaded from a path outside of
 L<C<@INC>|perlvar/@INC>.
@@ -456,6 +500,14 @@ been removed> above.
 
 =item *
 
+Using the empty pattern (which re-executes the last successfully-matched
+pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has
+always previously yielded a segfault. It now produces an error: L<Use of the
+empty pattern inside of a regex code block is forbidden|perldiag/"Use of the
+empty pattern inside of a regex code block is forbidden">.
+
+=item *
+
 L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled">
 
 (F) To declare references to variables, as in C<my \%x>, you must first enable
@@ -552,6 +604,18 @@ the C<encoding> pragma, is no longer supported as of Perl 5.26.0.
 
 =item *
 
+Details as to the exact problem have been added to the diagnostics that
+occur when malformed UTF-8 is encountered when trying to convert to a
+code point.
+
+=item *
+
+Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly
+blames the variable for an uninitialized-value warning encountered by the
+tied/magical code.
+
+=item *
+
 L<Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in m/%s/">
 
 The word "here" has been added to the message that was raised in
@@ -620,6 +684,11 @@ tests for perlbug. [perl #128020]
 
 =item *
 
+Builds using C<USE_PAD_RESET> now work again; this configuration had
+bit-rotted.
+
+=item *
+
 A probe for C<gai_strerror> was added to F<Configure> that checks if the
 the gai_strerror() routine is available and can be used to
 translate error codes returned by getaddrinfo() into human
@@ -695,6 +764,22 @@ The build process no longer emits an extra blank line before building each
 
 =item *
 
+Some parts of the test suite that try to exhaustively test edge cases in the
+regex implementation have been restricted to running for a maximum of five
+minutes. On slow systems they could otherwise take several hours, without
+significantly improving our understanding of the correctness of the code
+under test.
+
+In addition, some of those test cases have been split into more files, to
+allow them to be run in parallel on suitable systems.
+
+=item *
+
+A new internal facility allows analysing the time taken by the individual
+tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>.
+
+=item *
+
 F<t/re/regexp_nonull.t> has been added to test that the regular expression
 engine can handle scalars that do not have a null byte just past the end of
 the string.
@@ -722,6 +807,84 @@ source tree. [perl #124050]
 
 =item *
 
+The C<PADOFFSET> type has changed from being unsigned to signed, and
+several pad-related variables such as C<PL_padix> have changed from being
+of type C<I32> to type C<PADOFFSET>.
+
+=item *
+
+The function C<L<perlapi/utf8n_to_uvchr>> has been changed to not
+abandon searching for other malformations when the first one is
+encountered.  A call to it thus can generate multiple diagnostics,
+instead of just one.
+
+=item *
+
+A new function, C<L<perlapi/utf8n_to_uvchr_error>>, has been added for
+use by modules that need to know the details of UTF-8 malformations
+beyond pass/fail.  Previously, the only ways to know why a sequence was
+ill-formed was to capture and parse the generated diagnostics, or to do
+your own analysis.
+
+=item *
+
+Several new functions for handling Unicode have been added to the API:
+C<L<perlapi/is_strict_utf8_string>>,
+C<L<perlapi/is_c9strict_utf8_string>>,
+C<L<perlapi/is_utf8_string_flags>>,
+C<L<perlapi/is_strict_utf8_string_loc>>,
+C<L<perlapi/is_strict_utf8_string_loclen>>,
+C<L<perlapi/is_c9strict_utf8_string_loc>>,
+C<L<perlapi/is_c9strict_utf8_string_loclen>>,
+C<L<perlapi/is_utf8_string_loc_flags>>,
+C<L<perlapi/is_utf8_string_loclen_flags>>,
+C<L<perlapi/is_utf8_fixed_width_buf_flags>>,
+C<L<perlapi/is_utf8_fixed_width_buf_loc_flags>>,
+C<L<perlapi/is_utf8_fixed_width_buf_loclen_flags>>.
+
+These functions are all extensions of the C<is_utf8_string_*()> functions,
+that apply various restrictions to the UTF-8 recognized as valid.
+
+=item *
+
+A new API function C<sv_setvpv_bufsize()> allows simultaneously setting the
+length and allocated size of the buffer in an C<SV>, growing the buffer if
+necessary.
+
+=item *
+
+A new API macro C<SvPVCLEAR()> sets its C<SV> argument to an empty string,
+like Perl-space C<$x = ''>, but with several optimisations.
+
+=item *
+
+All parts of the internals now agree that the C<sassign> op is a C<BINOP>;
+previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant
+that several parts of the internals had to be special-cased to accommodate
+it. This oddity's original motivation was to handle code like C<$x ||= 1>;
+that is now handled in a simpler way.
+
+=item *
+
+Several new internal C macros have been added that take a string literal as
+arguments, alongside existing routines that take the equivalent value as two
+arguments, a character pointer and a length. The advantage of this is that
+the length of the string is calculated automatically, rather than having to
+be done manually. These routines are now used where appropriate across the
+entire codebase.
+
+=item *
+
+The code in F<gv.c> that determines whether a variable has a special meaning
+to Perl has been simplified.
+
+=item *
+
+The C<DEBUGGING>-mode output for regex compilation and execution has been
+enhanced.
+
+=item *
+
 Several macros and functions have been added to the public API for
 dealing with Unicode and UTF-8-encoded strings.  See
 L<perlapi/Unicode Support>.
@@ -758,6 +921,21 @@ build option does.
 
 =head1 Platform Support
 
+=head2 New Platforms
+
+=over 4
+
+=item NetBSD/VAX
+
+Perl now compiles under NetBSD on VAX machines.  However, it's not
+possible for that platform to implement floating-point infinities and
+NaNs compatibly with most modern systems, which implement the IEEE-754
+floating point standard.  The hexadecimal floating point (C<0x...p[+-]n>
+literals, C<printf %a>) is not implemented, either.
+The C<make test> passes 98% of tests.
+
+=back
+
 =head2 Platform-Specific Notes
 
 =over 4
@@ -808,6 +986,36 @@ the uninit CCTYPE var. Also fix else vs .ELSE in makefile.mk
 
 =item *
 
+A sub containing a "forward" declaration with the same name (e.g.,
+C<sub c { sub c; }>) could sometimes crash or loop infinitely.  [perl
+#129090]
+
+=item *
+
+A crash in executing a regex with a floating UTF-8 substring against a
+target string that also used UTF-8 has been fixed. [perl #129350]
+
+=item *
+
+Previously, a shebang line like C<#!perl -i u> could be erroneously
+interpreted as requesting the C<-u> option. This has been fixed. [perl
+#129336]
+
+=item *
+
+The regex engine was previously producing incorrect results in some rare
+situations when backtracking past a trie that matches only one thing; this
+showed up as capture buffers (C<$1>, C<$2>, etc) erroneously containing data
+from regex execution paths that weren't actually executed for the final
+match.  [perl #129897]
+
+=item *
+
+Certain regexes making use of the experimental C<regex_sets> feature could
+trigger an assertion failure. This has been fixed. [perl #129322]
+
+=item *
+
 Invalid assignments to a reference constructor (e.g., C<\eval=time>) could
 sometimes crash in addition to giving a syntax error.  [perl #125679]