Day 160: Pugs 6.2.8 released!

autrijus on 2005-07-13T16:00:56

After nearly 1000 commits, two hackathons, and an entire month of hard work, I am delighted to announce that Pugs 6.2.8 is finally upon us:

http://pugscode.org/dist/Perl6-Pugs-6.2.8.tar.gz
SIZE = 1309147
SHA1 = efd32419dcddba596044a42564936888a28b3c69

A live CD is available as usual, courtesy of Ingo Blechschmidt:

http://linide.sf.net/pugs-livecd-6.2.8.iso

This release represents a new direction in Pugs development. Instead of a proof-of-concept Perl 6 interpreter, our new focus is toward a full-fledged Perl 6 compiler suite, with a core representation (PIL, Pugs Intermediate Language) and multiple backends, including Parrot, Haskell and Perl 5.

Moreover, we are gradually porting more parts of Pugs from Haskell to Perl 6. In particular, src/perl6/Prelude.pm is now the preferred place to implemente new built-in functions that can be defined with other primitives; the Parrot backend uses more primitives defined in src/perl6/Prelude/PIR.pm.

The next Pugs Apocryphon will cover this new roadmap in detail; meanwhile, please read docs/notes/plan for an overview.

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

Enjoy!
/Autrijus/

Changes for 6.2.8 (r5573) - July 13, 2005

Pugs Internals

  • Added code generation backends: PIR, PIL
    • Pugs can now generate PIL (Pugs Intermediate Language)
    • ...and emit PIR (Parrot Intermediate Representation) from PIL
    • New make pirsmoke target runs test suite using PIR backend
    • Test.pm can be compiled to PIR
    • Prelude/PIR.pm added with Perl 6 versions of some builtins
    • pugs -CPIL -e 'say 123' for dumping PIL from code
  • Implicit variables like $^a now only work in bare blocks
  • Initial support for %*INC: multiple require calls run only once
  • Named binding is now done in an inferencing phase before positional binding
  • New Haskell builtins: IO::tell and internal filehandle test functions
  • New PIR-specific builtin: leave
  • New Prelude builtins: File::seek, localtime, trans
  • New builtin classes: Proxy, Control::Caller, Time::Local
  • New trait for Prelude.pm: is builtin (installs into the global namespace)
  • Pairs in variables now bind to named parameters just like pair literals do
  • Parse trusts ClassName and my $foo is trait_name as no-ops
  • Parse fractional number literals starting with a leading dot: .1 -.1
  • Qualified names and exports now dealt with consistently
  • Support for does RoleName and is ClassName within class declarations
  • &foo in module Foo now looks up &Foo::foo as well
  • @?INIT and @?CHECK renamed back to @*INIT and @*CHECK space
  • Bare and Parametric types merged into Block
  • MY, OUR, OUTER, CALLER can no longer be used as user-defined packages
  • Prelude.pm is now pre-compiled to reduce startup time
  • multi foo { ... } is now a shorthand for multi sub foo { ... }
  • my Foo $foo .= new(...) parses and works
  • our variables in packages now generate qualified symbols
  • use perl5:DBI replaces the old use DBI--perl5 syntax
Bundled Modules
  • New Perl 6 modules:
    • DateTime::Set
    • DateTime
    • HTTP::Server::Simple
    • Module::Pluggable::Fast
    • Perldoc (partial port)
    • Set::Infinite
    • Span
    • Tree::Visitor and Tree::Visitor::FindByPath
    • WTemplate - the first Perl 6 templating engine
  • New Pugs-specific modules:
    • Perl-Compiler, a PIL representation in Perl 6
    • perl5/PIL-Run, a Perl 5 prototype of Perl 6 runtime environment
    • perl5/Perl6-MetaModel, a Perl 5 prototype of Perl 6 object model
  • Completed port: Locale::KeyedText
    • Compiles, executes, and passes whole pristine test suite
    • Updated version to 1.5.0, corresponding to the Perl 5 version 1.05
    • Some skips and workarounds remain due to missing Pugs features
  • Completed port: Test::Builder
Test, Examples and Documentations
  • Examples of methods acting on builtin types in examples/vmethods/
  • Interpreter and debugger for the l33t language in examples/obfu/l33t.p6
  • Low level sanity tests in t/01-sanity/ for the PIR code emitter
  • More JAPHs added to examples/japhs/
  • New directories: examples/continuation and examples/unitfunctions
  • Overview of PIL-based compilation roadmap in docs/notes/plan
  • Perl 6 Rule grammar and related files added to module/Grammars/
  • Script to generate Haskell source's import graph as util/importgraph.pl
  • Updates and cleanups to PA01; master copy is now docs/01Overview.kwid
  • YAPC::NA talk: Apocalypse Now (in docs/talks/Apocalypse_Now.spork)
Bug Fixes
  • Call parrot with -G (CGP) instead of -j (JIT) runcore to avoid segfaults
  • Fixed !~ to mean negated ~~ instead of ne
  • Fixed .isa to agree with smartmatch results
  • Fixed order of method invocation in BUILDALL and DESTROYALL
  • New environment variable PUGS_PARROT_OPTS for invoking external parrot
  • Qualified and global variables may now be used without declaration
  • $hashref.does(Hash) now returns true
  • &say =:= &say now evaluates to true
  • (42).kv now dies and (42,).kv works
  • [1] <=> [2] no longer misparsed as [1]{'='}[2]
  • caller now counts eval and the topmost main as one frame
  • qq{ ... { code } ... } no longer ignores the interpolated code
  • redo and next now works correctly inside loop blocks
  • sleep() returns seconds slept instead of undef
  • try is now capable of catching all type casting errors