Commit | Line | Data |
---|---|---|
e14ac59b RS |
1 | =encoding utf8 |
2 | ||
3 | =head1 NAME | |
4 | ||
5 | perl5176delta - what is new for perl v5.17.6 | |
6 | ||
7 | =head1 DESCRIPTION | |
8 | ||
9 | This document describes differences between the 5.17.5 release and the 5.17.6 | |
10 | release. | |
11 | ||
12 | If you are upgrading from an earlier release such as 5.17.4, first read | |
13 | L<perl5175delta>, which describes differences between 5.17.4 and 5.17.5. | |
14 | ||
15 | =head1 Core Enhancements | |
16 | ||
17 | =head2 Character name aliases may now include non-Latin1-range characters | |
18 | ||
19 | It is possible to define your own names for characters for use in | |
20 | C<\N{...}>, C<charnames::vianame()>, etc. These names can now be | |
21 | comprised of characters from the whole Unicode range. This allows for | |
22 | names to be in your native language, and not just English. Certain | |
23 | restrictions apply to the characters that may be used (you can't define | |
24 | a name that has punctuation in it, for example). See L<charnames/CUSTOM | |
25 | ALIASES>. | |
26 | ||
27 | =head2 New hash function Murmurhash-32 (v3) | |
28 | ||
29 | We have switched Perl's hash function to use Murmurhash-32, and added build | |
30 | support for several other hash functions. This new function is expected to | |
31 | perform equivalently to the old one for shorter strings and is faster, | |
32 | potentially twice as fast, for hashing longer strings. | |
33 | ||
34 | =head1 Incompatible Changes | |
35 | ||
36 | =head2 An unknown character name in C<\N{...}> is now a syntax error | |
37 | ||
38 | Previously, it warned, and the Unicode REPLACEMENT CHARACTER was | |
39 | substituted. Unicode now recommends that this situation be a syntax | |
40 | error. Also, the previous behavior led to some confusing warnings and | |
41 | behaviors, and since the REPLACEMENT CHARACTER has no use other than as | |
42 | a stand-in for some unknown character, any code that has this problem is | |
43 | buggy. | |
44 | ||
45 | =head2 Formerly deprecated characters in C<\N{}> character name aliases are now errors. | |
46 | ||
47 | Since v5.12.0, it has been deprecated to use certain characters in | |
48 | user-defined C<\N{...}> character names. These now cause a syntax | |
49 | error. For example, it is now an error to begin a name with a digit, | |
50 | such as in | |
51 | ||
52 | my $undraftable = "\N{4F}"; # Syntax error! | |
53 | ||
54 | or to have commas anywhere in the name. See L<charnames/CUSTOM ALIASES> | |
55 | ||
56 | =head2 Per process hash randomization | |
57 | ||
58 | The seed used by Perl's hash function is now random. This means that the | |
59 | order which keys/values will be returned from functions like C<keys()>, | |
60 | C<values()>, and C<each()> will differ from run to run. | |
61 | ||
62 | This change was introduced to make Perl's hashes more robust to algorithmic | |
63 | complexity attacks, and also because we discovered that it exposes hash | |
64 | ordering dependency bugs and makes them easier to track down. | |
65 | ||
66 | Toolchain maintainers might want to invest in additional infrastructure to | |
67 | test for things like this. Running tests several times in a row and then | |
68 | comparing results will make it easier to spot hash order dependencies in | |
69 | code. Authors are strongly encouraged not to expose the key order of | |
70 | Perl's hashes to insecure audiences. | |
71 | ||
72 | =head2 PERL_HASH_SEED enviornment variable now takes a hex value | |
73 | ||
74 | PERL_HASH_SEED no longer accepts an integer as a parameter, instead the | |
75 | value is expected to be a binary string encoded in hex. This is to make | |
76 | the infrastructure support hash seeds of arbitrary lengths which might | |
77 | exceed that of an integer. (SipHash uses a 16 byte seed). | |
78 | ||
79 | =head2 Hash::Util::hash_seed() now returns a string | |
80 | ||
81 | Hash::Util::hash_seed() now returns a string instead of an integer. This | |
82 | is to make the infrastructure support hash seeds of arbitrary lengths | |
83 | which might exceed that of an integer. (SipHash uses a 16 byte seed). | |
84 | ||
85 | =head2 Output of PERL_HASH_SEED_DEBUG has been changed | |
86 | ||
87 | The environment variable PERL_HASH_SEED_DEBUG now shows both the hash | |
88 | function perl was built with AND the seed, in hex in use for that process. | |
89 | Code parsing this output, should it exist, must change to accomodate the | |
90 | new format. Example of the new format: | |
91 | ||
92 | $ PERL_HASH_SEED_DEBUG=1 ./perl -e1 | |
93 | HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f | |
94 | ||
95 | =head1 Performance Enhancements | |
96 | ||
97 | =over 4 | |
98 | ||
99 | =item * | |
100 | ||
101 | Lists of lexical variable declarations (C<my($x, $y)>) are now optimised | |
102 | down to a single op, and are hence faster than before. | |
103 | ||
104 | =item * | |
105 | ||
106 | A new C preprocessor define NO_TAINT_SUPPORT was added that, if set, disables | |
107 | Perl's taint support altogether. Using the -T or -t command line flags will | |
108 | cause a fatal error. Beware that both core tests as well as many a CPAN | |
109 | distribution's tests will fail with this change. On the upside, it provides | |
110 | a small performance benefit due to reduced branching. | |
111 | ||
112 | B<Do not enable this unless you know exactly what you are getting yourself | |
113 | into.> | |
114 | ||
115 | =back | |
116 | ||
117 | =head1 Modules and Pragmata | |
118 | ||
119 | =head2 Updated Modules and Pragmata | |
120 | ||
121 | =over 4 | |
122 | ||
123 | =item * | |
124 | ||
125 | L<Carp> has been upgraded from version 1.27 to 1.28. | |
126 | ||
127 | Carp is no longer confused when C<caller> returns undef for a package that | |
128 | has been deleted. | |
129 | ||
130 | =item * | |
131 | ||
132 | L<CPAN> has been upgraded from version 1.98 to 1.99_51. | |
133 | ||
134 | =item * | |
135 | ||
136 | L<DynaLoader> has been upgraded from version 1.16 to 1.17. | |
137 | ||
138 | =item * | |
139 | ||
140 | L<Env> has been upgraded from version 1.03 to 1.04. | |
141 | ||
142 | Its SPLICE implementation no longer misbehaves in list context. | |
143 | ||
144 | =item * | |
145 | ||
146 | L<Module::CoreList> has been upgraded from version 2.77 to 2.78. | |
147 | ||
148 | =item * | |
149 | ||
150 | L<Tie::Hash::NamedCapture> has been upgraded from version 0.08 to 0.09. | |
151 | ||
152 | =back | |
153 | ||
154 | =head2 Changes to Existing Documentation | |
155 | ||
156 | =head3 L<perlref> | |
157 | ||
158 | =over 4 | |
159 | ||
160 | =item * | |
161 | ||
162 | C<*foo{NAME}> and C<*foo{PACKAGE}>, which have existed since perl 5.005, | |
163 | are now documented. | |
164 | ||
165 | =back | |
166 | ||
167 | =head1 Platform Support | |
168 | ||
169 | =head2 Discontinued Platforms | |
170 | ||
171 | =over 4 | |
172 | ||
173 | =item EPOC | |
174 | ||
175 | Support code relating to EPOC has been removed. EPOC was a family of | |
176 | operating systems developed by Psion for mobile devices. It was the | |
177 | predecessor of Symbian. The port was last updated in April 2002. | |
178 | ||
179 | =back | |
180 | ||
181 | =head2 Platform-Specific Notes | |
182 | ||
183 | =over 4 | |
184 | ||
185 | =item VMS | |
186 | ||
187 | Where possible, the case of filenames and command-line arguments is now | |
188 | preserved by enabling the CRTL features C<DECC$EFS_CASE_PRESERVE> and | |
189 | C<DECC$ARGV_PARSE_STYLE> at start-up time. The latter only takes effect | |
190 | when extended parse is enabled in the process from which Perl is run. | |
191 | ||
192 | =item WinCE | |
193 | ||
194 | Building on WinCE is now possible once again, although more work is required | |
195 | to fully restore a clean build. | |
196 | ||
197 | =back | |
198 | ||
199 | =head1 Internal Changes | |
200 | ||
201 | =over 4 | |
202 | ||
203 | =item * | |
204 | ||
205 | The private Perl_croak_no_modify has had its context parameter removed. It is | |
206 | now has a void prototype. Users of the public API croak_no_modify remain | |
207 | unaffected. | |
208 | ||
209 | =item * | |
210 | ||
211 | Copy-on-write (shared hash key) scalars are no longer marked read-only. | |
212 | C<SvREADONLY> returns false on such an SV, but C<SvIsCOW> still returns | |
213 | true. | |
214 | ||
215 | =item * | |
216 | ||
217 | A new op type, C<OP_PADRANGE> has been introduced. The perl peephole | |
218 | optimiser will, where possible, substitute a single padrange op for a | |
219 | pushmark followed by one or more pad ops, and possibly also skipping list | |
220 | and nextstate ops. In addition, the op can carry out the tasks associated | |
221 | with the RHS of a my(...) = @_ assignment, so those ops may be optimised | |
222 | away too. | |
223 | ||
224 | =back | |
225 | ||
226 | =head1 Selected Bug Fixes | |
227 | ||
228 | =over 4 | |
229 | ||
230 | =item * | |
231 | ||
232 | Uninitialized warnings mentioning hash elements would only mention the | |
233 | element name if it was not in the first bucket of the hash, due to an | |
234 | off-by-one error. | |
235 | ||
236 | =item * | |
237 | ||
238 | A regular expression optimizer bug could cause multiline "^" to behave | |
239 | incorrectly in the presence of line breaks, such that | |
240 | C<"/\n\n" =~ m#\A(?:^/$)#im> would not match [perl #115242]. | |
241 | ||
242 | =item * | |
243 | ||
244 | Failed C<fork> in list context no longer currupts the stack. | |
245 | C<@a = (1, 2, fork, 3)> used to gobble up the 2 and assign C<(1, undef, 3)> | |
246 | if the C<fork> call failed. | |
247 | ||
248 | =item * | |
249 | ||
250 | Numerous memory leaks have been fixed, mostly involving tied variables that | |
251 | die, regular expression character classes and code blocks, and syntax | |
252 | errors. | |
253 | ||
254 | =item * | |
255 | ||
256 | Assigning a regular expression (C<${qr//}>) to a variable that happens to | |
257 | hold a floating point number no longer causes assertion failures on | |
258 | debugging builds. | |
259 | ||
260 | =item * | |
261 | ||
262 | Assigning a regular expression to a scalar containing a number no longer | |
263 | causes subsequent nummification to produce random numbers. | |
264 | ||
265 | =item * | |
266 | ||
267 | Assigning a regular expression to a magic variable no longer wipes away the | |
268 | magic. This is a regression from 5.10. | |
269 | ||
270 | =item * | |
271 | ||
272 | Assigning a regular expression to a blessed scalar no longer results in | |
273 | crashes. This is also a regression from 5.10. | |
274 | ||
275 | =item * | |
276 | ||
277 | Regular expression can now be assigned to tied hash and array elements with | |
278 | flattening into strings. | |
279 | ||
280 | =item * | |
281 | ||
282 | Nummifying a regular expression no longer results in an uninitialized | |
283 | warning. | |
284 | ||
285 | =item * | |
286 | ||
287 | Negative array indices no longer cause EXISTS methods of tied variables to | |
288 | be ignored. This is a regression from 5.12. | |
289 | ||
290 | =item * | |
291 | ||
292 | Negative array indices no longer result in crashes on arrays tied to | |
293 | non-objects. | |
294 | ||
295 | =item * | |
296 | ||
297 | C<$x = "(?{})"; /a++(?{})+$x/x> no longer erroneous produces an error (just | |
298 | a warning, as expected). This was broken in 5.17.1. | |
299 | ||
300 | =item * | |
301 | ||
302 | C<$byte_overload .= $utf8> no longer results in doubly-encoded UTF8 if the | |
303 | left-hand scalar happened to have produced a UTF8 string the last time | |
304 | overloading was invoked. | |
305 | ||
306 | =item * | |
307 | ||
308 | C<goto &sub> now uses the current value of @_, instead of using the array | |
309 | the subroutine was originally called with. This means | |
310 | C<local @_ = (...); goto &sub> now works [perl #43077]. | |
311 | ||
312 | =item * | |
313 | ||
314 | If a debugger is invoked recursively, it no longer stomps on its own | |
315 | lexical variables. Formerly under recursion all calls would share the same | |
316 | set of lexical variables [perl #115742]. | |
317 | ||
318 | =item * | |
319 | ||
320 | C<*_{ARRAY}> returned from a subroutine no longer spontaneously | |
321 | becomes empty. | |
322 | ||
323 | =back | |
324 | ||
325 | =head1 Acknowledgements | |
326 | ||
327 | Perl 5.17.6 represents approximately 5 weeks of development since Perl 5.17.5 | |
328 | and contains approximately 79,000 lines of changes across 460 files from 30 | |
329 | authors. | |
330 | ||
331 | Perl continues to flourish into its third decade thanks to a vibrant community | |
332 | of users and developers. The following people are known to have contributed the | |
333 | improvements that became Perl 5.17.6: | |
334 | ||
335 | Alexandr Ciornii, Brian Fraser, Chris 'BinGOs' Williams, Craig A. Berry, | |
336 | Dagfinn Ilmari Mannsåker, Daniel Dragan, David Golden, David Mitchell, Dominic | |
337 | Hargreaves, Eric Brine, Father Chrysostomos, Florian Ragwitz, Hugo van der | |
338 | Sanden, James E Keenan, Jerry D. Hedden, Jesse Luehrs, Karl Williamson, Lukas | |
339 | Mai, Nicholas Clark, Paul Johnson, Reini Urban, Ricardo Signes, Ruslan Zakirov, | |
340 | Shlomi Fish, Steffen Müller, Steve Hay, Tom Wyant, Tony Cook, Vadim Konovalov, | |
341 | Yves Orton. | |
342 | ||
343 | The list above is almost certainly incomplete as it is automatically generated | |
344 | from version control history. In particular, it does not include the names of | |
345 | the (very much appreciated) contributors who reported issues to the Perl bug | |
346 | tracker. | |
347 | ||
348 | Many of the changes included in this version originated in the CPAN modules | |
349 | included in Perl's core. We're grateful to the entire CPAN community for | |
350 | helping Perl to flourish. | |
351 | ||
352 | For a more complete list of all of Perl's historical contributors, please see | |
353 | the F<AUTHORS> file in the Perl source distribution. | |
354 | ||
355 | =head1 Reporting Bugs | |
356 | ||
357 | If you find what you think is a bug, you might check the articles recently | |
358 | posted to the comp.lang.perl.misc newsgroup and the perl bug database at | |
359 | http://rt.perl.org/perlbug/ . There may also be information at | |
360 | http://www.perl.org/ , the Perl Home Page. | |
361 | ||
362 | If you believe you have an unreported bug, please run the L<perlbug> program | |
363 | included with your release. Be sure to trim your bug down to a tiny but | |
364 | sufficient test case. Your bug report, along with the output of C<perl -V>, | |
365 | will be sent off to perlbug@perl.org to be analysed by the Perl porting team. | |
366 | ||
367 | If the bug you are reporting has security implications, which make it | |
368 | inappropriate to send to a publicly archived mailing list, then please send it | |
369 | to perl5-security-report@perl.org. This points to a closed subscription | |
370 | unarchived mailing list, which includes all the core committers, who will be | |
371 | able to help assess the impact of issues, figure out a resolution, and help | |
372 | co-ordinate the release of patches to mitigate or fix the problem across all | |
373 | platforms on which Perl is supported. Please only use this address for | |
374 | security issues in the Perl core, not for modules independently distributed on | |
375 | CPAN. | |
376 | ||
377 | =head1 SEE ALSO | |
378 | ||
379 | The F<Changes> file for an explanation of how to view exhaustive details on | |
380 | what changed. | |
381 | ||
382 | The F<INSTALL> file for how to build Perl. | |
383 | ||
384 | The F<README> file for general stuff. | |
385 | ||
386 | The F<Artistic> and F<Copying> files for copyright information. | |
387 | ||
388 | =cut |