This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add a deprecation warning for all uses of @*, %*, &* and **.
[perl5.git] / pod / perldelta.pod
index 2103843..68f070f 100644 (file)
@@ -5,15 +5,15 @@
 [ 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.17.8
+perldelta - what is new for perl v5.17.10
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.17.7 release and the 5.17.8
+This document describes differences between the 5.17.9 release and the 5.17.10
 release.
 
-If you are upgrading from an earlier release such as 5.17.6, first read
-L<perl5177delta>, which describes differences between 5.17.6 and 5.17.7.
+If you are upgrading from an earlier release such as 5.17.8, first read
+L<perl5179delta>, which describes differences between 5.17.8 and 5.17.9.
 
 =head1 Notice
 
@@ -27,15 +27,6 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Regular Expression Set Operations
-
-This is an experimental feature to allow matching against the the union,
-intersection, etc., of sets of code points, similar to
-L<Unicode::Regex::Set>.  It can also be used to extend C</x> processing
-to [bracketed] character classes, and as a replacement of user-defined
-properties, allowing more complex expressions than they do.  See
-L<perlre/(?[ ])>.
-
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -46,11 +37,18 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
-XXX For a release on a stable branch, this section aspires to be:
+=head2 Explicit rules for variable names and identifiers
+
+Due to an oversight, length-one variable names in 5.16 were completely
+unrestricted, and opened the door to several kinds of insanity.  As of
+5.18, these now follow the rules of other identifiers, in addition
+to accepting characters that match the \p{POSIX_Punct} property.
 
-    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.
+There are no longer any differences in the parsing of identifiers specified
+as $... or ${...}; previously, they were dealt with in different parts of
+the core, and so had slightly different behavior. For instance,
+C<${foo:bar}> was a legal variable name.  Since they are now both parsed
+by the same code, that is no longer the case.
 
 [ List each incompatible change as a =head2 entry ]
 
@@ -62,37 +60,11 @@ an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=head2 Various XS-callable functions are now deprecated
-
-All the functions used to classify characters will be removed from a
-future version of Perl, and should not be used.  With participating C
-compilers (e.g., gcc), compiling any file that uses any of these will
-generate a warning.  These were not intended for public use; there are
-equivalent, faster, macros for most of them.
-See L<perlapi/Character classes>.  The complete list (including some
-that were deprecated in 5.17.7) is:
-C<is_uni_alnum>, C<is_uni_alnumc>, C<is_uni_alnumc_lc>,
-C<is_uni_alnum_lc>, C<is_uni_alpha>, C<is_uni_alpha_lc>,
-C<is_uni_ascii>, C<is_uni_ascii_lc>, C<is_uni_blank>,
-C<is_uni_blank_lc>, C<is_uni_cntrl>, C<is_uni_cntrl_lc>,
-C<is_uni_digit>, C<is_uni_digit_lc>, C<is_uni_graph>,
-C<is_uni_graph_lc>, C<is_uni_idfirst>, C<is_uni_idfirst_lc>,
-C<is_uni_lower>, C<is_uni_lower_lc>, C<is_uni_print>,
-C<is_uni_print_lc>, C<is_uni_punct>, C<is_uni_punct_lc>,
-C<is_uni_space>, C<is_uni_space_lc>, C<is_uni_upper>,
-C<is_uni_upper_lc>, C<is_uni_xdigit>, C<is_uni_xdigit_lc>,
-C<is_utf8_alnum>, C<is_utf8_alnumc>, C<is_utf8_alpha>,
-C<is_utf8_ascii>, C<is_utf8_blank>, C<is_utf8_char>,
-C<is_utf8_cntrl>, C<is_utf8_digit>, C<is_utf8_graph>,
-C<is_utf8_idcont>, C<is_utf8_idfirst>, C<is_utf8_lower>,
-C<is_utf8_mark>, C<is_utf8_perl_space>, C<is_utf8_perl_word>,
-C<is_utf8_posix_digit>, C<is_utf8_print>, C<is_utf8_punct>,
-C<is_utf8_space>, C<is_utf8_upper>, C<is_utf8_xdigit>,
-C<is_utf8_xidcont>, C<is_utf8_xidfirst>.
-
-In addition these three functions that have never worked properly are
-deprecated:
-C<to_uni_lower_lc>, C<to_uni_title_lc>, and C<to_uni_upper_lc>.
+=head2 PL_sv_objcount
+
+This interpreter-global variable used to track the total number of
+Perl objects in the interpreter. It is no longer maintained and will
+be removed altogether in Perl 5.20.
 
 =head1 Performance Enhancements
 
@@ -137,7 +109,17 @@ XXX
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+L<Benchmark> has been upgraded from version 1.14 to 1.15.
+
+This reverts (for now) a change in 1.14 whereby the "too few iterations"
+message became a warning on STDERR instead of being output on STDOUT. It's
+now on STDOUT again.
+
+=item *
+
+L<Perl::OSType> has been upgraded from version 1.002 to 1.003.
+
+This fixes a bug detecting the VOS operating system.
 
 =back
 
@@ -170,13 +152,13 @@ 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.
 
-=head3 L<XXX>
+=head3 L<perlrebackslash/\N>
 
 =over 4
 
 =item *
 
-XXX Description of the change here
+This feature is no longer experimental.
 
 =back
 
@@ -210,19 +192,30 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-XXX L<message|perldiag/"message">
+L%c* is deprecated, and will become a syntax error|perldiag/"%c* is deprecated, and will become a syntax error">
+
+Use of C<@*>, C<&*>, C<**> or C<%*> is now deprecated, and will generate a
+compile time warning, enabled by default.  In future such code will fail to
+compile with a syntax error.  Removing these variables, along with C<$*>,
+will permit future syntax additions.
 
 =back
 
 =head2 Changes to Existing Diagnostics
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
-
 =over 4
 
 =item *
 
-XXX Describe change here
+L<$* is no longer supported, and will become a syntax error|perldiag/"$* is no longer supported, and will become a syntax error">
+
+The warning that use of C<$*> and C<$#> is no longer supported is now
+generated for every location that references them.  Previously it would fail
+to be generated if another variable using the same typeglob was seen first
+(e.g. C<@*> before C<$*>), and would not be generated for the second and
+subsequent uses.  (It's hard to fix the failure to generate warnings at all
+without also generating them every time, and warning every time is
+consistent with the warnings that C<$[> used to generate.)
 
 =back
 
@@ -323,11 +316,9 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item Windows
+=item XXX-some-platform
 
-Perl can now be built using Microsoft's Visual C++ 2012 compiler by specifying
-CCTYPE=MSVC110 (or MSVC110FREE if you are using the free Express edition for
-Windows Desktop) in F<win32/Makefile>.
+XXX
 
 =back
 
@@ -343,7 +334,19 @@ well.
 
 =item *
 
-XXX
+The new copy-on-write mechanism that was introduced in 5.17.7 has now been
+disabled by default, since it was felt that there were too many rough
+edges for the 5.18 release. It is expected that it will be enabled by
+default for 5.20.
+
+This change also re-enables PL_sawampersand by default.
+
+It can be enabled in a perl build by running F<Configure> with
+B<-Accflags=-DPERL_NEW_COPY_ON_WRITE>, and we would encourage XS authors to
+try their code with such an enabled perl, and provide feedback.
+XXX need blurb, e.g. a reference to a new section in perlguts or perlxs
+explaining how XS authors should handle COW strings.
+
 
 =back
 
@@ -358,14 +361,8 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-A bug in the core typemap caused any C types that map to the T_BOOL core
-typemap entry to not be set, updated, or modified when the T_BOOL variable was
-used in an OUTPUT: section with an exception for RETVAL. T_BOOL in an INPUT:
-section was not affected. Using a T_BOOL return type for an XSUB (RETVAL)
-was not affected. A side effect of fixing this bug is, if a T_BOOL is specified
-in the OUTPUT: section (which previous did nothing to the SV), and a read only
-SV (literal) is passed to the XSUB, croaks like "Modification of a read-only
-value attempted" will happen. [perl #115796]
+Fix two crashes in the debugger when using Frame=2 or autotrace.  These are
+[perl #116769] and [perl #116771].
 
 =back
 
@@ -394,7 +391,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.17.7..HEAD
+  perl Porting/acknowledgements.pl v5.17.9..HEAD
 
 =head1 Reporting Bugs