This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
e65aefa3bad1d57ed8396f76cb6b58cb04272624
[perl5.git] / pod / perldelta.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 [ this is a template for a new perldelta file.  Any text flagged as XXX needs
6 to be processed before release. ]
7
8 perldelta - what is new for perl v5.27.6
9
10 =head1 DESCRIPTION
11
12 This document describes differences between the 5.27.5 release and the 5.27.6
13 release.
14
15 If you are upgrading from an earlier release such as 5.27.4, first read
16 L<perl5275delta>, which describes differences between 5.27.4 and 5.27.5.
17
18 =head1 Notice
19
20 XXX Any important notices here
21
22 =head1 Core Enhancements
23
24 XXX New core language features go here.  Summarize user-visible core language
25 enhancements.  Particularly prominent performance optimisations could go
26 here, but most should go in the L</Performance Enhancements> section.
27
28 [ List each enhancement as a =head2 entry ]
29
30 =head2 Initialisation of aggregate state variables
31
32 A persistent lexical array or hash variable can now be initialized,
33 by an expression such as C<state @a = qw(x y z)>.  Initialization of a
34 list of persistent lexical variables is still not possible.
35
36 =head1 Security
37
38 XXX Any security-related notices go here.  In particular, any security
39 vulnerabilities closed should be noted here rather than in the
40 L</Selected Bug Fixes> section.
41
42 [ List each security issue as a =head2 entry ]
43
44 =head1 Incompatible Changes
45
46 XXX For a release on a stable branch, this section aspires to be:
47
48     There are no changes intentionally incompatible with 5.XXX.XXX
49     If any exist, they are bugs, and we request that you submit a
50     report.  See L</Reporting Bugs> below.
51
52 [ List each incompatible change as a =head2 entry ]
53
54 =head2 Yada-yada is now strictly a statement
55
56 By the time of its initial stable release in Perl 5.12, the C<...>
57 (yada-yada) operator was explicitly intended to serve as a statement,
58 not an expression.  However, the original implementation was confused
59 on this point, leading to inconsistent parsing.  The operator was
60 accidentally accepted in a few situations where it did not serve as a
61 complete statement, such as
62
63     ... . "foo";
64     ... if $a < $b;
65
66 The parsing has now been made consistent, permitting yada-yada only as
67 a statement.  Affected code can use C<do{...}> to put a yada-yada into
68 an arbitrary expression context.
69
70 =head1 Deprecations
71
72 XXX Any deprecated features, syntax, modules etc. should be listed here.
73
74 =head2 Module removals
75
76 XXX Remove this section if inapplicable.
77
78 The following modules will be removed from the core distribution in a
79 future release, and will at that time need to be installed from CPAN.
80 Distributions on CPAN which require these modules will need to list them as
81 prerequisites.
82
83 The core versions of these modules will now issue C<"deprecated">-category
84 warnings to alert you to this fact.  To silence these deprecation warnings,
85 install the modules in question from CPAN.
86
87 Note that these are (with rare exceptions) fine modules that you are encouraged
88 to continue to use.  Their disinclusion from core primarily hinges on their
89 necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
90 not usually on concerns over their design.
91
92 =over
93
94 =item XXX
95
96 XXX Note that deprecated modules should be listed here even if they are listed
97 as an updated module in the L</Modules and Pragmata> section.
98
99 =back
100
101 [ List each other deprecation as a =head2 entry ]
102
103 =head1 Performance Enhancements
104
105 XXX Changes which enhance performance without changing behaviour go here.
106 There may well be none in a stable release.
107
108 [ List each enhancement as an =item entry ]
109
110 =over 4
111
112 =item *
113
114 Many string concatenation expressions are now considerably faster, due
115 to the introduction internally of a C<multiconcat> opcode which combines
116 multiple concatenations, and optionally a C<=> or C<.=>, into a single
117 action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this
118 whole expression is now handled as a single op:
119
120     $s .= "a=$a b=$b\n"
121
122 As a special case, if the LHS of an assign is a lexical variable or
123 C<my $s>, the op itself handles retrieving the lexical variable, which
124 is faster.
125
126 In general, the more the expression includes a mix of constant strings and
127 variable expressions, the longer the expression, and the more it mixes
128 together non-utf8 and utf8 strings, the more marked the performance
129 improvement. For example on a C<x86_64> system, this code has been
130 benchmarked running four times faster:
131
132     my $s;
133     my $a = "ab\x{100}cde";
134     my $b = "fghij";
135     my $c = "\x{101}klmn";
136
137     for my $i (1..10_000_000) {
138         $s = "\x{100}wxyz";
139         $s .= "foo=$a bar=$b baz=$c";
140     }
141
142 In addition, C<sprintf> expressions which have a constant format
143 containing only C<%s> and C<%%> format elements, and which have a fixed
144 number of arguments, are now also optimised into a C<multiconcat> op.
145
146 =back
147
148 =head1 Modules and Pragmata
149
150 XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
151 go here.  If Module::CoreList is updated, generate an initial draft of the
152 following sections using F<Porting/corelist-perldelta.pl>.  A paragraph summary
153 for important changes should then be added by hand.  In an ideal world,
154 dual-life modules would have a F<Changes> file that could be cribbed.
155
156 The list of new and updated modules is modified automatically as part of
157 preparing a Perl release, so the only reason to manually add entries here is if
158 you're summarising the important changes in the module update. (Also, if the
159 manually-added details don't match the automatically-generated ones, the
160 release manager will have to investigate the situation carefully.)
161
162 [ Within each section, list entries as an =item entry ]
163
164 =head2 Removal of use vars
165
166 =over 4
167
168 The usage of "use vars" has been discouraged since the introduction of our in
169 Perl 5.6.0. Where possible the usage of this pragma has now been removed from
170 the Perl source code.
171
172 =back
173
174 =head2 New Modules and Pragmata
175
176 =over 4
177
178 =item *
179
180 XXX
181
182 =back
183
184 =head2 Updated Modules and Pragmata
185
186 =over 4
187
188 =item *
189
190 L<Carp> has been upgraded from version 1.43 to 1.44.
191
192 If a package on the call stack contains a constant named C<ISA>, Carp no
193 longer throws a "Not a GLOB reference" error.
194
195 =back
196
197 =head2 Removed Modules and Pragmata
198
199 =over 4
200
201 =item *
202
203 XXX
204
205 =back
206
207 =head1 Documentation
208
209 XXX Changes to files in F<pod/> go here.  Consider grouping entries by
210 file and be sure to link to the appropriate page, e.g. L<perlfunc>.
211
212 =head2 New Documentation
213
214 XXX Changes which create B<new> files in F<pod/> go here.
215
216 =head3 L<XXX>
217
218 XXX Description of the purpose of the new file here
219
220 =head2 Changes to Existing Documentation
221
222 We have attempted to update the documentation to reflect the changes
223 listed in this document.  If you find any we have missed, send email
224 to L<perlbug@perl.org|mailto:perlbug@perl.org>.
225
226 XXX Changes which significantly change existing files in F<pod/> go here.
227 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
228 section.
229
230 Additionally, the following selected changes have been made:
231
232 =head3 L<perldiag/Variable length lookbehind not implemented in regex m/%s/>
233
234 This now gives more ideas as to workarounds to the issue that was
235 introduced in Perl 5.18 (but not documented explicitly in its perldelta)
236 for the fact that some Unicode C</i> rules cause a few sequences such as
237
238  (?<!st)
239
240 to be considered variable length, and hence disallowed.
241
242 =over 4
243
244 =item *
245
246 XXX Description of the change here
247
248 =back
249
250 =head1 Diagnostics
251
252 The following additions or changes have been made to diagnostic output,
253 including warnings and fatal error messages.  For the complete list of
254 diagnostic messages, see L<perldiag>.
255
256 XXX New or changed warnings emitted by the core's C<C> code go here.  Also
257 include any changes in L<perldiag> that reconcile it to the C<C> code.
258
259 =head2 New Diagnostics
260
261 XXX Newly added diagnostic messages go under here, separated into New Errors
262 and New Warnings
263
264 =head3 New Errors
265
266 =over 4
267
268 =item *
269
270 XXX L<message|perldiag/"message">
271
272 =back
273
274 =head3 New Warnings
275
276 =over 4
277
278 =item *
279
280 XXX L<message|perldiag/"message">
281
282 =back
283
284 =head2 Changes to Existing Diagnostics
285
286 XXX Changes (i.e. rewording) of diagnostic messages go here
287
288 =over 4
289
290 =item *
291
292 The diagnostic C<Initialization of state variables in list context
293 currently forbidden> has changed to C<Initialization of state variables
294 in list currently forbidden>, because list-context initialization of
295 single aggregate state variables is now permitted.
296
297 =item *
298
299 XXX Describe change here
300
301 =back
302
303 =head1 Utility Changes
304
305 XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
306 Most of these are built within the directory F<utils>.
307
308 [ List utility changes as a =head2 entry for each utility and =item
309 entries for each change
310 Use L<XXX> with program names to get proper documentation linking. ]
311
312 =head2 L<XXX>
313
314 =over 4
315
316 =item *
317
318 XXX
319
320 =back
321
322 =head1 Configuration and Compilation
323
324 XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
325 go here.  Any other changes to the Perl build process should be listed here.
326 However, any platform-specific changes should be listed in the
327 L</Platform Support> section, instead.
328
329 [ List changes as an =item entry ].
330
331 =over 4
332
333 =item New probes
334
335 =over 2
336
337 =item HAS_BUILTIN_ADD_OVERFLOW
338
339 =item HAS_BUILTIN_MUL_OVERFLOW
340
341 =item HAS_BUILTIN_SUB_OVERFLOW
342
343 =item HAS_THREAD_SAFE_NL_LANGINFO_L
344
345 =item HAS_LOCALECONV_L
346
347 =item HAS_MBRLEN
348
349 =item HAS_MBRTOWC
350
351 =item HAS_MEMRCHR
352
353 =item HAS_NANOSLEEP
354
355 =item HAS_STRNLEN
356
357 =item HAS_STRTOLD_L
358
359 =item I_WCHAR
360
361 =back
362
363 =back
364
365 =head1 Testing
366
367 XXX Any significant changes to the testing of a freshly built perl should be
368 listed here.  Changes which create B<new> files in F<t/> go here as do any
369 large changes to the testing harness (e.g. when parallel testing was added).
370 Changes to existing files in F<t/> aren't worth summarizing, although the bugs
371 that they represent may be covered elsewhere.
372
373 XXX If there were no significant test changes, say this:
374
375 Tests were added and changed to reflect the other additions and changes
376 in this release.
377
378 XXX If instead there were significant changes, say this:
379
380 Tests were added and changed to reflect the other additions and
381 changes in this release.  Furthermore, these significant changes were
382 made:
383
384 [ List each test improvement as an =item entry ]
385
386 =over 4
387
388 =item *
389
390 XXX
391
392 =back
393
394 =head1 Platform Support
395
396 XXX Any changes to platform support should be listed in the sections below.
397
398 [ Within the sections, list each platform as an =item entry with specific
399 changes as paragraphs below it. ]
400
401 =head2 New Platforms
402
403 XXX List any platforms that this version of perl compiles on, that previous
404 versions did not.  These will either be enabled by new files in the F<hints/>
405 directories, or new subdirectories and F<README> files at the top level of the
406 source tree.
407
408 =over 4
409
410 =item XXX-some-platform
411
412 XXX
413
414 =back
415
416 =head2 Discontinued Platforms
417
418 XXX List any platforms that this version of perl no longer compiles on.
419
420 =over 4
421
422 =item XXX-some-platform
423
424 XXX
425
426 =back
427
428 =head2 Platform-Specific Notes
429
430 XXX List any changes for specific platforms.  This could include configuration
431 and compilation changes or changes in portability/compatibility.  However,
432 changes within modules for platforms should generally be listed in the
433 L</Modules and Pragmata> section.
434
435 =over 4
436
437 =item XXX-some-platform
438
439 XXX
440
441 =back
442
443 =head1 Internal Changes
444
445 XXX Changes which affect the interface available to C<XS> code go here.  Other
446 significant internal changes for future core maintainers should be noted as
447 well.
448
449 [ List each change as an =item entry ]
450
451 =over 4
452
453 =item *
454
455 A new optimisation phase has been added to the compiler,
456 C<optimize_optree()>, which does a top-down scan of a complete optree
457 just before the peephole optimiser is run. This phase is not currently
458 hookable.
459
460 =item *
461
462 An C<OP_MULTICONCAT> op has been added. At C<optimize_optree()> time, a
463 chain of C<OP_CONCAT> and C<OP_CONST> ops, together optionally with an
464 C<OP_STRINGIFY> and/or C<OP_SASSIGN>, are combined into a single
465 C<OP_MULTICONCAT> op. The op is of type C<UNOP_AUX>, and the aux array
466 contains the argument count, plus a pointer to a constant string and a set
467 of segment lengths. For example with
468
469     my $x = "foo=$foo, bar=$bar\n";
470
471 the constant string would be C<"foo=, bar=\n"> and the segment lengths
472 would be (4,6,1). If the string contains characters such as C<\x80>, whose
473 representation changes under utf8, two sets of strings plus lengths are
474 precomputed and stored.
475
476 =back
477
478 =head1 Selected Bug Fixes
479
480 XXX Important bug fixes in the core language are summarized here.  Bug fixes in
481 files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
482
483 [ List each fix as an =item entry ]
484
485 =over 4
486
487 =item *
488
489 C<stat()>, C<lstat()>, and file test operators now fail if given a
490 filename containing a nul character, in the same way that C<open()>
491 already fails.
492
493 =item *
494
495 The in-place reverse optimisation now correctly strengthens weak
496 references using the L<C<sv_rvunweaken()>|perlapi/sv_rvunweaken>
497 API function.
498
499 =item *
500
501 Fixed a read before buffer when parsing a range starting with C<\N{}>
502 at the beginning of the character set for the transliteration
503 operator.  [perl #132245]
504
505 =item *
506
507 Fixed a leaked SV when parsing an empty C<\N{}> at compile-time.
508 [perl #132245]
509
510 =back
511
512 =head1 Known Problems
513
514 XXX Descriptions of platform agnostic bugs we know we can't fix go here.  Any
515 tests that had to be C<TODO>ed for the release would be noted here.  Unfixed
516 platform specific bugs also go here.
517
518 [ List each fix as an =item entry ]
519
520 =over 4
521
522 =item *
523
524 XXX
525
526 =back
527
528 =head1 Errata From Previous Releases
529
530 =over 4
531
532 =item *
533
534 XXX Add anything here that we forgot to add, or were mistaken about, in
535 the perldelta of a previous release.
536
537 =back
538
539 =head1 Obituary
540
541 XXX If any significant core contributor has died, we've added a short obituary
542 here.
543
544 =head1 Acknowledgements
545
546 XXX Generate this with:
547
548   perl Porting/acknowledgements.pl v5.27.5..HEAD
549
550 =head1 Reporting Bugs
551
552 If you find what you think is a bug, you might check the perl bug database
553 at L<https://rt.perl.org/> .  There may also be information at
554 L<http://www.perl.org/> , the Perl Home Page.
555
556 If you believe you have an unreported bug, please run the L<perlbug> program
557 included with your release.  Be sure to trim your bug down to a tiny but
558 sufficient test case.  Your bug report, along with the output of C<perl -V>,
559 will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
560
561 If the bug you are reporting has security implications which make it
562 inappropriate to send to a publicly archived mailing list, then see
563 L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
564 for details of how to report the issue.
565
566 =head1 Give Thanks
567
568 If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
569 you can do so by running the C<perlthanks> program:
570
571     perlthanks
572
573 This will send an email to the Perl 5 Porters list with your show of thanks.
574
575 =head1 SEE ALSO
576
577 The F<Changes> file for an explanation of how to view exhaustive details on
578 what changed.
579
580 The F<INSTALL> file for how to build Perl.
581
582 The F<README> file for general stuff.
583
584 The F<Artistic> and F<Copying> files for copyright information.
585
586 =cut