= Changes for 6.2.13 (r14402) - October 17, 2006 == Build System * Perl 5 embedding is now enabled by default ** For Windows users, Perl 5.8.x is required ** Set the `PUGS_EMBED` environment variable to `noperl5` to disable this * Prompting for Parrot embedding is now disabled by default ** Set the `PUGS_EMBED` environment variable to `parrot` to enable this * Support for compiling using GHC 6.6 ** GHC 6.4.1+ is still supported, but 6.6 will be required in the next release == Feature Changes === Interactive Shell and Command-Line Flags * New `pugs -d` flag to display a trace for debugging * The `:r` command now resets the environment once, not twice * The return value of blocks, such as `gather {...}`, is displayed correctly * `$_` is no longer clobbered with the result of each expression's evaluation === Perl 5 Interoperability * Arrays and Hashes now round-trip from Pugs to Perl 5 land and back * Importing functions from Perl 5: `use perl5:CGI
` * Passing unboxed values across runtimes no longer leaks memory * When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings * `eval($str, :lang)` now accepts non-ASCII characters in `$str` === Lexical Syntax * Capture literals: `\($bar: 1, 2, 3, named => 4)` * Here-docs now work as specced; also warns against inconsistent indentation * Interpolation of chained calls: `"$foo.meth.meth.meth.meth()"` * List comprehension: `for 0 < list(@x) < 10 {...}` * Named character escapes: `"\c[LATIN CAPITAL LETTER Y]"` * New grammatical category `term:`, separated from the `prefix:` category * New magical variables: `$?COMPILER` and `$?VERSION` * Parse for `LABEL: STMT`, although it's currently treated the same as `STMT` * Pod directives: `=begin`/`=end` and `=for` now terminate without `=cut` * Pod variables: `$=FOO` and `@=FOO` give you access to the Pod section FOO * Quote adverbs no longer take non-parens brackets: `rx:P5{...}` is valid again * Shell-like quoting rules implemented for `<< $x "qq" 'q' >>` * Signature literals: `:($foo is copy = 42, $, @)` * Support for UTF-8, UTF-16 and UTF-32 encoded source files * Support for backquotes and `qx/.../` for capturing external command output * User-defined infix associativity: `sub infix: is assoc('right') {...}` * `"\123"` and `"\03"` are now errors; write `"\d123"` and `"\o03"` instead * `$::x` now means exactly the same a `$x`, instead of `$*x` * `%h<>` now means `%h{}` -- the entire hash, not the empty string as key * `($::('x'))` with two adjacent closing parens now parses correctly * `0_123_456` now parses as `0d123456`, not an error * `1<2>` is now a fatal error: Odd number of elements in Hash * `q()` and `qw()` with parentheses are parsed as functions, not quotes === Declarators and Operators * Argument interpolation via prefix `|` and `|<<` * Binding to qualified uninitialised symbols: `&fully::qualify := sub {...}` * Contextual variables are now declared with `my $x is context`, not `env $x` * Hyperised reduce operators: `[>>+<<]` and `[\>>+<<]` * Implicit invocation assignment: `.= uc` is parsed as `$_ = $_.uc` * Mid-block redeclaration no longer allowed: `my $x; { $x = 1; my $x = 2 }` * Negated comparison operators: `!eqv`, `!=:=` etc; `!~~` replaces `!~` * New infix comparison operators: `===` and `eqv` * New infix non-short-circuiting boolean AND operator: `?&` * Nullary reduction of builtin operators gives identity values: `[*]() === 1` * Postfix operators can be called with a dot: `.++`, `$x.++`, `$x.\ ++` * Prefix `=` now iterates on arrays as well: `=@array` * Short-circuiting chained comparison: `1 > 2 > die('foo')` no longer fails * Smart matching against code objects: `$obj ~~ { 1 > $_ > 5 }` * Smart matching against implicit invocation: `$obj ~~ .meth`, `$obj ~~ .[0]` * Typed constraints on autovivification: `my Hash $x; $x[0] = 1` now fails * Typed declarations: `my Dog $fido`, `my T ($x, $y)` * `*` is now always a term, never a prefix operator === Blocks and Statements * Implicit invocation in `when`: `when .true {...}`, `when . {...}` * Listops in conditions no longer consume the block: `for say {...}` * Loop topics are not forced into rw: `for 1..3 { $_++ }` now fails correctly * New `&break` and `&continue` primitives for use within `when` blocks * New `&leave` primitive for exiting from the innermost block * New postfix `given` statement modifier: `.say given foo()` * Support for `FIRST`, `NEXT`, `LAST` loop control blocks * Support for `START`, `PRE`, `POST`, `KEEP`, `UNDO`, `ENTER`, `LEAVE` blocks * Support for repeat blocks: `repeat {...} while 1`, `repeat while 1 {...}` * Support for the `&each` list interleaver: `for each(@a; @b) -> $x, $y {...}` * The `for` loop no longer double-flattens lists: `for %h.pairs -> $p {...}` * Topicalisers for `if`, `else`, `while`, `given` blocks: `if EXPR -> $x {...}` * Topicalisers for postfix `for` loop: `-> $x {...} for 1,2,3` * `&last` and `&redo` now work in `repeat {...}` and `loop {...}` blocks * `&take` no longer flattens array literals: `take [1,2,3];` * `&take` now works in functions called from within a `gather {...}` block * `BEGIN(...)`, `END(...)`, etc., are now parsed as calls, not syntax errors * `END {...}` in `.pm` files are no longer ignored when executed directly * `INIT {...}` now works correctly inside `eval "..."` * `do {...}` is now a loop block that takes standard loop controls * `do {...}` with statement modifiers is explicitly disallowed === Regexes and Grammars * Anonymous tokens and rules anchor on both ends: `123 ~~ token{2}` is false * New `s[...] = EXPR` and `s[...] = .meth` syntax; `s[...][...]` is deprecated * New `tr///` syntax for transliteration; `y///` will not be supported * Pugs::Compiler::Rule (PCR) replaces Parrot/PGE as the default engine * Support for `:c/:continue`, ``, and much more: see PCR's ChangeLog * `$()`, `@()` and `%()` parse correctly as `$$/`, `@$/` and `%$/` * `/.../` matches `$_` under Int, Num and void context in addition to Bool * `m:g/(1)|(2)/` now returns only successfully matched subcaptures === Modules and Routines * Allow space-separated adverbial named arguments: `f( :x :$y :!z )` * Multi-dispatching now handles named, slurpy and optional arguments * Multi-dispatching now handles parenthesized expressions as arguments * Named arguments with no matching parameters is now an error * New `&c.call($capture)` method to call without a caller frame (similar to Perl 5's `goto &sub`, but it returns) * New `&c.signature` method to get a Signature object from a Code object * Parse for the `proto` routine modifier: `proto method foo ($x) {...}` * Precompiled `.pm.yml` files with mismatching AST version will no longer load * Support for user-defined unary and optional-unary prefix macros * The main package is now ::Main, not ::main * `&?CALLER_CONTINUATION` is now fully reentrant * `&yield` in coroutines works correctly within loop blocks * `sub ($x = 0 is copy)` no longer allowed; say `sub ($x is copy = 0)` instead * `sub f ($x is lazy) {...}` no longer evaluates $x more than once * `sub f (@x?) {...}; f()` now sets `@x` to `[]`, not `[undef]` === Classes and Objects * Attribute-like method call syntax: `@.method(1)`, `$.method: 2, 3, 4` * Class attributes: `class C { my $.x is rw }` * Class name literals are now term macros, not prefix functions * Compile-time self-mixin no longer allowed: `role A does A` * Default initialiser expression for attributes: `class C { has $.x = 123 }` * Dot attributes are now method calls: `@.x` is the same as `@(self.x)` * Dynamic method calls: `$obj.$meth` * Hyperised method calls: `$obj.>>meth` * Quantified method calls: `$obj.*meth`, `$obj.+meth` and `$obj.?meth` * Reopening classes: `class C is also {...}` * Role mixins: `role R {...} class C does R {...}` * `$?SELF` is gone; write `self` instead * `BUILDALL`/`DESTROYALL` trigger once per class even with diamond inheritance * `does R` and `is C` statements in class body now evaluate in compile time === Built-in Primitives * New `&HOW`, `&WHAT` and `&WHICH` functions replace `&meta`, `&ref` and `&id` * New `&VAR` macro to force lvalue evaluation of an expression * New `&comb` function, a dual to `&split` but matches the wanted parts * New `&crypt` function to create one-way digest strings * New `&fork` function to create a new process * New `&printf` function for formatted printing * New `"emeta` function for escaping strings * Support for `%b` in formatted printing * The `&system` function no longer dies when the command does not exist * The `.as` method is renamed to `.fmt` for formatted printing * The `.perl` method now returns Unicode strings == Bundled Modules === New modules * [ext/Automata-Cellular/] - Build and render cellular automata in a terminal * [ext/Math-Basic/] - Basic mathematical functions and constants * [ext/Math-Random-Kiss/] - Pseudo-random number generator * [ext/re/] - Pragma to choose among grammar engine backends === [ext/CGI/] * A new `as_yaml` method to dump CGI parameters as YAML * Allow initializing the CGI object with a hash of parameters * New `Dump` function adapted from Perl 5's CGI.pm * New basic tests for `escapeHTML` and `unescapeHTML`, which were broken * New tests for `PATH_INFO` * Only send the Content-Type: header if we actually have a content-type * Only send the Status: header if it's a redirect, or if it's explicitly added * Refactored into an OO-only module. N.B.: this breaks backwards compatibility! * Some work on charset handling, though a `charset` method is still missing * The `content_type` method is renamed to `type` for compatibility * The `cookies` attribute is renamed to `cookie` for compatibility === [ext/HTTP-Server-Simple/] * The old non-standard `./method` syntax has been replaced with `self.method` === [ext/Rosetta/] * Significant updates to the `lib/Rosetta/SeeAlso.pod` documentation === [ext/Set-Relation/] * Renamed from [ext/Relation/] * Beginning of separate `Set::Tuple` and `Set::Relation` classes === [ext/Test/] * Converted `Test.pm` documentation from Kwid to Pod syntax * The `eval_ok` and `eval_is` functions are gone; use `is eval` instead, which runs its string in the current lexical scope rather than in Test's (which is usually what you want) == Test Suite === [util/prove6] * Can now run only a portion of the test suite, or even a single file * Original shell script rewritten in Perl 5 for improved portability * Support for multiple Pugs backends and multiple Perl 6 implementations === [util/smartlinks.pl] * A new visualiser of smartlinks used in the test suite * Generates much nicer cross-referenced HTML pages * See annotated specs in action on [http://spec.pugscode.org/] * Smartlinks replace the old [util/catalog_tests.pl] === [util/smokeserv/] * See the `SYN` links on [http://smoke.pugscode.org/] for this in action * Smoke client now uploads raw `.yml` results as well as `.html` * The smokeserver now annotates the spec with test results using smartlinks === [t/] * All tests now begin with `use v6-alpha;` instead of `use v6;` * Many, many more smartlinks have been added into the spec * Programs and modules in [examples/] are tested for syntactic correctness * Tests in [t_disabled/] are merged back into the main test suite * [t/02-test-pm/] created to ensure that `Test.pm` works as advertised * [t/blocks/] renamed from [t/subroutines/] * [t/closure_traits/] created to test closure traits (`FIRST`, `LAST`, etc.) * `#!/usr/bin/pugs` is gone from all test files * `eval_ok` and `eval_is` are now `ok eval` and `is eval`, so that eval'd strings will be run in the current lexical scope == Examples and Utilities === [examples/] * All Perl 5 programs have been renamed from `*.p5` to `*-p5.pl` * All Perl 6 programs have been renamed from `*.p6` to `*.pl` * All references to them, except in talks, have been likewise updated === [examples/games/dispatch_quiz.pl] * A game to test your knowledge about Perl 6's multi-dispatch system === [misc/runpugs/] * A web teminal for running an interactive Pugs shell on the web * WebTerminal: a library for building web terminals for interactive shells * See [http://run.pugscode.org/] for a live demo == Documentation === [docs/Perl6/Perl5/Differences.pod] * Significantly updated and linked from [http://spec.pugscode.org/] === [docs/Perl6/Spec/] * A new S16 draft for IO/IPC/signals as [docs/Perl6/Spec/IO.pod] * A new S26 draft for documentation as [docs/Perl6/Spec/Documentation.pod] * Revamped S29 draft in [docs/Perl6/Spec/Functions.pod] === [docs/Pugs/Doc/] * New directory for Pugs-specific documentation * [docs/Pugs/Doc/Hack/Style.pod] - Haskell style guide for Pugs hackers === [docs/talks/extraction.xul] * Slides from Nathan Gray's /Practical Extraction with Perl 6/ talk == Perl 6 on Perl 5 === [perl5/Pugs-Compiler-Perl6/] * The `v6.pm` implementation of Perl 6 now handles `./pugs -CPerl5` commands * See its own ChangeLog for more information === [v6/] * A new subproject to write a Perl 6 compiler in Perl 6 * Bootstrapped from the `v6.pm` compiler on the perl5 runtime * See its own ChangeLog for more information == Experimental projects === [misc/pX/Common/P5_to_P6_Translation/] * Converts Perl 5.9.4+'s YAML syntax tree into Perl 6 * Handles regexes, arrays, hashes and many builtin functions * See its own documentation for more information === [misc/pX/Common/convert_regexp_to_six.pl] * Converts Perl 5 regex into Perl 6 * See its own documentation for more information === [misc/pX/Common/redsix/] * An Perl 6 implementation on Ruby 1.9+ * See its own documentation for more information = Changes for 6.2.12 (r10930) - June 26, 2006 == Licensing Changes * The [src/] tree and the `pugs` executable are now released under the permissive MIT license, in addition to Artistic and GPL * A new [third-party/] tree to hold bundled prerequisites originated from non-Pugs projects == New Perl 6 modules * [ext/Relation/] - Relation type for Perl 6 (incomplete) * [ext/Getopt-Std/] - Simple command-line parsing == Updated modules * [ext/Locale-KeyedText/] - Added export_as_hash() methods * [ext/Rosetta/]: Multiple additions and rewrites ** Merged ext/Rosetta-Engine-Native/ in, renamed to ::Example ** Now officially incorporates "The Third Manifesto" ** Rewrote half of Language.pod ** Updated the DESCRIPTION and class list of Rosetta.pm ** Added new core module Rosetta::Shell and example shell.pl ** Added new documentation file Rosetta::SeeAlso ** Various other documentation additions and edits * [ext/Test/]: Avoid the use of junctions to make Parrot/Perl6's life easier == Perl 6 on Perl 5 (under [misc/pX/Common/]) * Data-Bind - Implement Perl 6's calling/binding convention on Perl 5 * Inline-Parrot - a C version of Inline-Parrot - uses NCI for data exchange * Module-Compile - precompile Perl 5 modules transparently * P5_to_P6_Translation - beginning of a Perl 5.9 MAD tree parser and translater to Perl 6 * Pugs-Compiler-Perl6 - Compiler for Perl 6 (implements 'use v6-pugs'): use v6-pugs; say "Perl 6"; use v5; print "Perl 5" * Pugs-Compiler-Precedence - an operator precedence parser, built around Parse::Yapp * Pugs-Compiler-Rule - Compiler for Perl 6 Rules * Pugs-Grammar-MiniPerl6 - translate Perl 6 rules into haskell Parsec * Pugs-Grammar-Perl6 - a Perl 6 parser - parses Test.pm! * lrep - a bootstrapped, very minimal Perl 6 compiler written in Perl 6 * re-override - Swaps in an alternate regexp engine: ./perl -we 'use re::override-perl6; print "a" =~ /**{1}/;' == Test, Examples and Documentations * Restored this ChangeLog's entries for v6.0.0 thru v6.0.8, which were truncated in r8916, apparently from gnome's copy-paste buffer limit * [docs/Perl6/Doc] hierarchy, installable `Perl6::Doc` * [docs/Perl6/FAQ/Capture.pod] - FAQ on the new Signature/Capture convention * [docs/Perl6/FAQ/FUD.pod] - Fears, Uncertainties and Doubts about Perl 6 * [docs/talks/p6myths2.html]: Juerd's talk "Perl 6 Myths" * [docs/talks/peek.spork]: Gaal's OSDC talk "A Peek into Pugs Internals" * [examples/concurrency/]: Added sample usage on Software Transactional Memory * [examples/qotw/]: Added the QOTW 8 Expert solution * [examples/rules/]: Added a sample BASIC parser * [src/Pugs/Parser] - Perl 6 grammars for Capture.pg and Signature.pg * [util/cperl-mode.el] - Emacs mode for Perl 6 == Feature Changes * Pugs now builds in a single pass * Removed support for GHC 6.4.0 and added support for GHC 6.5 * Removed support for Parrot 0.4.4 or below and added support for Parrot 0.4.5 * &?SUB is replaced with &?ROUTINE; $?SUBNAME is replaced with &?ROUTINE.name * Arguments beginning in parens, such as `f ('x')=>1`, is now always positional * Array and hash sigilled match variables, such as `@0`, `@` and `%` * Assignment with non-obviously-scalar left-hand side is now in list context: ** `@a = 1,2,3` now parses as `@a = (1,2,3)` * Broke down Parser and AST.Internals to smaller files so rebuilds are faster * Builtin functions no longer defaults to `$_`; write `.ord` instead of `ord` * Compile `Prelude.pm` and `Test.pm`, to YAML bytecode for faster loading * Declarators are now lexical: `{ $x++ unless my $x }` increments `$OUTER::x` * Declarators can now occur at expression position: `my $x + my $y` works * Declarators no longer take qualified names: `our $Foo::x` is invalid * Experimental support for Software Transactional Memory and atomic blocks * Hash initializers now revert to bias-to-left behavior as in Perl 5 ** In `{X => 1, X => 2}`, the value of X is 2, not 1 * If a block ends on a line by itself, an implicit `;` is assumed if possible * In the interactive shell, :d and :D (dump parse tree) now continues the parse from the current environment; use :reset to reset the environment * More helpful diagnostics when calling unsafe builtins under safe mode * Multiline support in the interactive shell reports unrecoverable parsefails * Names of named arguments must always be a bareword now, such as: f(name=>1); f(:name(1)); * New AST-dumping backends: `Parse-Pretty`, `Parse-YAML`, `Parse-HsYAML` * Parse-time binding `::=` is now fully supported * Proper desugaring of `.=` expressions, such as `@a .= map(&sqrt)` * Prototype objects: `my Dog $fifo` now assigns `::Foo` into `$fido` * Removed support for `require ::Class::Literal` * Removed support for `rx_` macros in Prelude for user-defined rule handlers * Quotelike constructs such as `rx` and `qq` no longer takes `#` as delimiter * Support for Unicode bracket characters for quotelike operators * Support for bracketed comments: #(...), #<<< ... >>>, etc * Support for controlled backtracking and whitespace sensitivity via distinct `token`/`regex`/`rule` delecarators * Support for environmental variables such as `$ENV::PWD` and `$+PATH` * Support for implicit-topic dereferences such as `.[0]` and `.` * Support for long dot syntax: $foo\ .blah * Support for scan metaoperators: `[\+] 1,2,3` evaluates to `(1, 3, 6)` * The `-M` command line switch can take import arguments: `pugs -Mlib=foo` * The parser is now much faster by being mostly predictive (non-backtracking) * The postfix infiniterange is no more; write `1..*` instead of `1...` * Two `my $x` declarations in the same scope is now no-op instead of an error * Use `Data.ByteString` for fast string representation * Using libraries from embedded Perl 5 can import functions now * Whitespace disambiguation implemented on `if`, `unless` and `for`: if %ENV{ 3 } { 4 } # hash lookup on %ENV if %ENV { 3 } { 4 } # %ENV by itself * YAML bytecode is now versioned to reduce incompatibilities * `¬` is now unary instead of a list operator * `:!foo` is now a shorthand for `foo => False` * `bool::true` and `bool::false` are renamed to `Bool::True` and `Bool::False` * `make upload-smoke` now uploads smoke test automatically * `my $!x` is now recognized as an alternative spelling for `my $x` * `q:code {...}` gives ASTs in macros * `readline` and `=$fh` now autochomps == Bug Fixes * (1.3 % 1) was evaluating to 0; now it evaluates to 0.3 like everybody else * An uninitialized Code is no longer nullary: `my &f; f 1` is not a parsefail * Chained assignments now return lvalues properly: `$x = %y = (1,2,3,4);` * Implicit variables ($^x) is no longer allowed in statemeent-level bare blocks * Implicit variables following a declarator was broken: `{my $x; $^y}.(42)` * In `(@x, @y) = (1,2,3)`, the `@y` is now cleared into an empty list * Invalid rules in embedded Parrot no longer triggers an uncatchable `exit` * Lexical imports are no longer discarded upon block reentry * Method invocant is `self` and `$?SELF` but no longer `$_` * Named-only subs such as `sub f (:$x!) {}` no longer parse as unary positional * Opening a file for writing now turns autoflushing on by default * Short-circuit operators now works again * Statement-level `return` and `yield` now propagates contexts correctly * Statement-level bare blocks now counts as one scope for `OUTER`, not two * Statement-level bare blocks now runs under all contexts: (sub { { 3 } }).() * Strings outside ASCII range no longer raises exceptions at the PGE/Parrot bridge * The bogus comma-less block argument form `map {$_} 1,2,3` is no longer supported * `%.foo` and `@.foo` now always flattens in argument lists * `&slurp` and `&readline` evaluates eagerly and no longer races with `&unlink` * `1.` was parsed as a valid integer, causing ambiguities; it's now invalid * `@foo.perl` works correctly when `@foo` is recursive * `f(())` now passes `&f` an empty list, not `undef` * `sign` and `<=>` now fails on undefined arguments, instead of returning undef * `slurp` works correctly on UTF-8 files * `sub f (@x) {}; f([1,2,3])` now works as it's no longer under slurpy context = Changes for 6.2.11 (r8934) - Feb 1, 2006 == Bundled Modules === New Perl 6 modules * [ext/Parse-Rule/] - A Rules engine port in perl 6 * [ext/Rosetta/] - A federated relational database (incomplete) * [ext/Rosetta-Engine-Native/] - A back-end for Rosetta testing (incomplete) === Updated modules * [ext/File-Spec/] - Rewritten to define its own exported wrapper subs * [ext/Locale-KeyedText/] - Rewrote with a strong resemblence to the original ** Split up `translate_message()` for more granular Translator usage ** Objects now become something useful when coerced into a string ** Added `Locale::KeyedText::L::en`, LKT now throws Message exceptions ** Template Modules now have a different variable interpolation format ** Created 2 running [examples/] from pod that was removed from KeyedText.pm ** Deleted old test suite (yet to be replaced); now only tests compilation * [ext/libwww-perl] - Rewrote `HTTP::Header::Util` with gather/take syntax * [ext/Test] - `&fail` renamed to `&flunk` to avoid conflict with builtin === Experimental modules (in misc/, not installed) * [misc/Parser-Mini/] - Experimental *thin* p6 parser * misc/Rosetta-Incubator/ broken up: ** Locale::KeyedText was merged into the rewritten one in ext/ ** SQL::Routine and Rosetta were merged together, became Rosetta in ext/ ** The license of Rosetta is now GPL (with extra linking provision) ** Remainder (SQLBuilder, SQLParser, Eng/Generic, Emu/DBI) was deleted * [misc/sixpan/] - Prototype of new CPAN tools in Perl 5 == Test, Examples and Documentations * Add timing data prints to smoke harness, to help spot hanging/slow tests * Tests in [ext/] and [t/] - Temporary workaround the breaking of `use_ok` * [Makefile.PL] - Begins with an overview POD section on the build system * [TASKS] - Tracking current things to do * [docs/AES/S17draft.pod] - Draft synopsis for Perl 6's concurrency * [docs/AES/S22draft.pod] - Draft synopsis for Perl 6's CPAN * [docs/articles/tpr.pod] - An introduction article to Pugs * [docs/feather] - Feather.perl6.nl web site * [docs/getting_started] - Pointers for people new to Pugs * [docs/notes/context_coercion.pod] - Notes on implementing contexts * [docs/notes/context_coersion.pod] - Notes on implementing contexts * [docs/notes/docs_evil_plan.txt] - Plan for Perl 6 documentation * [docs/notes/multimethods.pod] - Description of the canonical MMD algorithm * [docs/p6doc/] - Perl 6 language tutorials and documentation * [docs/quickref/] - Various updates and improvements from new Synopses * [docs/quickref/fears] - assorted fears about Perl 6 * [examples/cookbook/] - New recipes * [examples/network/wiki/] - demo wiki * [examples/rpn/] - RPN calculator in Perl 6, Perl 6, and Haskell * [util/run-smoke.pl] - Support for `PUGS_SMOKE_EXCLUDE_EXT` environment variable * [util/catalog_tests.pl] - Annotate smoke reports with colored sources/specs == New Features * Adverbial number forms: `:16` and `:16[14,15]` ** This change obsoletes `hex()` and `oct()` * Calling private methods with `self!method` * Deep eager sequential evaluation list operator `eager` * Access to the class metaobject with `.meta` * Macros can now be called and reinterpolated at runtime * Multisub declarations in the same scope can now be exported selectively * Named arguments are now decided at parse time, not as runtime Pair objects * New YAML tree-dump backends: `-C Parse-YAML`, `-C PIR-YAML`, `-C PIL1-YAML` * New `\x[abcd]` and `\x[1,2,3,]` forms instead of `\x{abcd}` in qq-strings * New backend: `-CParse-Pretty`, to show a pretty parse tree * Parameter syntax changes: ** `+$arg` becomes `:$arg` ** `++$arg` and `+$arg is required` becomes `:$arg!` ** `?$arg` becomes `$arg?` * Round-trip data serialization with `.yaml` and `eval(..., :lang)` * Support for multiline inputs in interactive shell * The build system now supports Cygwin again * Two or more underscores in numbers (eg. `1__0`) is no longer accepted * Unary `^` support: `^10` is a shorthand for `0..^10` * `$+x` is now accepted as a shorthand for `$CALLER::x` * `$CALLER::x` now only sees `env $x` in outer dynamic scopes, not `my $x` * `$obj.clone` support * `%*INC` now contains module interface structures, not file system pathnames * `&die` and `&fail` can take an object argument without stringifying it * `eqv` is now spelled `===` * `pugs file.p6 --options` now passes options to the program, not to Pugs * `self` is an alias for `$?SELF` * `use Module` now imports its symbols lexically at the consumer's use time * `use Perl-6` parses correctly now == Bug Fixes * Bareword `foo.bar` now always parses as `::foo.bar`, never `foo(.bar)` * Binding a block to `&infix:` in BEGIN time now affects parsing * Fixed embedding of threaded parrot * Fixed evaluation order in array and hash access * Fixed splice on scalar * Improved detection of null patterns; this fixes some endless loops * Improved hash parsing. `{("a"=>3),}.ref` is again ::Hash, not ::Block * Infix macros no longer cause parsefail * Lazy `{...}` executes its closure at most once * Method calls on simple index lookups now gets dispatched correctly * Parse (but no implementation) for scoped packages * When `m:P5/(...)?/` captures nothing, $0 no longer evaluates to true * `$.foo.bar()` correctly dispatches on the runtime type of `$.foo` * `&splice` was destroying existing bindings on the array * `.perl` stringification now escapes unprintable characters * `1**Inf`, `0**0` and `Inf**0` are defined to 1 regardless of architecture * `3..2` and `'z'..'a'` return empty lists * `\(1,2,3,4).elems` no longer throws an exception * `zip(@a; @b; @c)` no longer flattens the arrays together == Backends === JavaScript backend * Division by zero raises an error, not return NaN like JS does * Fix problems with `[=>]` and related operators * New operators implemented: `+| +& +^ +< +> ~& ~| ~^ +^ ~^` * PIL/JS compilation now works with exported multisubs * Support for using Perl 5 modules in JavaScript backend via `-B JS-Perl5` * `$*PID` * `.assuming` * `FIRST {...}` blocks * `state $variable` * `unlink()` === Parrot backend * Parrot 0.4.1+ is now required for Parrot targeting and embedding * Closure creation no longer triggers segfaults * Lexical variables are now truly lexical instead of emulated by temps * Upon program exit, embedded Parrot/Perl5 objects are finalized correctly * Support for modules with lexical imports * When looking for an external parrot, look in `%ENV` first === PIL^N backend * New VM written in Haskell which uses the domain specific language PIL^N ** Based on the Perl6-ObjectSpace prototype ** Optionally built with `make pil` (and interactively as `make pili`) ** See [src/PIL/Native/] for the source code * Class Meta-Model written and bootstrapped in PIL^N ** Basic tests for Meta-Model in [t/pil/] * Role Meta-Model partially complete in PIL^N * Some basic Container types written in PIL^N ** See [docs/notes/piln_object_repr_types.pod] for implementation notes * Haskell implementation of Perl 6 Rules and precedence parser ** See [src/Text/Parser/] for the source code === Perl6-ObjectSpace * Prototype Perl 5 backend, served as the inspiration for the PIL^N backend ** Currently somewhat out of sync with PIL^N ** See [perl5/Perl6-ObjectSpace/] for the source code * Core set of /native types/ written in Perl 5 ** Class Meta-Model bootstrapped using only the native types ** Role Meta-Model and Container types not yet supported * Based on work from the [perl5/Perl6-MetaModel/] = 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 `) * 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` = Changes for 6.2.9 (r6050) - Aug 4, 2005 == Pugs Internals * New build system in `inc/PugsBuild` ** Configuration preferences are stored in `config.yml` ** Persists across builds, overridable via `%*ENV` * `$CALLER::_` is now again usable in defaults * JavaScript Backend ** Actively progressing in `perl5/PIL2JS` ** Passes 64.00% of the Pugs test suite * Perl5 Backend ** Begun in `perl5/PIL-Run` ** Primitive interactive shell as `crude_repl.pl` * Object MetaModel ** Perl 5 prototype is mostly self-hosting ** New C3-based method dispatch algorithm ** JavaScript version partially completed ** Java version begun (in very early stages) * Pugs Intermediate Language ** New runcore design begun in `src/PIL` ** QuickCheck-based specification tests added * Precompilation for arbitrary modules (not enabled by default) == Bundled Modules * New Perl 6 modules: ** `MIME::Base64` ** `Recurrence` ** `Span` * Additions to `libwww-perl`: ** `HTTP::Cookies` ** `HTTP::Query` ** `HTTP::Request::CGI` ** `HTTP::Status` ** `URI::Escape` * Additions to `DateTime`: ** `DateTime::Set` == Test, Examples and Documentations * Many new tests and test refactoring, we now have 8100+ tests * A number of additions to `examples/cookbook` * Beginning of Rule-based grammars for Perl6 in `modules/Grammars` * SVG generation examples in `examples/graphics` * `STATUS` document added to the top level to keep track of current progress * `docs/notes/plan` expanded and added macro-related issues * `examples/algorithms/Newton.pm` implements the newton method with currying * `examples/network/evalbot.p6` gets safe &print primitive * `examples/network/seenbot.p6` gets pretty duration printing * `examples/network/svnbot.p6` supports branch information * `examples/ppt/cat.p6` added to Perl Power Tools * iblech's LUGA talk as `Anatomie_eines_Compilers_am_Beispiel_von_Pugs.latex` * ingy's OSCON talk as `oscon-apocalypse.spork` == Bug Fixes * Fix pair binding for functions expecting pairs as arguments * Global destruction is now guaranteed upon program exit * Parameter's defaults are now evaluated in its original lexical scope * Parser for hash subscripting was globbing whitespaces after it * Primitive listops now handles Pairs as regular arguments * Various `+$foos` in sub signatures changed to `?$foo` in `Test.pm` * `%h>` was misparsed as `%h{'x>'}` * `-Inf` now stringifies as `-Inf`, not `-Infinity` * `.end` and `.elems` no longer work as scalar methods * `/a/ ~~ "a"` now works the same way as `"a" ~~ /a/` = Changes for 6.2.8 (r5577) - 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 `-C` (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 = 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 by 100% by caching dynamic grammar rules * Support for lvalue `substr()` * `coerce:` and other categories from A12 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` ** `POE` (experimental) ** `URI::Escape` * Extended tests for `Tree` == Tests, Examples and Documentation * APW talk: "Apocalypse Now" in `docs/talks/Apocalypse_Now.spork` * APW talk: "Eine Einfuehrung in Perl 6" in `docs/talks/perl6-apw2005/` * Documentation for running Pugs in `lib/pugs/run.pod` * Examples of 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 tests; several tests refactored; we now have 7600+ tests * Unit manipulation and conversion examples in `units.p6` * `examples/algorithms` subdir now unifies algorithmic 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` * Fix `~{1=>2}` to stringify correctly to `"1\t2\n"` * Parse errors inside blocks now reported at the position at which they occurred * Parse array and hash captures in rules * `Test::is()` now shows the expected result correctly again * `module Foo {...}` now parses = 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 dispatches 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 as well as the 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 allow Perl 6 in 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::cmp_ok` now gives better diagnostic messages * `fp` module added for functional programming == Tests, Examples and Documentations * Many new tests; 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 in `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 under `t/rules/` * Replaced `force_todo()` with `:todo` == Bug Fixes * Bare blocks containing `$_` are now executed correctly * Correct parsing for user-defined nullary functions * Hash and array sub parameters are now read-only by default, same as scalars * Post-term invocation in interpolation no longer eats 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)` now dispatches based on all the 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