More perldelta entries from 5.9.3
Rafael Garcia-Suarez [Sun, 21 Oct 2007 16:38:36 +0000 (16:38 +0000)]
p4raw-id: //depot/perl@32155

pod/perl5100delta.pod

index a11a652..321eaa2 100644 (file)
@@ -1,5 +1,3 @@
-TODO: perl591delta and further
-
 =head1 NAME
 
 perldelta - what is new for perl 5.10.0
@@ -616,13 +614,41 @@ C<Module::CoreList>, by Richard Clamp, is a small handy module that tells
 you what versions of core modules ship with any versions of Perl 5. It
 comes with a command-line frontend, C<corelist>.
 
+=item *
+
+C<Math::BigInt::FastCalc> is an XS-enabled, and thus faster, version of
+C<Math::BigInt::Calc>.
+
+=item *
+
+C<Compress::Zlib> is an interface to the zlib compression library. It
+comes with a bundled version of zlib, so having a working zlib is not a
+prerequisite to install it. It's used by C<Archive::Tar> (see below).
+
+=item *
+
+C<IO::Zlib> is an C<IO::>-style interface to C<Compress::Zlib>.
+
+=item *
+
+C<Archive::Tar> is a module to manipulate C<tar> archives.
+
+=item *
+
+C<Digest::SHA> is a module used to calculate many types of SHA digests,
+has been included for SHA support in the CPAN module.
+
+=item *
+
+C<ExtUtils::CBuilder> and C<ExtUtils::ParseXS> have been added.
+
 =back
 
 =head1 Utility Changes
 
 =over 4
 
-=item *
+=item perl -d
 
 The Perl debugger can now save all debugger commands for sourcing later;
 notably, it can now emulate stepping backwards, by restarting and
@@ -634,17 +660,45 @@ C<i> command.
 Perl has a new -dt command-line flag, which enables threads support in the
 debugger.
 
-=item *
+=item ptar
+
+C<ptar> is a pure perl implementation of C<tar>, that comes with
+C<Archive::Tar>.
+
+=item ptardiff
+
+C<ptardiff> is a small script used to generate a diff between the contents
+of a tar archive and a directory tree. Like C<ptar>, it comes with
+C<Archive::Tar>.
+
+=item shasum
+
+C<shasum> is a command-line utility, used to print or to check SHA
+digests. It comes with the new C<Digest::SHA> module.
+
+=item corelist
 
 The C<corelist> utility is now installed with perl (see L</"New modules">
 above).
 
-=item *
+=item h2ph and h2xs
 
 C<h2ph> and C<h2xs> have been made a bit more robust with regard to
 "modern" C code.
 
-=item *
+C<h2xs> implements a new option C<--use-xsloader> to force use of
+C<XSLoader> even in backwards compatible modules.
+
+The handling of authors' names that had apostrophes has been fixed.
+
+Any enums with negative values are now skipped.
+
+=item perlivp
+
+C<perlivp> no longer checks for F<*.ph> files by default.  Use the new C<-a>
+option to run I<all> tests.
+
+=item find2perl
 
 C<find2perl> now assumes C<-print> as a default action. Previously, it
 needed to be specified explicitly.
@@ -657,6 +711,10 @@ added.
 
 =head1 New Documentation
 
+The new L<perlglossary> manpage is a glossary of terms used in the Perl
+documentation, technical and otherwise, kindly provided by O'Reilly Media,
+Inc.
+
 The long-existing feature of C</(?{...})/> regexps setting C<$_> and pos()
 is now documented.
 
@@ -664,7 +722,7 @@ is now documented.
 
 =over 4
 
-=item *
+=item In-place sorting
 
 Sorting arrays in place (C<@a = sort @a>) is now optimized to avoid
 making a temporary copy of the array.
@@ -672,22 +730,62 @@ making a temporary copy of the array.
 Likewise, C<reverse sort ...> is now optimized to sort in reverse,
 avoiding the generation of a temporary intermediate list.
 
-=item *
+=item Lexical array access
 
 Access to elements of lexical arrays via a numeric constant between 0 and
 255 is now faster. (This used to be only the case for global arrays.)
 
-=item *
+=item Trie optimization
 
 The regexp engine now implements the trie optimization : it's able to
 factorize common prefixes and suffixes in regular expressions. A new
 special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this
 optimization.
 
+=item XS-assisted SWASHGET
+
+Some pure-perl code that perl was using to retrieve Unicode properties and
+transliteration mappings has been reimplemented in XS.
+
+=item Constant subroutines
+
+The interpreter internals now support a far more memory efficient form of
+inlineable constants. Storing a reference to a constant value in a symbol
+table is equivalent to a full typeglob referencing a constant subroutine,
+but using about 400 bytes less memory. This proxy constant subroutine is
+automatically upgraded to a real typeglob with subroutine if necessary.
+The approach taken is analogous to the existing space optimisation for
+subroutine stub declarations, which are stored as plain scalars in place
+of the full typeglob.
+
+Several of the core modules have been converted to use this feature for
+their system dependent constants - as a result C<use POSIX;> now takes about
+200K less memory.
+
+=item C<PERL_DONT_CREATE_GVSV>
+
+The new compilation flag C<PERL_DONT_CREATE_GVSV>, introduced as an option
+in perl 5.8.8, is turned on by default in perl 5.9.3. It prevents perl
+from creating an empty scalar with every new typeglob. See L<perl588delta>
+for details.
+
+=item Weak references are cheaper
+
+Weak reference creation is now I<O(1)> rather than I<O(n)>, courtesy of
+Nicholas Clark. Weak reference deletion remains I<O(n)>, but if deletion only
+happens at program exit, it may be skipped completely.
+
+=item sort() enhancements
+
+Salvador FandiƱo provided improvements to reduce the memory usage of C<sort>
+and to speed up some cases.
+
 =back
 
 =head1 Installation and Configuration Improvements
 
+=head2 Compilation improvements
+
 Run-time customization of @INC can be enabled by passing the
 C<-Dusesitecustomize> flag to configure. When enabled, this will make perl
 run F<$sitelibexp/sitecustomize.pl> before anything else.  This script can
@@ -695,14 +793,93 @@ then be set up to add additional entries to @INC.
 
 There is alpha support for relocatable @INC entries.
 
+Parallel makes should work properly now, although there may still be problems
+if C<make test> is instructed to run in parallel.
+
+Building with Borland's compilers on Win32 should work more smoothly. In
+particular Steve Hay has worked to side step many warnings emitted by their
+compilers and at least one C compiler internal error.
+
+Perl extensions on Windows now can be statically built into the Perl DLL,
+thanks to a work by Vadim Konovalov.
+
+=head2 New Or Improved Platforms
+
+Perl is being ported to Symbian OS. See L<perlsymbian> for more
+information.
+
+The VMS port has been improved. See L<perlvms>.
+
+DynaLoader::dl_unload_file() now works on Windows.
+
+Portability of Perl on various recent compilers on Windows has been
+improved (Borland C++, Visual C++ 7.0).
+
+=head2 Module auxiliary files
+
+README files and changelogs for CPAN modules bundled with perl are no
+longer installed.
+
 =head1 Selected Bug Fixes
 
+=over 4
+
+=item strictures in regexp-eval blocks
+
 C<strict> wasn't in effect in regexp-eval blocks (C</(?{...})/>).
 
-C<$Foo::_> was wrongly forced as C<$main::_>.
+=item C<defined $$x>
+
+C<use strict "refs"> was ignoring taking a hard reference in an argument
+to defined(), as in :
+
+    use strict "refs";
+    my $x = "foo";
+    if (defined $$x) {...}
+
+This now correctly produces the run-time error C<Can't use string as a
+SCALAR ref while "strict refs" in use>.
+
+=item Calling CORE::require()
+
+CORE::require() and CORE::do() were always parsed as require() and do()
+when they were overridden. This is now fixed.
+
+=item Subscripts of slices
+
+You can now use a non-arrowed form for chained subscripts after a list
+slice, like in:
+
+    ({foo => "bar"})[0]{foo}
+
+This used to be a syntax error; a C<< -> >> was required.
+
+=item C<no warnings 'category'> works correctly with -w
+
+Previously when running with warnings enabled globally via C<-w>, selective
+disabling of specific warning categories would actually turn off all warnings.
+This is now fixed; now C<no warnings 'io';> will only turn off warnings in the
+C<io> class. Previously it would erroneously turn off all warnings.
+
+=item threads and memory usage
+
+Several memory leaks in ithreads were closed. Also, ithreads were made
+less memory-intensive.
+
+=item chr() and negative values
+
+chr() on a negative value now gives C<\x{FFFD}>, the Unicode replacement
+character, unless when the C<bytes> pragma is in effect, where the low
+eight bytes of the value are used.
+
+=back
 
 =head1 New or Changed Diagnostics
 
+=over 4
+
+=item Deprecated use of my() in false conditional
+
 A new deprecation warning, I<Deprecated use of my() in false conditional>,
 has been added, to warn against the use of the dubious and deprecated
 construct
@@ -711,20 +888,54 @@ construct
 
 See L<perldiag>. Use C<state> variables instead.
 
+=item !=~ should be !~
+
 A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
 of the non-matching operator.
 
+=item Newline in left-justified string
+
 The warning I<Newline in left-justified string> has been removed.
 
+=item Too late for "-T" option
+
 The error I<Too late for "-T" option> has been reformulated to be more
 descriptive.
 
+=item "%s" variable %s masks earlier declaration
+
+This warning is now emitted in more consistent cases; in short, when one
+of the declarations involved is a C<my> variable:
+
+    my $x;   my $x;    # warns
+    my $x;  our $x;    # warns
+    our $x;  my $x;    # warns
+
+On the other hand, the following:
+
+    our $x; our $x;
+
+now gives a C<"our" variable %s redeclared> warning.
+
+=item readdir()/closedir()/etc. attempted on invalid dirhandle
+
+These new warnings are now emitted when a dirhandle is used but is
+either closed or not really a dirhandle.
+
+=item perl -V
+
 C<perl -V> has several improvements, making it more useable from shell
 scripts to get the value of configuration variables. See L<perlrun> for
 details.
 
+=back
+
 =head1 Changed Internals
 
+In general, the source code of perl has been refactored, tied up, and
+optimized in many places. Also, memory management and allocation has been
+improved in a couple of points.
+
 =head2 Reordering of SVt_* constants
 
 The relative ordering of constants that define the various types of C<SV>
@@ -754,6 +965,36 @@ method anymore.)
 perl's parser is now generated by bison (it used to be generated by
 byacc.) As a result, it seems to be a bit more robust.
 
+Also, Dave Mitchell improved the lexer debugging output under C<-DT>.
+
+=head2 Use of C<const>
+
+Andy Lester supplied many improvements to determine which function
+parameters and local variables could actually be declared C<const> to the C
+compiler. Steve Peters provided new C<*_set> macros and reworked the core to
+use these rather than assigning to macros in LVALUE context.
+
+=head2 Mathoms
+
+A new file, F<mathoms.c>, has been added. It contains functions that are
+no longer used in the perl core, but that remain available for binary or
+source compatibility reasons. However, those functions will not be
+compiled in if you add C<-DNO_MATHOMS> in the compiler flags.
+
+=head2 C<AvFLAGS> has been removed
+
+The C<AvFLAGS> macro has been removed.
+
+=head2 C<av_*> changes
+
+The C<av_*()> functions, used to manipulate arrays, no longer accept null
+C<AV*> parameters.
+
+=head2 B:: modules inheritance changed
+
+The inheritance hierarchy of C<B::> modules has changed; C<B::NV> now
+inherits from C<B::SV> (it used to inherit from C<B::IV>).
+
 =head1 New Tests
 
 =head1 Known Problems