So it would be useful for someone to compare the Perl 6 smartmatch table
as of February 2006 L<http://svn.perl.org/viewvc/perl6/doc/trunk/design/syn/S03.pod?view=markup&pathrev=7615>
and the current table L<http://svn.perl.org/viewvc/perl6/doc/trunk/design/syn/S03.pod?revision=14556&view=markup>
-and tabulate the differences in Perl 6. The diff is
+and tabulate the differences in Perl 6. The annotated view of changes is
+L<http://svn.perl.org/viewvc/perl6/doc/trunk/design/syn/S03.pod?view=annotate> and the diff is
C<svn diff -r7615:14556 http://svn.perl.org/perl6/doc/trunk/design/syn/S03.pod>
--- search for C<=head1 Smart matching>
+-- search for C<=head1 Smart matching>. (In theory F<viewvc> can generate that,
+but in practice when I tried it hung forever, I assume "thinking")
With that done and published, someone (else) can then map any changed Perl 6
semantics back to Perl 5, based on how the existing semantics map to Perl 5:
The addition of C<Pod::Simple> and its related modules may make this task
easier to complete.
-=head2 merge checkpods and podchecker
-
-F<pod/checkpods.PL> (and C<make check> in the F<pod/> subdirectory)
-implements a very basic check for pod files, but the errors it discovers
-aren't found by podchecker. Add this check to podchecker, get rid of
-checkpods and have C<make check> use podchecker.
-
=head2 Parallel testing
(This probably impacts much more than the core: also the Test::Harness
A full test suite for the B module would be nice.
-=head2 Deparse inlined constants
-
-Code such as this
-
- use constant PI => 4;
- warn PI
-
-will currently deparse as
-
- use constant ('PI', 4);
- warn 4;
-
-because the tokenizer inlines the value of the constant subroutine C<PI>.
-This allows various compile time optimisations, such as constant folding
-and dead code elimination. Where these haven't happened (such as the example
-above) it ought be possible to make B::Deparse work out the name of the
-original constant, because just enough information survives in the symbol
-table to do this. Specifically, the same scalar is used for the constant in
-the optree as is used for the constant subroutine, so by iterating over all
-symbol tables and generating a mapping of SV address to constant name, it
-would be possible to provide B::Deparse with this functionality.
-
=head2 A decent benchmark
C<perlbench> seems impervious to any recent changes made to the perl core. It
=over 4
-=item * C<cc (cc.U)>
+=item * C<cc> (in F<cc.U>)
This variable holds the name of a command to execute a C compiler which
can resolve multiple global references that happen to have the same
name. Usual values are F<cc> and F<gcc>.
Fervent ANSI compilers may be called F<c89>. AIX has F<xlc>.
-=item * ld (dlsrc.U)
+=item * C<ld> (in F<dlsrc.U>)
This variable indicates the program to be used to link
libraries for dynamic loading. On some systems, it is F<ld>.
=back
-There is an implicit historical assumption, probably from Perl 1, that C<$cc>
-is also the correct command for linking object files together to make an
-executable. This may be true on Unix, but it's not true on other platforms,
-and there are a maze of work arounds in other places (such as F<Makefile.SH>)
-to cope with this.
+There is an implicit historical assumption from around Perl5.000alpha
+something, that C<$cc> is also the correct command for linking object files
+together to make an executable. This may be true on Unix, but it's not true
+on other platforms, and there are a maze of work arounds in other places (such
+as F<Makefile.SH>) to cope with this.
Ideally, we should create a new variable to hold the name of the executable
linker program, probe for it in F<Configure>, and centralise all the special
case logic there or in hints files.
A small bikeshed issue remains - what to call it, given that C<$ld> is already
-taken (arguably for the wrong thing) and C<$link> could be confused with the
-Unix command line executable of the same name, which does something completely
-different. Andy Dougherty makes the counter argument "In parrot, I tried to
-call the command used to link object files and libraries into an executable
-F<link>, since that's what my vaguely-remembered DOS and VMS experience
-suggested. I don't think any real confusion has ensued, so it's probably a
-reasonable name for perl5 to use."
+taken (arguably for the wrong thing now, but on SunOS 4.1 it is the command
+for creating dynamically-loadable modules) and C<$link> could be confused with
+the Unix command line executable of the same name, which does something
+completely different. Andy Dougherty makes the counter argument "In parrot, I
+tried to call the command used to link object files and libraries into an
+executable F<link>, since that's what my vaguely-remembered DOS and VMS
+experience suggested. I don't think any real confusion has ensued, so it's
+probably a reasonable name for perl5 to use."
"Alas, I've always worried that introducing it would make things worse,
since now the module building utilities would have to look for
C<$Config{link}> and institute a fall-back plan if it weren't found."
-
+Although I can see that as confusing, given that C<$Config{d_link}> is true
+when (hard) links are available.
=head1 Tasks that need a little C knowledge
These tasks would need C knowledge, and knowledge of how the interpreter works,
or a willingness to learn.
+=head2 error reporting of [$a ; $b]
+
+Using C<;> inside brackets is a syntax error, and we don't propose to change
+that by giving it any meaning. However, it's not reported very helpfully:
+
+ $ perl -e '$a = [$b; $c];'
+ syntax error at -e line 1, near "$b;"
+ syntax error at -e line 1, near "$c]"
+ Execution of -e aborted due to compilation errors.
+
+It should be possible to hook into the tokeniser or the lexer, so that when a
+C<;> is parsed where it is not legal as a statement terminator (ie inside
+C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like
+I<';' isn't legal inside an expression - if you need multiple statements use a
+do {...} block>. See the thread starting at
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html
+
=head2 lexicals used only once
This warns:
The old perltodo notes that lvalue functions don't work for list or hash
slices. This would be good to fix.
-=head2 LVALUE functions in the debugger
-
-The old perltodo notes that lvalue functions don't work in the debugger. This
-would be good to fix.
-
=head2 regexp optimiser optional
The regexp optimiser is not optional. It should configurable to be, to allow