Day 71: Pugs 6.2.0 released.

autrijus on 2005-04-12T19:54:54

I am delighted to report that the first major milestone of Pugs, version 6.2.0, has been released to CPAN:

Perl6-Pugs-6.2.0.tar.gz
SIZE (Perl6-Pugs-6.2.0.tar.gz) = 642482
MD5 (Perl6-Pugs-6.2.0.tar.gz) = 8d5438d49db872ffe2394fd4995d335b

It represents the culmination of 71 days of intensive work, by more than 60 people in our committer team, with nearly 2000 revisions.

According to the roadmap in PA01, this and the next milestone are:

6.2: Basic IO and control flow elements; mutable variables; assignment.
6.28: Classes and traits.
In other words, we are now reasonably confident that the basics of Perl 6 syntax and data structures are in place. We already have an object/type system now, and the 6.2.x series will make them available on the language level, together with a full-fledged class system.

After this release, I will take a short break from coding Pugs, and focus on writing "Pugs Apocryphon 2: Design of Pugs". In it I will explain the relation of the various components in Pugs, as well as how it relates to Parrot, GHC, and other systems. Once it is written, I plan to start working on the IMC subsystem, with the goal of making Parrot IMC the primary target for the 6.28.0 release.

Again, thanks too all lambdacamels for making this release possible, and for building this new ship with me.

Enjoy,
/Autrijus/

Changes for 6.2.0 - April 13, 2005

Pugs Internals

  • Major refactor of ITypes subsystem, we now have:
    • Nested structures: $a{1}[2]{3}
    • Autovivification: $a{1}[2]{3} = <b>
    • Tied magic: %ENV<USER>
    • Proxy scalars: %ENV<PATH> ~= '/tmp'
    • Slice assignment: @x[1,2] = <a b>
    • Anonymous arrays: [1..10][0] = 0
    • Lazy IArray structures: "Infinite lists, constant time"
    • Infinite slices: @x[1...]
    • and much much more ...
  • Experimental support for link external Haskell libraries
  • New builtins:
    • sum, log, log10, sign, pi, tan, cos, atan
    • zip, hash, pair, isa, bytes, chars, codes, graphs
  • New type specific builtins;
    • .kv, .pairs, .delete, .exists
    • .pick, .keys, .values
  • Several file test operators
    • -r, -w, -x, -e, -z, -s, -f, -d
  • Support for $*UID, $*EUID, $*GID, and $*EGID on *nix
  • Stacked file test operators now (mostly) work
  • Added is rw trait for subroutine parameters
  • $*PID now works on *nix systems
  • Several command line switches implemented: -I -p -n and more
  • s:perl5/.../{ <code> }/ works correctly
  • Type casting errors are now more descriptive
  • require "" now works on UTF-8 files
  • Regex substitution is now UTF-8 safe
  • sort {} now works
  • Some support for the splat star *
Tests, Examples and Documentations
  • Many new tests and cleaning up of older tests, we now have 4200+
  • examples/games/hangman.p6 added, with AUTHORS as the dictionary file
  • READTHEM added; recommended reading for aspiring Pugs hackers
  • The Perl 6 Cookbook is well underway at examples/cookbook/
  • Working perl6 modules added to ext/
    • CGI.pm
    • lib.pm
    • HTML::Entities
  • Several Working Drafts added to docs/
    • Apocalypse 20 - Debugging
    • Synopsis 26 - Perl Documentation
    • Synopsis 28 - Special Variables
    • Synopsis 27 - Perl Culture (with CPAN drinking game rules)
    • Synopsis 29 - Builtin Functions
  • Early work on Perl 6 Object System in docs/class/
Bug Fixes
  • Parens no longer required for; last() and return()
  • Fixed issue with binding invocant parameters
  • Fixed parsing issue with lc $, $y
  • $_ now behaves correctly in most cases
  • exit() now triggers END {} correctly
  • undef $x now works correctly ($x is rw)
  • Fixed parsing of default parameters: sub foo (+$x = 3, +$y = 4)
  • say and print now default to $_
  • map { ... } @list now parses correctly
  • loop { ... } now works correctly
  • int(3) + 4 now parses correctly
  • Fix parsefail bug on false unaries
  • for (@list) no longer flattens @list
  • $var.method $param is now illegal: use $var.method($param)
  • readline() is now strict in list context
  • $list.join('|') now works
  • xor and ^^ now returns the true operand instead of bool::true
  • Named bindings to %_ repaired


thank you!

jeff on 2005-04-13T05:48:27

a hearty pat on the back to you and all of your lambdacamels. truly remarkable!

now, one thing that made me smile :

"loop { ... } no works correctly"

either that is a typo, or it is a fiendishly clever marketing choice to gloss over the unfortunate case that 'loop' isn't yet working correctly.... whichever the case, Bravo! (i imagine its just a typo ;)

i personally haven't gotten past lurking mode yet... working on my 'lambda' and my 'camel' when i can though. i do hope you kick the tires of apocryphon 2 a bit on #perl6 while you're developing it (fine if you don't of course) -- i'm eagerly awaiting this guide to better understanding the pugs code base. still trying to wrap my head around haskell and fp, let alone pugs -- but hope to get there some day.

again: congratulations !

Re:thank you!

autrijus on 2005-04-13T06:30:17

It's a typo. Thanks, fixed. :-)

I will of course work out PA02 with #perl6, but I have to first catch up $work. Stay tuned...