Day 112: Pugs 6.2.5 released!

autrijus on 2005-05-23T21:14:19

On behalf of the Pugs team, I am elated to announce the release of Pugs 6.2.5, with much more comprehensive OO support, hyper and reduction metaoperators on user-defined operators, as well as experimental coroutine support.

Also of note is pugs.pm and Inline::Pugs, two Perl 5 modules that lets you inline Perl 6 code in Perl 5 programs. The docs/quickref/ series of documents is also helpful as a companion to the Synopses.

You can download Pugs from a nearby CPAN mirror, or from pugscode.org:

Perl6-Pugs-6.2.5.tar.gz
SIZE = 1012358
SHA1 = a4442eb156b919ec139ab2b64e3ea9db47ed371c
A Pugs/Parrot live CD, contributed by iblech, is available as well:
pugs-livecd-6.2.5.iso
Amazingly, the project's velocity is still increasing, with 680 new commits, compared to 507 from 6.2.3. The graph below shows the growth of number of commits and committers:
pugs-svngraph-6.2.5.png
Again, my sincere gratitude to all lambdacamels for making this release as exciting and enjoyable as it is. See you next week!

Thanks,
/Autrijus/

Changes for 6.2.5 (r3794) - May 24, 2005

Bundled Modules

  • Fix one broken test from the Set module.

Changes for 6.2.4 (r3790) - May 24, 2005

Pugs Internals

  • All infix operators now receive reduction forms, such as [+]
  • All operators now receive hyperised forms, such as >>+<< and ~<<
  • Dereferencers: @{...} and @$var
  • Experimental support for coro { ... }, coro name { ... } and yield()
  • Experimental support for lazy {...}
  • External Parrot for Rules is now kept in a single process
  • Inheritance: class Foo is Bar and class Foo does Bar
  • Interactive shell commands normalised to always begin with :
  • MMD handling is now more sophisticated, and $.chained.attr.methods works
  • Much better error messages, with cascading stack trace
  • New ./method syntax implemented
  • Objects numify to a unique value accessible with $obj.id()
  • Parrot compiler backend now handles namespaces and method calls
  • Parsing of hierarchical return types: sub foo returns Hash of Str
  • Private attributes: has $:foo now generates private accessors
  • Private methods: method :foo () and $obj.:foo
  • Switch to sum-of-inheritance-level distance for MMD dispatch on invocants
  • Symbolic references: $::(...) and $::some::("var")::($bar)
  • User-defined symbolic infix, postfix and prefix unary functions
  • $?CLASS and $?PACKAGE works; $?ROLE currently works as $?CLASS
  • &code.name and &code.arity added
  • FIRST {...} and my $x = FIRST {...} support
  • INIT {...} and CHECK {...} blocks in void context and as rvalues
  • OUTER:: scope implemented
  • do {...} literal added
  • gather { ... } and take() implemented
  • submethod BUILD is called for each parent class and class itself
  • time() now returns a fractional number
  • try {...} literal allowed at expression level
  • warn(), uniq(), fail(), times() implemented

Bundled Modules

  • Inline::Pugs and pugs module to inline Perl 6 into Perl 5 programs
  • Locale::KeyedText re-added (this was our first contributed module)
  • Net::IRC, OO version added
  • Perl::MetaModel, prototype of Perl 6 OO meta-model in Perl 6 OO
  • Set::Junction and Set::Hash added as implementation backends to Set
  • Set now has many overloaded operators
  • Test::Builder, with Perl 6 objects (parses, and mostly works -- see tests)
  • Tree::Simple, renamed to Tree and converted to OO
  • Test now gives better diagnostics to cmp_ok()
  • fp module added for functional programming

Tests, Examples and Documentations

  • Many new test and several tests refactored, we now have 5600+ tests
  • Hangman IRC bot created from hangman.p6
  • IRC logfile to HTML converter added
  • Initial sketch of Pugs Apocryphon 2 as docs/02Internals.pod
  • Much work on internal Haddock Haskell documentation
  • OO Wizard RPG game added in examples/games/
  • Parrot is now included in the Pugs Live CD
  • Perl 6 quick reference documents added to docs/quickref
  • Perl6::Rules test suite incorporated into t/rules/
  • Removed usage of force_todo() in favor of :todo

Bug Fixes

  • Bare blocks containing $_ is now executed correctly
  • Correct parsing for user-defined nullary functions
  • Hash and array sub parameters are read-only by default, same as scalars
  • Post-term invocation in interpolation no longer eat trailing whitespace
  • Slurpy hash parameters no longer count as nonslurpy during arity matching
  • Type-to-type smartmatch, e.g. Int ~~ Num, now works
  • $obj.method($arg1, $arg2) can now MMD dispatch over all arguments
  • foo 3 and foo 4 is now parsed as two separate function calls
  • loop (;0;) {...} will no longer execute the loop body
  • map({...} @list) is no longer valid syntax
  • next now re-evaluates condition in loop constructs
  • returns Foo::Bar from subs/methods now works
  • split// now attaches the submatches to the resulting list
  • state $x = 42 now only assigns $x once
  • system() returns proper exit codes