Day 219 (r7520): Pugs 6.2.10 released!

autrijus on 2005-10-10T01:14:01

I am delighted to announce Pugs 6.2.10, released during a slashdotting on geoffb's "Optimizing for Fun" column:

http://developers.slashdot.org/article.pl?sid=05/10/09/1831219

The release tarball will be available from CPAN shortly:

http://pugscode.org/dist/Perl6-Pugs-6.2.10.tar.gz
SIZE = 2394516
SHA1 = 3d8669fdccc3616c99cdde68659759b8b5782859

With two months of development, this release features more tightly integrated JavaScript and Perl5 code generator backends, a library interface to the Pugs system via support for the Haskell Cabal frameworks, as well as many new tests.

After the release, the push toward 6.28.0 will begin in earnest, with the newly specified container model and object model integrated back to the main runtime, fleshing out support for the remaining OO features.

Again, thanks to all the lambdacamels for building this new ship with me. :)

Enjoy!
/Autrijus/

Changes for 6.2.10 (r7520) - Oct 10, 2005

Feature Changes

Shared components

  • Support for the Haskell Cabal framework, exposing Pugs as a library to other Haskell users, paving the way for use in IDEs, as well as future Inline::Pugs and Inline::GHC modules
  • Adopted the code convention of expanding literal tab chars to spaces
  • JavaScript backend can be invoked with pugs -B JS
  • Perl 5 backend can be invoked with pugs -B Perl5
  • Pugs will now compile version ranges in 'use/require' statements
  • Significant backend enhancements; see below
  • $?PUGS_BACKEND can be used to tell which runtime is in use
  • exec emulated (partially) on Win32
JavaScript backend
  • Passes 91% of the main test suite (including TODO failures)
  • Integrated with MetaModel 1.0
  • Faster code generation, taking advantage of -CPerl5 output.
  • Switched to continuation passing style (CPS) to properly support return(), &?CALLER_CONTINUATION, coroutines, and sleep()
  • Improved support for binding and autodereferentiation
  • Initial support for multi subs
  • Initial support for symbolic dereferentiation
  • List construction no longer creates new containers
  • Miscellaneous performance improvements
  • Named-only arguments (+$x and ++$x) can't be passed positionally anymore
  • Parts of the Prelude can be written in Perl 5 now to improve performance
  • Perl 5-like regular expressions mostly working
  • Proper UTF-8 handling
  • Support for "monkey-but" ($foo but {...})
  • Support for $CALLER:: and $OUTER::
  • Support for lazy {...} blocks for delayed evaluation
  • Support for temp and let declarations
  • Support for array and hash autovivification
  • Support for array and hash slices
  • Support for evaluating expressions in the PIL2JS shell (:e <exp>)
  • Support for junctions
  • Support for loading JSAN modules by using use jsan:Module.Name
  • Support for lvalue subroutines (foo() = ...)
  • Support for slurpy hashes in subroutine signatures
  • Support for the Proxy class (not yet user-visible)
  • Support for the eqv operator
  • Using for with only one element to loop over works now
  • int() works correctly on special values like Inf or NaN now
  • substr() returns a r/w proxy: substr($str, $pos, $len) = $replacement)
Perl 5 backend
  • Passes 33% of the main test suite (including TODO failures)
  • Integrated with the Perl 5 edition of MetaModel 2.0
  • Compiles and runs Perl 6 version of Test.pm
  • Infinite lazy lists, Pairs, References, and intrinsic classes
  • Multi Sub, Class, Match, exceptions, types and subtypes
  • Scalar, Hash and Array containers, with tieing, binding and read-onlyness
  • Support for an extensive list of operators
  • Supports eval() with Perl 5 and Perl 6 code
  • %ENV is shared with Perl 5; @INC is separate from @Perl5::INC
Bug Fixes

Shared components

  • Fixed foo {1}.blah being misparsed as foo({1}).blah
  • Fixed a hashref infinite loop
  • Fixed infinite loop on sub { 1 }.pairs
  • Multiple sub foo no longer silently means multi foo
JavaScript backend
  • Fixed evaluation order of assignments and bindings
  • Fixed .values and .kv to return aliases
Bundled Modules

New Perl 6 modules

  • Perl6-Container-Array, Perl6-Value-List: prototype modules for implementing Lazy lists in Perl 6.
  • Log-Selective
  • Cipher - Cipher API suite for cryptographic ciphers
  • FA-DFA
Updated modules
  • Locale-KeyedText: Synchronized with p5 version 1.6.2
  • Test-Builder: new APIs, including test_pass() and test_fail()
Experimental modules (in misc/, not installed)
  • Blondie, prototype compiler for native code generation and type-inferencing with Attribute Grammers
  • XML::SAX
  • Getopt::Long
  • Rosetta-Incubator, a complete set of Rosetta[|::] and SQL::Routine[|::] modules, restarted development at 2005.09.29
Test, Examples and Documentations
  • Many new tests and test refactoring, we now have 10300+ tests
  • Documentation for draft GC API at docs/notes/GC.pod
  • Data file for curcular prelude exploratory diagram at docs/notes/compilation_of_circular_prelude.graffle, some examples at docs/notes/circular_prelude_stuff.pl
  • Collaborative journal at /docs/journal
  • Autrijus's CUFP talk at /mirror/pugs/docs/talks/cufp2005.txt
  • Theory Model proposal at docs/notes/theory.pod