== Changes for 6.2.7 (r4612) - June 13, 2005 === Pugs Internals * Add `::?CLASS`, `::?ROLE`, and `::?PACKAGE` magicals * Allow bypassing the Standard Prelude by setting `$ENV` * Experimental heredoc support via `qq:to/END/ ... END` * Implement `is required` for subroutine parameters * New builtins: `caller`, `Carp::longmess`, `Scalar::as` * Obsolete the old `open` builtin in favor of Prelude's `File::open()` * Rudimentary, source-filter-like macro support added * Speed up parsing for 2x by caching dynamic grammar rules * Support for lvalue `substr()` * `:coerce` and other A12 catgories are parsed in sub names * `is unsafe` trait to mark subs unavailable in safe mode * `method foo ($.x) {}` now sets `$.x` * `undef($x)` is now spelled `undefine($x)` === Bundled Modules * New modules added: ** `FindBin` ** `File::Find` ** `HTTP::Message` ** `POE` (experimental) ** `URI::Escape` * Extended tests for `Tree` === Tests, Examples and Documentations * APW talk: "Apocalypse Now" in `docs/talks/Apocalypse_Now.spork` * APW talk: "Eine Einfuehrung in Perl 6" in `docs/talks/perl6-apw2005/` * Documentation of how to execute Pugs in `lib/pugs/run.pod` * Examples of writing nested loops in `examples/nested_loops` * Haskell Workshop paper on Pugs in `docs/talks/hw2005.tex` * Overview of Pugs source tree in `lib/pugs/hack.pod` * Overview of Rules bootstrapping plan in `/docs/other/rules_bootstrap` * Some new test and several tests refactored, we now have 7600+ tests * Unit manipulation and converstions examples in `units.p6` * `examples/algorithms` subdir now unifies algorithmics examples === Bug Fixes * '\' protects delimiters in rules * Chained comparisons now work again (were broken in 6.2.6) * Critical evals (`use`, `require`, `prelude`) now raise parsefail exceptions * Fix `[].method` and `{}.method` to call `Array::method` and `Hash::method` * Fixed `~{1=>2}` to stringify to `"1\t2\n"` correctly * Parse errors inside blocks are now reported on the occuring position * Parse for array and hash captures in rules * `Test::is()` now shows the expected result correctly again * `module Foo {...}` now parses correctly == Changes for 6.2.6 (r4318) - June 2, 2005 === Pugs Internals * Pugs can now embed Perl 5 and use CPAN modules ** Perl 5 objects, classes and functions are understood by Pugs ** Pugs objects, classes and functions are understood by Perl 5 ** These types can also be used in round-trip callbacks * All user-defined classes now inherit from "Object" * Bare blocks now belongs to the `Bare` type; pointy subs are still `Block` * Class methods: `My::Class.foo()` * Class objects are initialised from the default class tree * Exclusive-range operators: `^..`, `..^` and `^..^` * Experimental compiler backend `Pugs.Compile.Pugs2` (not yet working) * Experimental `&code.body` support for reified ASTs * Experimental embed API in `src/perl5/pugsembed.h` * Fully qualified subroutine names are now parsed * More core modules refactored for improved compilation speed and readability * Multi-invocant calls like `foo($x, $y: $z)` are no longer legal * New builtins: `evalfile`, `nothing`, `getc` * Parameterless bare blocks now get an implicit $_ by default * Parameterless pointy blocks no longer get a default parameter list * Parrot compilation backend now handles qualified subroutine names * Pugs now has a /Safe/ mode, enable by the PUGS_SAFEMODE environment variable * Stub implementation for `.does` as an alias of `.isa` (no Roles yet) * Unix only builtins: `opendir`, `readdir`, `rewinddir`, `closedir` * `$str.split(/rule/)` and `$str.split($delim)` * `&infix<=>` can now be used as the assignment operator * `Prelude.pm` added to `src/perl6` to implement S29 builtins in Perl 6 * `SUPER::`, `BUILDALL` and `DESTROYALL` * `is export` now works as specified * `loop {...} while`, `loop {...} until` * `map` and `reduce` can now take n-ary functions. * `when .does(Foo)`, `when $_.does(Foo)` and `when Foo` === Bundled Modules * Many more code sketches and documentation added to `Perl-MetaModel` * New `Benchmark` module added * `CGI` has been improved: ** Now has: `escapeHTML`, `unescapeHTML`, `redirect` ** Supports more HTTP headers in `header` ** New module `CGI::Util` added * New `Date` module added * New `Text::Glob` module added * New `libwww-perl` distribution added ** `LWP-Simple` now moved here ** `HTTP::Headers`, `HTTP::Message` modules added * `Test::Builder` is now dangerously close to completely working * `fp` now exports `&identity` instead of `&id` to avoid clash with `$obj.id` * `use lib 'path';` now works === Tests, Examples and Documentations * Some new test and several tests refactored, we now have 7200+ tests * Pugs Apocryphon 2 improved and edited in `docs/02Internals.pod` * Many improvements to `util/perl6.vim` to handle new features * More Haddock documentation added to the Haskell source * New IRC bot `evalbot` added to `examples/network` * New JAPH for Italian Perl Workshop added in `examples/japh` * Perl 6 port of Perl Power Tools begun in `examples/ppt` * Some new additions and cleanup of the cookbook * `examples/network/screen-nodestatus.p6` added to monitor hosts in GNU screen === Bug Fixes * Hyper-reduction prefix operators such as `[+]«` are now parsed * Single-character class names were not parsed correctly * Stringifying a Rule no longer throws an uncatchable exception * Use of undeclared types in signatures no longer breaks MMD * `(1 => 2 ?? 3 :: 4)` now always constructs a pair * `Foo.bar()` now dispatch to `&Foo::bar` instead of to `&Class::bar` * `Foo.isa(Foo)` no longer means `Class.isa(foo)` * `pugs -MFoo` now means `use Foo` not `require Foo` * `readline()` now reads utf-8 * `times` now really works on Win32 * `when .isa(Foo)` is no longer parsed as `when $_ ~~ .isa(Foo)` now == 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 == Changes for 6.2.3 (r3111) - May 12, 2005 === Pugs Internals * Pugs can now embed Parrot or use an external `parrot` executable ** Under embedded mode, Pugs is a registered Parrot compiler ** `eval_parrot` and `require_parrot` builtins for running PIR code ** `pugs -BParrot` can compile Perl 6 program to PIR and run it in-memory * Perl 6 Rules support via Parrot/PGE: ** Named rules and subrule support ** The former `$0` (entire match) is now `$<>` ** `$0` is now the same as `~$/[0]`, i.e. the same as Perl 5's `$1` ** `.from`, `.to`, `.matches` ** `//`, `rx//`, `m//`, `rule{}` ** `s///` and `//` in statement level operates on `$_` * Basic Object support: ** Accessors generated for public attributes ** Identity operator: `=:=` ** Method chaining: `$foo.bar().baz()` ** Method invocant: `method foo ($self: $x)` and topicalized as `$_` ** Public and private attributes, as well as `has $.attr is rw` ** `$obj ~~ Class` support ** `$obj.clone()` support ** `class Foo {}` works (no inheritance yet) * Experimental `eval_yaml()` support to parse YAML streams * Experimental support for prefix reduce metaoperator `[+]` * Hyper operators now works on arrays too * Improved `.perl()` format for array, hash and pair objects * Much faster random access to arrays; it's now O(1) instead of O(n) * Much improved MMD support * New `is lazy` trait for parameters * Refactoring of large Haskell modules to improve compilation speed * Support for building a profiled Pugs * Undef in grouped lhs: `my ($x, undef, $y) = 1..3;` is now legal * `$thread.kill`, `$thread.detach`, `$thread.join` * `%hash.pick`, `@array.pick` and `(list).pick` * `reduce` primitive * `state $var` implemented * `system(Str: List)` and `exec(Str: List)` on Unix platforms === Bundled Modules * All modules have their own `ChangeLog` now * `Algorithm::TokenBucket`, with closure objects * `Config::Tiny`, with closure objects * `Kwid::Event::Parser`, with procedures * `Net::IRC`, with closure objects * `Perl::MetaModel`, prototype of Perl 6 OO meta-model in Perl 6 * `Pod::Stream::Parser` renamed to `Pod::Event::Parser` and added more functionality * `Set`, with Perl 6 objects * `Test::Builder`, with Perl 6 objects (parses, but does not work yet) * `Tree::Simple`, with closure objects === Tests, Examples and Documentations * Many new test and several tests refactored, we now have 4921 tests * Documentation for `hangman.p6` added in `examples/games/hangman.pod` * New "Monads in Perl 6" example in `examples/functional/monads.p6` * Script to generate a Pugs Live CD in `util/livecd` * Several IRC bots added to `examples/network` including svnbot and logbot * TODO tests now use `:todo` for better reporting * The first Perl 6 poem in `examples/poetry/` === Bug Fixes * Logical short-circuiting operators no longer flattens references * Prohibit Array and Hash dereference on plain values * Slurpy context no longer flattens * Stringifying IO handles is no longer fatal * `$*PID` now works on Win32 * `%*ENV` now completely works on Win32 * `(a => 3+4)` is now parsed as `(a => (3+4))`, not `(a => 3)+4` * `any().pick` no longer dies * `my @x = [1]; @x[0][0] = 2` should now work * `next` in nested `for {}` blocks no longer escapes the outer loop * `to => 123` parses again; arrow pairs now always trumps unary functions * `{}` in P5 rules is no longer closure interpolation == Changes for 6.2.2 (r2604) - May 1, 2005 === Pugs Internals * Many performance speed-ups, including: ** New, much much faster implementation type for Pad ** Replace Data.HashTable with STM Map ** Restructured the Eval monad to be reusable on compilers and interpreters ** Position handling and statement reduction logic re-written ** Add strictness to core Monad and object structures * Functions declared as unary are now parsed as such * Global subroutine declaration is now visible in the whole file * Improved Parrot compiler backend support for mod_pugs * Much better error messages, tracking source file range for expressions * New loop control routines: `next` and `redo` * On Win32, `-s` and `-z` now work correctly * Optimized build is now default; use `make unoptimized` to turn it off * Pugs can now build on Cygwin * `#line 123` and `#line 123 "filename"` both work * `&infix:<%>` raises trappable exception when modulus is zero * `(undef, $x) = (1, 2)` is now supported * `@array.end` implemented * `BEGIN {...}` blocks now work on both statement-level and term level * `for @a { say }` is now parsed as `for @a -> $_ is rw { say }` * `for @a -> () { ... }` now consumes one element at a time * `my $var ::= expr` works * `print (4)+4` now prints 8, because the whitespace is no longer skipped * `use Module;` supported and happens at `BEGIN` time * `|=` `^=` `&=` for junctions === Tests, Examples and Documentations * Many new tests and cleanup of older tests, we are now at 4600+ tests * API documentation available in `docs/haddock/` * Added an example of IRC bot into `examples/network` * Added simple POD parser into `ext/Pod-Stream-Parser` * Added support for generating Haskell documentation with `make haddock` * Added the tic-tac-toe game from perlmonks into `examples/games/` * Parallel `make smoke` when `%ENV` is greater than 1 * Patched local `Test::Harness` to display number of TODO tests * Progressive powerset generator from perlmonks added to `examples/` * Smoke testing tool now includes timing data in YAML harness data * German talk /Perl 6, genau jetzt!/ finished === Bug Fixes * Constant references now automatically dereference when used in rvalue context * Junctive `^` should join junctions instead of autothread them * Lone block does not count as /simple expression/ anymore * Repair single statements in shell to preserve lexical context * Repair the `list` context hinter * The dot in `123.ref` is now parsed correctly as `(123).ref` * `$_` in subroutine signatures is no longer slurpy by default * `$x = \$x` no longer causes an infinite loop * `NaN` calculations no longer causes infinite loop * `last if foo` now means `last() if foo()` instead of `last(if(foo()))` * `one(1,1).pick` bug fixed; it should return `undef` * `splice([], 1)` no longer causes division by zero errors == Changes for 6.2.1 (r2288) - April 24, 2005 === Pugs Internals * Unification of the quoting code, most quoting constructs now work ** <<>> now works ** Regular expressions are parsed as `qq//`, but without backslash protection ** Hash subscripts using `<>` or `<<>>` are parsed as general quotations ** This means interpolation, etc. is done just like `q:w` or `qq:ww` ** `$` not interpolate in quoting constructs ** `$)`, `$]`, `$#` and `$` do not interpolate in `rx:P5//` constructs * Assigning a `List` into a `Scalar` now vivifies it into an `Array` * Assigning to pairs now works as expected * Autoextracted `$_` is now `rw` by default * Better handling for size extensions and `exists()` for negative indices * Bindings implemented for multiple variables * Experimental support for `eval_haskell()` builtin * First stab at a lexical `$*CWD` variable * Index in slices now defaults to List: `@a[func_returns_array()]` now works * Initialize readline properly in interactive shell * Junctive types in subroutine signatures `sub foo (Str|Array)` * New builtins: `>>~<<`, `kill()`, `splice`, `readdir()` (list context only) * Pairs are now always objects and never values * Passing too many slurpy arguments is now an exception * Regexps now support `:P5` and `:Perl5` as well as `:perl5` * Storing into negative array elements now works * The `Any` parameter type no longer inhibits juctive autothreading * Variables in rvalue context no longer returns its references * `%h<>` now acts just like `%h{}` in both lhs and rhs * `%h` now means `%h{'x'}` instead of `%h{'x',}` * `'key' => val` now works as named param just like `key => val` did * `(sub {3} | sub {2})()` implemented * `:P5` flags now work as `:P5` and `:i` `:g` works too * `:l filename` no longer needs double quotes in the Shell * `<>` (list quoting) is now always in list context * `is rw` and `is copy` implemented in full * `list()` now actually imposes list context * `want()` has been implemented, returning a simple string === Tests, Examples and Documentations * Many new tests and cleanup of older tests, we are now at 4500+ tests ** removed all usages of todo_* functions since the are now deprecated * Added `isnt()`, `unlike()`, `skip_rest`, `throws_ok` functions to `Test.pm` * Added some Perl 6 related talks in `docs/talks` * Added the `make smoke` target to `Makefile` * Additions and improvements to the `util/catalog_tests.pl` scripts * Improvements to `examples/network` and added README file * Improvments to the `util/p5_to_p6.pl` script * Major refactoring of the Test.pm module (see `ext/Test/ChangeLog` for details) * Memory game, first web application written in Perl 6 * New Perl 6 tutorial generator ported to Pugs in `examples/tutorial_gen/` * New naive baysian text classifier add in `examples/naive_bayesian` * New quote generator script in `examples/motd` * Params are now loaded on-demand in `CGI.pm` to take advantage of encoding * Several new additions to the Perl 6 Cookbook * Svn graphing script added to `util/` * Test smoke scripts converted to use `Test::Tap::Model` * The `fp.p6` file has been broken into seperate files in `examples/fp/` * UTF-8 URL decoding added to `CGI.pm` === Bug Fixes * Accessing `@array[1000]` (without setting it) no longer extends `@array` * Code blocks as subroutine arguments now results in correct arity * Code objects now returns the correct subtypes * Comma is no longer flattened as arguments for infix and postfix functions * Corrected `chmod` prototype * Fixed infinite bug when evaluating `+((1|2).values)` * Fixed passing references into bound variables in subroutines * Fixed segfault with `:r` in interactive shell * Hyper operators now extends to the longer, not shorter, lists * Inf/NaN handling for `**` now works * Manpage for `Perl6::Pugs` now generated correctly * RValues at the right hand of array assignment are flattened to prevent loops * Restore `%h = want()` to impose string context on rhs * Setting `$*CWD` to invalid directory is no longer fatal * Slurpy params now applies *-flattening to its arguments * `$x = 1|2; $x = 3` no longer treats `1|2` as a constant * `%h` or `%h{'a'}` no longer eats trailing spaces interpolated strings * `(1,(2,3))` in scalar context is now `[1,[2,3]]` * `**` no longer truncates the exponent to integer * `=` now assigns correct slurpy context to rhs * `=cut` without a newline at EOF is now parsed correctly * `return() if 1` now works correctly == Changes for 6.2.0 (r1921) - April 13, 2005 === Pugs Internals * Major refactor of ITypes subsystem, we now have: ** Nested structures: `$a{1}[2]{3}` ** Autovivification: `$a{1}[2]{3} = ` ** Tied magic: `%ENV` ** Proxy scalars: `%ENV ~= '/tmp'` ** Slice assignment: `@x[1,2] = ` ** 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 ** One such module is SHA1.pm: http://tpe.freepan.org/repos/ingy/SHA1/ * 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/.../{ }/` 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()` in list context is no longer evaluated lazily * `$list.join('|')` now works * `xor` and `^^` now returns the true operand instead of `bool::true` * Named bindings to `%_` repaired == Changes for 6.0.14 - April 4, 2005 === Pugs Internals * We now require GHC 6.4 on all platforms * Added socket primitives: `listen()`, `connect()`, `accept()` * Added thread primitives: `async()`, `yield()` * Added string primitives: `chr()`, `ord()`, `hex()`, `split()` * Adverb pairs: `:key(123)`, `:key`, `:key[1,2,3]` and `:key` * `pugscc` may now be invoked outside the pugs source tree * `slurp()` now works on IO handles * Non-interpolated `q//` literals * Tentative `%?CONFIG` hash * `pugs -V:configvar` now displays that config variable * Command line improvements (`-I`, `-l`, `-e`, etc.) * Minimal IMC compiler as `src/IMC.hs` * Began work on GADTs; the Pad now holds `Symbol Val` types only * Support definition and invocation of subs with namespaces === Tests, Examples and Documentations * Many new tests: we have around 3850 now * `modules/` have been relocated to FreePAN. See `modules/README` * `t/Synopsis/` have been relocated to `Perl6::Bible` on CPAN * HTML generated by testgraph now responds to mouseover * New autosmoker script added * Many cross-referencer improvements * Normalize all `t/` to begin with `#!/usr/bin/pugs` * `VICTUALS` file added on April Fools * Debian package scripts in `debian/` * Updates on the Vim syntax file as `util/perl6.vim` * `Pugs::MakeMaker` is renamed to `Perl6::MakeMaker` * First Pugs obfuscation in `examples/obfu/` * HTTP server and client examples in `examples/network/` === Bug Fixes * `~~` now takes variables on the right hand side * Correct installation locations for `ext/` modules * `{ block }` in `qq` and `rx` no longer skips trailing whitespaces * `pugs -e` may now use `@*ARGS` in the one-liner * `rx:perl:g` no longer ignores the `:g` * `$:x` and `$.x` now parsed as variable names * Readline support is correctly probed on `Makefile.PL` time * Mimick Perl 5's behaviour for function that defaults to `$_` == Changes for 6.0.13 - March 27, 2005 === Pugs Internals * Support for `given`, `when` and `elsif` statements * Support for Perl5 style `-I` on the command line * Command line equivalents of shell commands `:i` and `!` * Regex now supports `s:perl5///` and `s:perl5:g///` * `$1`, `$2` etc can be used in `s:perl5:g///` substitutions * Experimental *pugscc* backends generating limited Parrot and Haskell code * Refactored the /VSub/ type to support currying * Support for currying: `&foo.assuming(param => 'bar')` * New file test primitives: `-d` and `-f` * New logical primitive: `?|` * Experimental support for `eval_perl5` (not built by default) * Experimental Inline support; see `ext/SHA1` for example * New magicals: `$*EXECUTABLE_NAME` and `$*PROGRAM_NAME` * Several numeric builtins: `atan2`, `cos`, `sin`, `sqrt`, `exp` * Beginings of a Pugs class meta-model === Test, Examples and Documentations * New test for junctions, regexp and more; about 3200 tests now * Added 200+ new TODO tests for objects in `t/oo/` * Added 20 new Perl 5 modules ported to Perl 6 * Added `t/README`, `modules/README` and `modules/PORTING_HOWTO` * Much work on the test-cataloger and Synopsis cross-referencer * Work on plan for smoke testing framework using *YAML* and *Test::Harness* * Work on HTML output gathered from *Test::Harness* YAML output * Actual working port of most of *File::Spec* complete with tests and docs * Added support for outputing test logs with *Test.pm* * Added documentation to *pugscc* * Several TODO tests for command line options * `fix_authors.pl` now handles UTF8 input * New golf-based tests in `t/examples/golf.t` * Added `examples/mandel.p5` for benchmarking against `mandel.p6` * The first JAPH for Pugs in `examples/japh/` === Bug Fixes * Numification now uses the same lexer as numeric literals * Passing pairs to named parameters works * Fixed 2-element lists to be proper pairs * Fixed some error reporting issues in *Test.pm* * `$!` now has the correct value after `eval` * `END {...}` now runs after `die` * Hash keys are now strings * Contextual logicals like `+^` and `~^` are parsed correctly == Changes for 6.0.12 - March 21, 2005 === Pugs Internals * We now require GHC 6.4 on Win32 * Perl5-compatible regular expressions as rx:perl5/.../ * Unicode identifiers now work across all platforms * Smartmatch ~~ for regex * Capturing variables as $/.[], $0, $1, $2 * Nested outward CALLER::CALLER::CALLER:: scopes * x=, xx= and Y= * => now autoquotes left hand barewords * ?? :: now parses correctly * New primitives: index(), rindex(), substr(), sort(), true() * New primitives: lcfirst(), ucfirst(), lc(), uc(), split() * New primitives: pick(), values(), nor * The interactive shell now preserves lexical variable declarations * String numification now uses the same lexing rule as numeric literals * Kludgy hack for &sub.goto() now works * :l in interactive shell for loading modules * More experimental shell commands like :i and ! * Symbol table now contains Vals instead of Exps === Tests, Examples and Documentations * Massive reorganization for t/ hierarchy; we have 2450 subtests now * Test coverage catalog utility in util/catalog_tests.pl * New p6ified CPAN modules: Algorithm::Dependency, File::Spec * Core documentations moved into ext/Pugs-Documentation/ * Locale::KeyedText is made more perl6ish with subtypes * Test.pm has been massively refactored, and now has its own test suite * isa_ok(), eval_ok() and eval_is() in Test.pm * perlpodspec.kwid, describing POD document model and dialects. * perlkwidspec.kwid, specification for the Kwid dialect of POD * PA01.kwid, Kwid version of Pugs Apocryphon 1 * Perl5-Kwid, Perl 5 implementation of the Kwid language === Bug Fixes * Infix junction constructors no longer falltens its operands * Mutable variables are now properly pretty-printed * "pugscc" was broken on case-sensitive filesystems * last() no longer work as return() outside loops * Pugs could not install when perl5's sitelib path did not contain "perl" * := binding did not preserve the lexical scope at the binding site * Hanoi.p6 was broken due to premature binding of subroutine parameters * "&sub.foo" no longer attempts to interpolate == Changes for 6.0.11 (r690) - March 14, 2005 === Pugs Internals * Ported to GHC 6.4 final * Source code is now always treated as UTF-8 * Unicode variable names and subroutines now works, if GHC is compiled with unicode support * We no longer look for Perl6::lib::* namespace in Perl 5; Pugs now has its own library path independent from Perl 5 * New primitives: scalar(), list(), reverse(). * Infix Y (and its UTF8 form) * $! is now set after an eval call * Stub implementation for ~~ and !~ operators * "make optimized" and "make profiled" targets * Assignment to array slices * Assignment now copies variables in RHS, instead of aliasing them * Declaration of multiple variables with my() * try {...} works * Hash stringification * Lone block without trailing semicolon is parsed correctly * time() now counts seconds from 2000-01-01 00:00:00 * Assignment operators like .=, //= and ||= etc * Postfix conditionals now works inside expressions * --help and -c command line options * Experimental support for "pugscc", which compiles Perl 6 code into stand-alone executables === Tests, Examples and Documentations * Much more extensive TODO tests; we have 1477 now * Sample Perl 6 modules under modules/, including Sample-Module and Locale-KeyedText (ported from Perl 5 on CPAN) * Kwid version of PA01; updated Chinese translations * One can now build Pugs with Perl 5.6 * examples/sendmoremoney.p6 now really works * A new, much prettier banner ASCII art * New junction examples in examples/junctions/ * New golf-based examples in examples/golf/ * Include IRC nicks and UTF8 names in AUTHORS * Some releng and utility scripts under util/ === Bug Fixes * In pointy subs, -> () {...} and -> {...} are now distinguished * require() now reports errors correctly * Magical $a++ when $a is a string should not return a numified form * int() now properly truncates, instead of rounds, the operand * Array and hash variables inside qq strings now won't interpolate without explicit brackets, as specced in S02 * my $a == $b no longer parses are my $a = =$b * Nested ?? :: now parses correctly, even inside brackets * Postfix ... works again * [...] is now evaluated in list context * Duplicate occurence of implicit params like $_ and $^x now works correctly * =<> now reads the first file in @*ARGS if there is a @*ARGS; it is a TODO to make it read all files in @*ARGS * List associativity now works again * $?CALLER:: variables in subroutine parameters and defaults are now both evaluated in the caller's scope == Changes for 6.0.10 - March 5, 2005 === Pugs Internals * Massive `-Wall` cleanup * Some work on Pugs extension mechanisms (XS for Pugs) * Complete reworking of the build system * Support for basic read, write, append I/O * Added `system()`, `chmod()`, `chop()` and `chomp()` * Pretty printing now works * Added the beginings of a Config module * Ported to GHC 6.4 pre-release * More works on junctions === Tests, Examples and Documentations * Test, tests and more tests, we now have over 1050 * Added several tests for unimplemented features * Added tail recursive nested worker multisubs into `fp.p6` * New example: `hanoi.p6` * Several new junctions examples * Switched most documentations to the Kwid format * zh-cn and zh-tw translations of the Apocryphon * Haskell source documentation begun * Kwid documentation for `Test.pm` === Bug Fixes * Fixed double-evaluation bug in `say($a++)` * Fixed `@a` interpolation bug * Postfix `--` now returns the value instead of numified value * Lone bare blocks in statement level are now always executed * Fixed `grep`/`map`/`push`/`unshift` parsing so they are properly binOp now * Fixed prefix function parsing bug that eats more parens than it should == Changes for 6.0.9 (r335) - February 28, 2005 * First Perl 6 module: `Test.pm` * First Pugs Apocryphon: `docs/01Overview.html` * More than 600 unit tests, with a comprehensive coverage * Relicensed under GPLv2 and Artistic2.0b5 * New flags: `--version`, `-v`, `-c` * New examples: `examples/fp.p6`, `examples/shuffle.p6` * New syntaxes: `?? ::`, `our()`, chained `=>`, `END{}`, `=begin END`, `unless` * New primitives: `defined()`, `unlink()`, `ref()`, `join()`, `require()`, `int()` * New magicals: `$?SUBNAME`, `%*ENV`, `&?BLOCK`, `&?CALLER_CONTINUATION`, `@*INC` * New literals: `\d1234`, `0d1234`, `qq[]`, `qw[]` * Interpolation in double-quoted strings * Hashes and subscripting * Bare blocks now assumes outer scope's lexical pad * Bare blocks in statement level is now always executed * Closures closes properly; errors are propagated upwards * A first draft of /Kwid/ documentation format * A first draft of builtins declarations == Changes for 6.0.8 - February 21, 2005 * New example code snippet: `examples/quicksort.p6` * Unit tests ported from th Perl5 tree * Hashes, Pairs and their access methods * Much more robust casting between arrays, lists and hashes * Fixed harness output problem on older perls * Many Posix-based IO primitives * Precedence for builtin unary/list functions are parsed correctly * `unless` construct * New primitives: `join`, `split`, prefix `++` and `--` * `+>>` etc changed to `+>` etc * Stacking multiple prefix and postfix operators now works * `@*INC`, `&?SUB`, `CALLER::` * Tests for the /perlego/ dialect * User-defined function applications now takes arbitary expressions * Deep recursion detection == Changes for 6.0.7 - February 18, 2005 * Beginning of synopses-based unit tests * Two code snippets that runs: `examples/life.p6` and `examples/mandel.p6` * Code literals -- /sub/, /pointy/ and /bare/ variants all works * Lexical subroutine declarations via `my sub` * The `say`, `exit`, `die`, `time`, `open`, `close` primitives * `Bool.perl` now prints correct literals * Blocks under void contexts now evaluates automatically * The `...` (dotdotdot) literal * Errors are propagated upward using shiftT * Postfix `++` and `--` * Ternary `?? ::` * Assignment to mutable variables and to array slices * `loop`, `for` and `if` constructs == Changes for 6.0.5 - February 15, 2005 * The `rand` primitive * Taking references of junctions no longer create a junction of references * Illegal divisions are caught * Chained comparison for four or more terms now works * Collapsing for /JuncOne/ into two sets: the `none` set and the `one` set * The evaluator now prints some helpful debugging messages * New parser logic merged from Michaud and Palmer's `Perl6.grammar` * Extra semicolon and whitespace in blocks are dealt with * Space around punctiation operators is now optional * The /Eval/ monad now supports `shift`/`reset`/`callcc`, lexical and dynamic scopes * Improved pretty-printing code for syntactic constructs == Changes for 6.0.4 - February 12, 2005 * The `eval` primitive * Refactor junctive logic into `Junc.hs` * /JuncAny/ and /JuncAll/ now collapses operands of the same type correctly * /JuncOne/ now collapses into an empty set when operands contains duplicates == Changes for 6.0.3 - February 12, 2005 * Formal parameters declaration and binding * Invocant-based multimethod dispatch * Optional(`?`), named(`+` and `++`), slurpy(`*`) parameters with defaulting * Extraction of higher-order placeholder variables * Proper semantics and extraction of `@_`, `%_` and `$_` * Global variables and subroutines: `&*foo`, `$*bar` * Context propagation from types of formal parameters * The `returns` / `is returns` trait * Trailing comma and semicolons are now allowed * Better handling of exponential primitives * &prefix: is now consistently added for user-defined subroutines * Junctions are now proper sets, instead of lists masqueraded as sets * New operators: `!!` and `nor` * The `all` junction builder now collapses nested junctions under it == Changes for 6.0.2 - February 9, 2005 * User-defined subroutine with `$_` and `@_` as parameters * Variable binding * Context propagation * Multimethod dispatch * Subtype distancing and casting * Autothreading over chained comparison and multiarg functions * List associativity * Array references as literals * Flattening (slurpy) star == Changes for 6.0.1 - February 7, 2005 * Fix building on Mac OS X * Characters in single quotes should not be escaped * Add one very basic test in `t/` == Changes for 6.0.0 - February 7, 2005 * Initial CPAN release * Evaluation of most simple expressions * Junctions and chained comparisons * Interactive shell and `#!/usr/bin/pugs` support