This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
return inode numbers as strings where necessary
[perl5.git] / pod / perldelta.pod
index 129a578..1ba60a6 100644 (file)
@@ -2,20 +2,91 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.27.3
+[ 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.27.6
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.27.2 release and the 5.27.3
+This document describes differences between the 5.27.5 release and the 5.27.6
 release.
 
-If you are upgrading from an earlier release such as 5.27.1, first read
-L<perl5272delta>, which describes differences between 5.27.1 and 5.27.2.
+If you are upgrading from an earlier release such as 5.27.4, first read
+L<perl5275delta>, which describes differences between 5.27.4 and 5.27.5.
+
+=head1 Notice
+
+XXX Any important notices here
+
+=head1 Core Enhancements
+
+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.
+
+[ List each enhancement as a =head2 entry ]
+
+=head2 Initialisation of aggregate state variables
+
+A persistent lexical array or hash variable can now be initialized,
+by an expression such as C<state @a = qw(x y z)>.  Initialization of a
+list of persistent lexical variables is still not possible.
+
+=head2 Full-size inode numbers
+
+On platforms where inode numbers are of a type larger than perl's native
+integer numerical types, L<stat|perlfunc/stat> will preserve the full
+content of large inode numbers by returning them in the form of strings of
+decimal digits.  Exact comparison of inode numbers can thus be achieved by
+comparing with C<eq> rather than C<==>.  Comparison with C<==>, and other
+numerical operations (which are usually meaningless on inode numbers),
+work as well as they did before, which is to say they fall back to
+floating point, and ultimately operate on a fairly useless rounded inode
+number if the real inode number is too big for the floating point format.
+
+=head1 Security
+
+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.
+
+[ List each security issue as a =head2 entry ]
+
+=head1 Incompatible Changes
+
+XXX For a release on a stable branch, this section aspires to be:
+
+    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.
+
+[ List each incompatible change as a =head2 entry ]
+
+=head2 Yada-yada is now strictly a statement
+
+By the time of its initial stable release in Perl 5.12, the C<...>
+(yada-yada) operator was explicitly intended to serve as a statement,
+not an expression.  However, the original implementation was confused
+on this point, leading to inconsistent parsing.  The operator was
+accidentally accepted in a few situations where it did not serve as a
+complete statement, such as
+
+    ... . "foo";
+    ... if $a < $b;
+
+The parsing has now been made consistent, permitting yada-yada only as
+a statement.  Affected code can use C<do{...}> to put a yada-yada into
+an arbitrary expression context.
 
 =head1 Deprecations
 
+XXX Any deprecated features, syntax, modules etc. should be listed here.
+
 =head2 Module removals
 
+XXX Remove this section if inapplicable.
+
 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
@@ -32,38 +103,86 @@ not usually on concerns over their design.
 
 =over
 
-=item B::Debug
+=item XXX
+
+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.
 
 =back
 
+[ List each other deprecation as a =head2 entry ]
+
 =head1 Performance Enhancements
 
-=over 4
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
 
-=item *
+[ List each enhancement as an =item entry ]
 
-C<SvTRUE()> is now more efficient.
+=over 4
 
 =item *
 
-C<keys()> in void and scalar contexts is now more efficient.
+Many string concatenation expressions are now considerably faster, due
+to the introduction internally of a C<multiconcat> opcode which combines
+multiple concatenations, and optionally a C<=> or C<.=>, into a single
+action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this
+whole expression is now handled as a single op:
 
-=item *
+    $s .= "a=$a b=$b\n"
 
-Various integer-returning ops are now more efficient in scalar/boolean context.
+As a special case, if the LHS of an assign is a lexical variable or
+C<my $s>, the op itself handles retrieving the lexical variable, which
+is faster.
 
-=item *
+In general, the more the expression includes a mix of constant strings and
+variable expressions, the longer the expression, and the more it mixes
+together non-utf8 and utf8 strings, the more marked the performance
+improvement. For example on a C<x86_64> system, this code has been
+benchmarked running four times faster:
 
-C<< if (index(...) != -1) { ... } >> is now more efficient.
+    my $s;
+    my $a = "ab\x{100}cde";
+    my $b = "fghij";
+    my $c = "\x{101}klmn";
 
-=item *
+    for my $i (1..10_000_000) {
+        $s = "\x{100}wxyz";
+        $s .= "foo=$a bar=$b baz=$c";
+    }
 
-C<for()> loops and similar constructs are now more efficient in most cases.
+In addition, C<sprintf> expressions which have a constant format
+containing only C<%s> and C<%%> format elements, and which have a fixed
+number of arguments, are now also optimised into a C<multiconcat> op.
 
 =back
 
 =head1 Modules and Pragmata
 
+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.
+
+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 ]
+
+=head2 Removal of use vars
+
+=over 4
+
+The usage of "use vars" has been discouraged since the introduction of our in
+Perl 5.6.0. Where possible the usage of this pragma has now been removed from
+the Perl source code.
+
+=back
+
 =head2 New Modules and Pragmata
 
 =over 4
@@ -80,7 +199,10 @@ XXX
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+L<Carp> has been upgraded from version 1.43 to 1.44.
+
+If a package on the call stack contains a constant named C<ISA>, Carp no
+longer throws a "Not a GLOB reference" error.
 
 =back
 
@@ -94,72 +216,348 @@ XXX
 
 =back
 
+=head1 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>.
+
+=head2 New Documentation
+
+XXX Changes which create B<new> files in F<pod/> go here.
+
+=head3 L<XXX>
+
+XXX Description of the purpose of the new file here
+
+=head2 Changes to Existing Documentation
+
+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<perlbug@perl.org|mailto:perlbug@perl.org>.
+
+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.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perldiag/Variable length lookbehind not implemented in regex m/%s/>
+
+This now gives more ideas as to workarounds to the issue that was
+introduced in Perl 5.18 (but not documented explicitly in its perldelta)
+for the fact that some Unicode C</i> rules cause a few sequences such as
+
+ (?<!st)
+
+to be considered variable length, and hence disallowed.
+
+=over 4
+
+=item *
+
+XXX Description of the change here
+
+=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<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 *
+
+XXX L<message|perldiag/"message">
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+XXX L<message|perldiag/"message">
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+XXX Changes (i.e. rewording) of diagnostic messages go here
+
+=over 4
+
+=item *
+
+The diagnostic C<Initialization of state variables in list context
+currently forbidden> has changed to C<Initialization of state variables
+in list currently forbidden>, because list-context initialization of
+single aggregate state variables is now permitted.
+
+=item *
+
+XXX Describe change here
+
+=back
+
+=head1 Utility Changes
+
+XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
+Most of these are built within the directory F<utils>.
+
+[ 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. ]
+
+=head2 L<XXX>
+
+=over 4
+
+=item *
+
+XXX
+
+=back
+
 =head1 Configuration and Compilation
 
+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.
+
+[ List changes as an =item entry ].
+
+=over 4
+
+=item New probes
+
+=over 2
+
+=item HAS_BUILTIN_ADD_OVERFLOW
+
+=item HAS_BUILTIN_MUL_OVERFLOW
+
+=item HAS_BUILTIN_SUB_OVERFLOW
+
+=item HAS_THREAD_SAFE_NL_LANGINFO_L
+
+=item HAS_LOCALECONV_L
+
+=item HAS_MBRLEN
+
+=item HAS_MBRTOWC
+
+=item HAS_MEMRCHR
+
+=item HAS_NANOSLEEP
+
+=item HAS_STRNLEN
+
+=item HAS_STRTOLD_L
+
+=item I_WCHAR
+
+=back
+
+=back
+
+=head1 Testing
+
+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.
+
+XXX If there were no significant test changes, say this:
+
+Tests were added and changed to reflect the other additions and changes
+in this release.
+
+XXX If instead there were significant changes, say this:
+
+Tests were added and changed to reflect the other additions and
+changes in this release.  Furthermore, these significant changes were
+made:
+
+[ List each test improvement as an =item entry ]
+
+=over 4
+
+=item *
+
+XXX
+
+=back
+
+=head1 Platform Support
+
+XXX Any changes to platform support should be listed in the sections below.
+
+[ Within the sections, list each platform as an =item entry with specific
+changes as paragraphs below it. ]
+
+=head2 New Platforms
+
+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.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head2 Discontinued Platforms
+
+XXX List any platforms that this version of perl no longer compiles on.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head2 Platform-Specific Notes
+
+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.
+
 =over 4
 
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head1 Internal Changes
+
+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 an =item entry ]
+
+=over 4
+
+=item *
+
+A new optimisation phase has been added to the compiler,
+C<optimize_optree()>, which does a top-down scan of a complete optree
+just before the peephole optimiser is run. This phase is not currently
+hookable.
+
 =item *
 
-On GCC, C<-Werror=pointer-arith> is now enabled by default,
-disallowing arithmetic on void and function pointers.
+An C<OP_MULTICONCAT> op has been added. At C<optimize_optree()> time, a
+chain of C<OP_CONCAT> and C<OP_CONST> ops, together optionally with an
+C<OP_STRINGIFY> and/or C<OP_SASSIGN>, are combined into a single
+C<OP_MULTICONCAT> op. The op is of type C<UNOP_AUX>, and the aux array
+contains the argument count, plus a pointer to a constant string and a set
+of segment lengths. For example with
+
+    my $x = "foo=$foo, bar=$bar\n";
+
+the constant string would be C<"foo=, bar=\n"> and the segment lengths
+would be (4,6,1). If the string contains characters such as C<\x80>, whose
+representation changes under utf8, two sets of strings plus lengths are
+precomputed and stored.
 
 =back
 
 =head1 Selected Bug Fixes
 
+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>.
+
+[ List each fix as an =item entry ]
+
 =over 4
 
 =item *
 
-Fixed a duplicate symbol failure with C<-flto -mieee-fp> builds.
-F<pp.c> defined C<_LIB_VERSION> which C<-lieee> already defines. [perl
-#131786]
+C<stat()>, C<lstat()>, and file test operators now fail if given a
+filename containing a nul character, in the same way that C<open()>
+already fails.
+
+=item *
+
+The in-place reverse optimisation now correctly strengthens weak
+references using the L<C<sv_rvunweaken()>|perlapi/sv_rvunweaken>
+API function.
 
 =item *
 
-The tokenizer no longer consumes the exponent part of a floating
-point number if it's incomplete. [perl #131725]
+Fixed a read before buffer when parsing a range starting with C<\N{}>
+at the beginning of the character set for the transliteration
+operator.  [perl #132245]
 
 =item *
 
-On non-threaded builds, for C<m/$null/> where C<$null> is an empty
-string is no longer treated as if the C</o> flag was present when the
-previous matching match operator included the C</o> flag.  The
-rewriting used to implement this behavior could confuse the
-interpreter.  This matches the behaviour of threaded builds.  [perl
-#124368]
+Fixed a leaked SV when parsing an empty C<\N{}> at compile-time.
+[perl #132245]
 
 =back
 
-=head1 Acknowledgements
+=head1 Known Problems
+
+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.
 
-Perl 5.27.3 represents approximately 5 weeks of development since Perl 5.27.2
-and contains approximately 5,600 lines of changes across 150 files from 19
-authors.
+[ List each fix as an =item entry ]
 
-Excluding auto-generated files, documentation and release tools, there were
-approximately 4,000 lines of changes to 84 .pm, .t, .c and .h files.
+=over 4
 
-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.27.3:
+=item *
 
-Aaron Crane, Aristotle Pagaltzis, Chris 'BinGOs' Williams, Craig A. Berry,
-Dagfinn Ilmari Mannsåker, Daniel Dragan, David Mitchell, Father Chrysostomos,
-James E Keenan, Karl Williamson, Ken Brown, Lukas Mai, Matthew Horsfall,
-Nicholas Clark, Robin Barker, Steffen Müller, Steve Hay, Tony Cook, Zefram.
+XXX
 
-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.
+=back
+
+=head1 Errata From Previous Releases
+
+=over 4
+
+=item *
+
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
+
+=back
+
+=head1 Obituary
+
+XXX If any significant core contributor has died, we've added a short obituary
+here.
+
+=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.27.5..HEAD
 
 =head1 Reporting Bugs