== Changes for 6.2.2 - 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 - 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 - 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 - 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 - 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