[Phoenix-pm] [ANNOUNCE] Pugs 6.2.12 and v6.pm released!

Scott Walters scott at illogics.org
Tue Jul 4 08:43:22 PDT 2006


----- Forwarded message from Audrey Tang <autrijus at gmail.com> -----

Subject: [ANNOUNCE] Pugs 6.2.12 and v6.pm released!
Date: Mon, 3 Jul 2006 23:57:01 -0400
From: Audrey Tang <autrijus at gmail.com>


                  Changes for 6.2.12 (r10930) - June 26, 2006
                                       
Licensing Changes

     * The [1]src/ tree and the pugs executable are now released under
       the permissive MIT license, in addition to Artistic and GPL
     * A new [2]third-party/ tree to hold bundled prerequisites
       originated from non-Pugs projects
       
New Perl 6 modules

     * [3]ext/Relation/ - Relation type for Perl 6 (incomplete)
     * [4]ext/Getopt-Std/ - Simple command-line parsing
       
Updated modules

     * [5]ext/Locale-KeyedText/ - Added export_as_hash() methods
     * [6]ext/Rosetta/: Multiple additions and rewrites
          + Merged ext/Rosetta-Engine-Native/ in, renamed to ::Example
          + Now officially incorporates "The Third Manifesto"
          + Rewrote half of Language.pod
          + Updated the DESCRIPTION and class list of Rosetta.pm
          + Added new core module Rosetta::Shell and example shell.pl
          + Added new documentation file Rosetta::SeeAlso
          + Various other documentation additions and edits
     * [7]ext/Test/: Avoid the use of junctions to make Parrot/Perl6's
       life easier
       
Perl 6 on Perl 5 (under [8]misc/pX/Common/)

     * Data-Bind - Implement Perl 6's calling/binding convention on Perl
       5
     * Inline-Parrot - a C version of Inline-Parrot - uses NCI for data
       exchange
     * Module-Compile - precompile Perl 5 modules transparently
     * P5_to_P6_Translation - beginning of a Perl 5.9 MAD tree parser and
       translater to Perl 6
     * Pugs-Compiler-Perl6 - Compiler for Perl 6 (implements 'use
       v6-pugs'):
    use v6-pugs; say "Perl 6"; use v5; print "Perl 5"
     * Pugs-Compiler-Precedence - an operator precedence parser, built
       around Parse::Yapp
     * Pugs-Compiler-Rule - Compiler for Perl 6 Rules
     * Pugs-Grammar-MiniPerl6 - translate Perl 6 rules into haskell
       Parsec
     * Pugs-Grammar-Perl6 - a Perl 6 parser - parses Test.pm!
     * lrep - a bootstrapped, very minimal Perl 6 compiler written in
       Perl 6
     * re-override - Swaps in an alternate regexp engine:
    ./perl -we 'use re::override-perl6; print "a" =~ /<word>**{1}/';
       
Test, Examples and Documentations

     * Restored this ChangeLog's entries for v6.0.0 thru v6.0.8, which
       were truncated in r8916, apparently from gnome's copy-paste buffer
       limit
     * [9]docs/Perl6/Doc hierarchy, installable Perl6::Doc
     * [10]docs/Perl6/FAQ/Capture.pod - FAQ on the new Signature/Capture
       convention
     * [11]docs/Perl6/FAQ/FUD.pod - Fears, Uncertainties and Doubts about
       Perl 6
     * [12]docs/talks/p6myths2.html: Juerd's talk "Perl 6 Myths"
     * [13]docs/talks/peek.spork: Gaal's OSDC talk "A Peek into Pugs
       Internals"
     * [14]examples/concurrency/: Added sample usage on Software
       Transactional Memory
     * [15]examples/qotw/: Added the QOTW 8 Expert solution
     * [16]examples/rules/: Added a sample BASIC parser
     * [17]src/Pugs/Parser - Perl 6 grammars for Capture.pg and
       Signature.pg
     * [18]util/cperl-mode.el - Emacs mode for Perl 6
       
Feature Changes

     * Pugs now builds in a single pass
     * Removed support for GHC 6.4.0 and added support for GHC 6.5
     * Removed support for Parrot 0.4.4 or below and added support for
       Parrot 0.4.5
     * &?SUB is replaced with &?ROUTINE; $?SUBNAME is replaced with
       &?ROUTINE.name
     * Arguments beginning in parens, such as f ('x')=>1 , is now always
       positional
     * Array and hash sigilled match variables, such as @0 , @<foo> and
       %<bar>
     * Assignment with non-obviously-scalar left-hand side is now in list
       context:
          + @a = 1,2,3 now parses as @a = (1,2,3)
     * Broke down Parser and AST.Internals to smaller files so rebuilds
       are faster
     * Builtin functions no longer defaults to $_ ; write .ord instead of
       ord
     * Compile Prelude.pm and Test.pm , to YAML bytecode for faster
       loading
     * Declarators are now lexical: { $x++ unless my $x } increments
       $OUTER::x
     * Declarators can now occur at expression position: my $x + my $y
       works
     * Declarators no longer take qualified names: our $Foo::x is invalid
     * Experimental support for Software Transactional Memory and atomic
       blocks
     * Hash initializers now revert to bias-to-left behavior as in Perl 5
          + In {X => 1, X => 2} , the value of X is 2, not 1
     * If a block ends on a line by itself, an implicit ; is assumed if
       possible
     * In the interactive shell, :d and :D (dump parse tree) now
       continues the parse from the current environment; use :reset to
       reset the environment
     * More helpful diagnostics when calling unsafe builtins under safe
       mode
     * Multiline support in the interactive shell reports unrecoverable
       parsefails
     * Names of named arguments must always be a bareword now, such as:
    f(name=>1); f(:name(1));
     * New AST-dumping backends: Parse-Pretty , Parse-YAML , Parse-HsYAML
     * Parse-time binding ::= is now fully supported
     * Proper desugaring of .= expressions, such as @a .= map(&sqrt)
     * Prototype objects: my Dog $fifo now assigns ::Foo into $fido
     * Removed support for require ::Class::Literal
     * Removed support for rx_ macros in Prelude for user-defined rule
       handlers
     * Quotelike constructs such as rx and qq no longer takes `#` as
       delimiter
     * Support for Unicode bracket characters for quotelike operators
     * Support for bracketed comments: #(...), #<<< ... >>>, etc
     * Support for controlled backtracking and whitespace sensitivity via
       distinct token/regex/rule delecarators
     * Support for environmental variables such as $ENV::PWD and $+PATH
     * Support for implicit-topic dereferences such as .[0] and .<foo>
     * Support for long dot syntax: $foo .blah
     * Support for scan metaoperators: [+] 1,2,3 evaluates to (1, 3, 6)
     * The -M command line switch can take import arguments: pugs
       -Mlib=foo
     * The parser is now much faster by being mostly predictive
       (non-backtracking)
     * The postfix infiniterange is no more; write 1..*` instead of `1...
     * Two my $x declarations in the same scope is now no-op instead of
       an error
     * Use Data.ByteString for fast string representation
     * Using libraries from embedded Perl 5 can import functions now
     * Whitespace disambiguation implemented on if , unless and for :
   if %ENV{ 3 } { 4 }   # hash lookup on %ENV
   if %ENV { 3 } { 4 }  # %ENV by itself
     * YAML bytecode is now versioned to reduce incompatibilities
     * ¬ is now unary instead of a list operator
     * :!foo is now a shorthand for foo => False
     * bool::true and bool::false are renamed to Bool::True and
       Bool::False
     * make upload-smoke now uploads smoke test automatically
     * my $!x is now recognized as an alternative spelling for my $x
     * q:code {...} gives ASTs in macros
     * readline and =$fh now autochomps
       
Bug Fixes

     * (1.3 % 1) was evaluating to 0; now it evaluates to 0.3 like
       everybody else
     * An uninitialized Code is no longer nullary: my &f; f 1 is not a
       parsefail
     * Chained assignments now return lvalues properly: $x = %y =
       (1,2,3,4);
     * Implicit variables ($^x) is no longer allowed in statemeent-level
       bare blocks
     * Implicit variables following a declarator was broken: {my $x;
       $^y}.(42)
     * In (@x, @y) = (1,2,3) , the @y is now cleared into an empty list
     * Invalid rules in embedded Parrot no longer triggers an uncatchable
       exit
     * Lexical imports are no longer discarded upon block reentry
     * Method invocant is self and $?SELF but no longer $_
     * Named-only subs such as sub f (:$x!) {} no longer parse as unary
       positional
     * Opening a file for writing now turns autoflushing on by default
     * Short-circuit operators now works again
     * Statement-level return and yield now propagates contexts correctly
     * Statement-level bare blocks now counts as one scope for OUTER ,
       not two
     * Statement-level bare blocks now runs under all contexts: (sub { {
       3 } }).()
     * Strings outside ASCII range no longer raises exceptions at the
       PGE/Parrot bridge
     * The bogus comma-less block argument form map {$_} 1,2,3 is no
       longer supported
     * %.foo and @.foo now always flattens in argument lists
     * &slurp and &readline evaluates eagerly and no longer races with
       &unlink
     * 1. was parsed as a valid integer, causing ambiguities; it's now
       invalid
     * @foo.perl works correctly when @foo is recursive
     * f(()) now passes &f an empty list, not undef
     * sign and <=> now fails on undefined arguments, instead of
       returning undef
     * slurp works correctly on UTF-8 files
     * sub f (@x) {}; f([1,2,3]) now works as it's no longer under slurpy
       context

References

   1. http://svn.openfoundry.org/pugs/src/
   2. http://svn.openfoundry.org/pugs/third-party/
   3. http://svn.openfoundry.org/pugs/ext/Relation/
   4. http://svn.openfoundry.org/pugs/ext/Getopt-Std/
   5. http://svn.openfoundry.org/pugs/ext/Locale-KeyedText/
   6. http://svn.openfoundry.org/pugs/ext/Rosetta/
   7. http://svn.openfoundry.org/pugs/ext/Test/
   8. http://svn.openfoundry.org/pugs/misc/pX/Common/
   9. http://svn.openfoundry.org/pugs/docs/Perl6/Doc
  10. http://svn.openfoundry.org/pugs/docs/Perl6/FAQ/Capture.pod
  11. http://svn.openfoundry.org/pugs/docs/Perl6/FAQ/FUD.pod
  12. http://svn.openfoundry.org/pugs/docs/talks/p6myths2.html
  13. http://svn.openfoundry.org/pugs/docs/talks/peek.spork
  14. http://svn.openfoundry.org/pugs/examples/concurrency/
  15. http://svn.openfoundry.org/pugs/examples/qotw/
  16. http://svn.openfoundry.org/pugs/examples/rules/
  17. http://svn.openfoundry.org/pugs/src/Pugs/Parser
  18. http://svn.openfoundry.org/pugs/util/cperl-mode.el


(Due to non-stop Hackathon since YAPC::NA, this announcement has been  
delayed
for a week. :-))

I'm glad to announce that Pugs 6.2.12 is now available from CPAN:

    http://search.cpan.org/dist/Perl6-Pugs-6.2.12/
    SIZE: 2693459
    SHA1: c9731da8e597591ca7e279766481ce0bece8cfa4

This release features much better performance: Building Pugs is 3  
times faster;
compiling Perl 6 programs becomes 10 times faster; running Perl 6  
programs is
now up to 2 times faster.

We also support various Perl 6 syntax changes since the last release,  
as well as
exciting new features, such as atomic code blocks with Software  
Transactional
Memory (STM) semantics.

6.2.12 marks the last release with the 6.0.x abstract syntax tree  
(AST) to
represent Perl 6 programs.  We are currently switching to a new AST that
supports the new Signature/Capture calling convention, multi-dispatch  
with
constraints, and a full Meta-Object Protocol (MOP).  We are  
developing this
new runtime simultaneously as Haskell modules and Perl 5 CPAN  
modules, to
ensure that they have identical semantics.

To this end, I'm happy to announce "v6.pm", a prototype Perl 6 Compiler
implemented entirely in Perl 5, is also available from CPAN:

    http://search.cpan.org/dist/v6-pugs/

All Perl 5 components are released as separate CPAN modules.  One can
use them as pure-perl5 modules, without the Perl 6 syntax provided by
"v6.pm"; this way one can get fully-conformant Perl 6 features without
the need of using Perl 6 syntax provided by "v6.pm".

(These CPAN modules maintain their own release cycles; we will release
more components on CPAN as they are abstracted out from the Pugs  
runtime.)

The .meta API for Object/Class/Method reflection is supported by the
"Moose" and "Class::MOP" modules:

    http://search.cpan.org/dist/Moose/
    http://search.cpan.org/dist/Class-MOP/

The compiler and runtime for Perl 6 Grammars (top-down) and operator
precedence (bottom-up) is available as the "Pugs::Gramamr::Rule" and
"Pugs::Grammar::Precedence" modules:

    http://search.cpan.org/dist/Pugs-Compiler-Rule/

The calling convention with named, optional, and slurpy arguemnts is
supported by the "Data::Bind" module:

    http://search.cpan.org/dist/Data-Bind/

The precompile-Perl6-to-Perl5 mechanism is based on "Module::Compile", a
safe and composable replacement to source filtering:

    http://search.cpan.org/dist/Module-Compile/
    http://search.cpan.org/dist/Filter-Simple-Compile/

In summary: Perl 5 is now a first-class virtual machine for Pugs, and in
this journey toward self-hosting, we will share as much common structure
as possible between the Perl 5, Haskell, and the Parrot runtimes.

With a prototype end-to-end implementation written in pure Perl 5, we  
are
entering the "Hack, Hack, Hack" phase of the (imaginary) Perl 6 timeline
from nearly one year ago:

    http://pugscode.org/images/timeline.png

I'd like to thank Flavio Glock for initiating and leading the v6.pm  
effort,
and all lambdacamel and lambdamoose on irc.freenode.net #perl6 for their
relentless enthusiasm in getting Perl 6 deployed to the Real World.

See you on IRC!

Audrey




----- End forwarded message -----


More information about the Phoenix-pm mailing list