[t/spec] Create zip-metaop.t to test the new Zop.
[pugs.git] / ChangeLog
blob61320c343c536fb0046cb5016a379c8cf04e514c
1 = Changes for 6.28.0 (rXXXXX) - June XX, 2007
3 == Licensing Changes
5 * The license for Pugs in general (not third-party components) is now
6 simplified to be just the final Artistic 2.0, rather than the disjunction
7 of the Artistic 2.0 beta 5 and the GPL.  Such a disjunction has no benefit
8 since the Artistic 2.0 is GPL compatible on its own.  This said, the
9 Artistic/MIT disjunction still exists where it did before.  So LICENSE/ now
10 contains the text of the Artistic version 2.0 final rather than the text of
11 the Artistic version 2.0 beta 5.
13 * LICENSE/ now contains the texts of the GPL version 3.0 and LGPL version
14 3.0 (which were published on 2007 June 29th), rather than the GPL version 2
15 and LGPL version 2.1.  All projects outside of third-party/ (which have
16 their own copies of their licenses) which were licensed under some member
17 of the GPL family allow the use of the newest versions, so there is no
18 reason to also retain copies of older versions in LICENSE/.
20 == Build System
22 * The config file that you must make in order to receive credit for smokes
23 is now named "smoker.yml" rather than ".smoker.yml"; this hand-made file
24 is now not hidden, which is consistent with Pugs' "config.yml" nature.
26 == Feature Changes
28 === Interactive Shell and Command-Line Flags
32 === Perl 5 Interoperability
36 === Lexical Syntax
40 === Declarators and Operators
44 === Blocks and Statements
46 * Topicalisers for `if`, `elsif` and `else` blocks: `if EXPR -> $x {...}`
48 === Regexes and Grammars
52 === Modules and Routines
56 === Classes and Objects
60 === Built-in Primitives
64 == Bundled Modules
66 === New modules
68 * [ext/HTTP/] - A general purpose HTTP toolkit for Perl 6
69 * [ext/MessageBus/] - Message Bus with PubSub protocol
70 * [ext/Muldis-Rosetta/] - Full-featured truly relational DBMS in Perl
71 ** This is a rewrite of ext/Rosetta/, which is now deleted
72 ** Note, any further release changes for Muldis Rosetta will be detailed in
73    its own Changes file rather than the general Pugs ChangeLog file
74 * [ext/Web/] - A general purpose Web toolkit for Perl 6
77 === [ext/Locale-KeyedText/]
79 * Added French localization file lib/Locale/KeyedText/L/fr.pm
81 === [ext/<Foo>]
85 == Test Suite
87 === [util/<foo>]
91 === [t/]
95 == Examples and Utilities
97 === [examples/]
101 === [examples/<foo>]
105 === [misc/<foo>]
109 == Documentation
111 === [docs/<foo>]
115 == Perl 6 on Perl 5
117 === [perl5/Pugs-Compiler-Perl6/]
121 === [v6/]
125 == Experimental projects
127 === [misc/pX/Common/P5_to_P6_Translation/]
131 === [misc/pX/Common/convert_regexp_to_six.pl]
135 === [misc/pX/Common/redsix/]
140 = Changes for 6.2.13 (r14402) - October 17, 2006
142 == Build System
144 * Perl 5 embedding is now enabled by default
145 ** For Windows users, Perl 5.8.x is required
146 ** Set the `PUGS_EMBED` environment variable to `noperl5` to disable this
148 * Prompting for Parrot embedding is now disabled by default
149 ** Set the `PUGS_EMBED` environment variable to `parrot` to enable this
151 * Support for compiling using GHC 6.6
152 ** GHC 6.4.1+ is still supported, but 6.6 will be required in the next release
154 == Feature Changes
156 === Interactive Shell and Command-Line Flags
158 * New `pugs -d` flag to display a trace for debugging
159 * The `:r` command now resets the environment once, not twice
160 * The return value of blocks, such as `gather {...}`, is displayed correctly
161 * `$_` is no longer clobbered with the result of each expression's evaluation
163 === Perl 5 Interoperability
165 * Arrays and Hashes now round-trip from Pugs to Perl 5 land and back
166 * Importing functions from Perl 5: `use perl5:CGI <header param>`
167 * Passing unboxed values across runtimes no longer leaks memory
168 * When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings
169 * `eval($str, :lang<perl5>)` now accepts non-ASCII characters in `$str`
171 === Lexical Syntax
173 * Capture literals: `\($bar: 1, 2, 3, named => 4)`
174 * Here-docs now work as specced; also warns against inconsistent indentation
175 * Interpolation of chained calls: `"$foo.meth.meth.meth.meth()"`
176 * List comprehension: `for 0 < list(@x) < 10 {...}`
177 * Named character escapes: `"\c[LATIN CAPITAL LETTER Y]"`
178 * New grammatical category `term:`, separated from the `prefix:` category
179 * New magical variables: `$?COMPILER` and `$?VERSION`
180 * Parse for `LABEL: STMT`, although it's currently treated the same as `STMT`
181 * Pod directives: `=begin`/`=end` and `=for` now terminate without `=cut`
182 * Pod variables: `$=FOO` and `@=FOO` give you access to the Pod section FOO
183 * Quote adverbs no longer take non-parens brackets: `rx:P5{...}` is valid again
184 * Shell-like quoting rules implemented for `<< $x "qq" 'q' >>`
185 * Signature literals: `:($foo is copy = 42, $, @)`
186 * Support for UTF-8, UTF-16 and UTF-32 encoded source files
187 * Support for backquotes and `qx/.../` for capturing external command output
188 * User-defined infix associativity: `sub infix:<foo> is assoc('right') {...}`
189 * `"\123"` and `"\03"` are now errors; write `"\d123"` and `"\o03"` instead
190 * `$::x` now means exactly the same a `$x`, instead of `$*x`
191 * `%h<>` now means `%h{}` -- the entire hash, not the empty string as key
192 * `($::('x'))` with two adjacent closing parens now parses correctly
193 * `0_123_456` now parses as `0d123456`, not an error
194 * `1<2>` is now a fatal error: Odd number of elements in Hash
195 * `q()` and `qw()` with parentheses are parsed as functions, not quotes
197 === Declarators and Operators
199 * Argument interpolation via prefix `|` and `|<<`
200 * Binding to qualified uninitialised symbols: `&fully::qualify := sub {...}`
201 * Contextual variables are now declared with `my $x is context`, not `env $x`
202 * Hyperised reduce operators: `[>>+<<]` and `[\>>+<<]`
203 * Implicit invocation assignment: `.= uc` is parsed as `$_ = $_.uc`
204 * Mid-block redeclaration no longer allowed: `my $x; { $x = 1; my $x = 2 }`
205 * Negated comparison operators: `!eqv`, `!=:=` etc; `!~~` replaces `!~`
206 * New infix comparison operators: `===` and `eqv`
207 * New infix non-short-circuiting boolean AND operator: `?&`
208 * Nullary reduction of builtin operators gives identity values: `[*]() === 1`
209 * Postfix operators can be called with a dot: `.++`, `$x.++`, `$x.\ ++`
210 * Prefix `=` now iterates on arrays as well: `=@array`
211 * Short-circuiting chained comparison: `1 > 2 > die('foo')` no longer fails
212 * Smart matching against code objects: `$obj ~~ { 1 > $_ > 5 }`
213 * Smart matching against implicit invocation: `$obj ~~ .meth`, `$obj ~~ .[0]`
214 * Typed constraints on autovivification: `my Hash $x; $x[0] = 1` now fails
215 * Typed declarations: `my Dog $fido`, `my T ($x, $y)`
216 * `*` is now always a term, never a prefix operator
218 === Blocks and Statements
220 * Implicit invocation in `when`: `when .true {...}`, `when .<key> {...}`
221 * Listops in conditions no longer consume the block: `for say {...}`
222 * Loop topics are not forced into rw: `for 1..3 { $_++ }` now fails correctly
223 * New `&break` and `&continue` primitives for use within `when` blocks
224 * New `&leave` primitive for exiting from the innermost block
225 * New postfix `given` statement modifier: `.say given foo()`
226 * Support for `FIRST`, `NEXT`, `LAST` loop control blocks
227 * Support for `START`, `PRE`, `POST`, `KEEP`, `UNDO`, `ENTER`, `LEAVE` blocks
228 * Support for repeat blocks: `repeat {...} while 1`, `repeat while 1 {...}`
229 * Support for the `&each` list interleaver: `for each(@a; @b) -> $x, $y {...}`
230 * The `for` loop no longer double-flattens lists: `for %h.pairs -> $p {...}`
231 * Topicalisers for `while` and `given` blocks: `while EXPR -> $x {...}`
232 * `&last` and `&redo` now work in `repeat {...}` and `loop {...}` blocks
233 * `&take` no longer flattens array literals: `take [1,2,3];`
234 * `&take` now works in functions called from within a `gather {...}` block
235 * `BEGIN(...)`, `END(...)`, etc., are now parsed as calls, not syntax errors
236 * `END {...}` in `.pm` files are no longer ignored when executed directly
237 * `INIT {...}` now works correctly inside `eval "..."`
238 * `do {...}` is now a loop block that takes standard loop controls
239 * `do {...}` with statement modifiers is explicitly disallowed
241 === Regexes and Grammars
243 * Anonymous tokens and rules anchor on both ends: `123 ~~ token{2}` is false
244 * New `s[...] = EXPR` and `s[...] .= meth` syntax; `s[...][...]` is deprecated
245 * New `tr///` syntax for transliteration; `y///` will not be supported
246 * Pugs::Compiler::Rule (PCR) replaces Parrot/PGE as the default engine
247 * Support for `:c/:continue`, `<prior>`, and much more: see PCR's ChangeLog
248 * `$()`, `@()` and `%()` parse correctly as `$$/`, `@$/` and `%$/`
249 * `/.../` matches `$_` under Int, Num and void context in addition to Bool
250 * `m:g/(1)|(2)/` now returns only successfully matched subcaptures
252 === Modules and Routines
254 * Allow space-separated adverbial named arguments: `f( :x<foo> :$y :!z )`
255 * Multi-dispatching now handles named, slurpy and optional arguments
256 * Multi-dispatching now handles parenthesized expressions as arguments
257 * Named arguments with no matching parameters is now an error
258 * New `&c.call($capture)` method to call without a caller frame
259   (similar to Perl 5's `goto &sub`, but it returns)
260 * New `&c.signature` method to get a Signature object from a Code object
261 * Parse for the `proto` routine modifier: `proto method foo ($x) {...}`
262 * Precompiled `.pm.yml` files with mismatching AST version will no longer load
263 * Support for user-defined unary and optional-unary prefix macros
264 * The main package is now `::Main`, not `::main`
265 * `&?CALLER_CONTINUATION` is now fully reentrant
266 * `&yield` in coroutines works correctly within loop blocks
267 * `sub ($x = 0 is copy)` no longer allowed; say `sub ($x is copy = 0)` instead
268 * `sub f ($x is lazy) {...}` no longer evaluates $x more than once
269 * `sub f (@x?) {...}; f()` now sets `@x` to `[]`, not `[undef]`
271 === Classes and Objects
273 * Attribute-like method call syntax: `@.method(1)`, `$.method: 2, 3, 4`
274 * Class attributes: `class C { my $.x is rw }`
275 * Class name literals are now term macros, not prefix functions
276 * Compile-time self-mixin no longer allowed: `role A does A`
277 * Default initialiser expression for attributes: `class C { has $.x = 123 }`
278 * Dot attributes are now method calls: `@.x` is the same as `@(self.x)`
279 * Dynamic method calls: `$obj.$meth`
280 * Hyperised method calls: `$obj.>>meth`
281 * Quantified method calls: `$obj.*meth`, `$obj.+meth` and `$obj.?meth`
282 * Reopening classes: `class C is also {...}`
283 * Role mixins: `role R {...} class C does R {...}`
284 * `$?SELF` is gone; write `self` instead
285 * `BUILDALL`/`DESTROYALL` trigger once per class even with diamond inheritance
286 * `does R` and `is C` statements in class body now evaluate in compile time
288 === Built-in Primitives
290 * New `&HOW`, `&WHAT` and `&WHICH` functions replace `&meta`, `&ref` and `&id`
291 * New `&VAR` macro to force lvalue evaluation of an expression
292 * New `&comb` function, a dual to `&split` but matches the wanted parts
293 * New `&crypt` function to create one-way digest strings
294 * New `&fork` function to create a new process
295 * New `&printf` function for formatted printing
296 * New `&quotemeta` function for escaping strings
297 * Support for `%b` in formatted printing
298 * The `&system` function no longer dies when the command does not exist
299 * The `.as` method is renamed to `.fmt` for formatted printing
300 * The `.perl` method now returns Unicode strings
302 == Bundled Modules
304 === New modules
306 * [ext/Automata-Cellular/] - Build and render cellular automata in a terminal
307 * [ext/Math-Basic/] - Basic mathematical functions and constants
308 * [ext/Math-Random-Kiss/] - Pseudo-random number generator
309 * [ext/re/] - Pragma to choose among grammar engine backends
311 === [ext/CGI/]
313 * A new `as_yaml` method to dump CGI parameters as YAML
314 * Allow initializing the CGI object with a hash of parameters
315 * New `Dump` function adapted from Perl 5's CGI.pm
316 * New basic tests for `escapeHTML` and `unescapeHTML`, which were broken
317 * New tests for `PATH_INFO`
318 * Only send the Content-Type: header if we actually have a content-type
319 * Only send the Status: header if it's a redirect, or if it's explicitly added
320 * Refactored into an OO-only module.  N.B.: this breaks backwards compatibility!
321 * Some work on charset handling, though a `charset` method is still missing
322 * The `content_type` method is renamed to `type` for compatibility
323 * The `cookies` attribute is renamed to `cookie` for compatibility
325 === [ext/HTTP-Server-Simple/]
327 * The old non-standard `./method` syntax has been replaced with `self.method`
329 === [ext/Rosetta/]
331 * Significant updates to the `lib/Rosetta/SeeAlso.pod` documentation
333 === [ext/Set-Relation/]
335 * Renamed from [ext/Relation/]
336 * Beginning of separate `Set::Tuple` and `Set::Relation` classes
338 === [ext/Test/]
340 * Converted `Test.pm` documentation from Kwid to Pod syntax
341 * The `eval_ok` and `eval_is` functions are gone; use `is eval` instead,
342   which runs its string in the current lexical scope rather than in
343   Test's (which is usually what you want)
345 == Test Suite
347 === [util/prove6]
349 * Can now run only a portion of the test suite, or even a single file
350 * Original shell script rewritten in Perl 5 for improved portability
351 * Support for multiple Pugs backends and multiple Perl 6 implementations
353 === [util/smartlinks.pl]
355 * A new visualiser of smartlinks used in the test suite
356 * Generates much nicer cross-referenced HTML pages
357 * See annotated specs in action on [http://spec.pugscode.org/]
358 * Smartlinks replace the old [util/catalog_tests.pl]
360 === [util/smokeserv/]
362 * See the `SYN` links on [http://smoke.pugscode.org/] for this in action
363 * Smoke client now uploads raw `.yml` results as well as `.html`
364 * The smokeserver now annotates the spec with test results using smartlinks
366 === [t/]
368 * All tests now begin with `use v6-alpha;` instead of `use v6;`
369 * Many, many more smartlinks have been added into the spec
370 * Programs and modules in [examples/] are tested for syntactic correctness
371 * Tests in [t_disabled/] are merged back into the main test suite
372 * [t/02-test-pm/] created to ensure that `Test.pm` works as advertised
373 * [t/blocks/] renamed from [t/subroutines/]
374 * [t/closure_traits/] created to test closure traits (`FIRST`, `LAST`, etc.)
375 * `#!/usr/bin/pugs` is gone from all test files
376 * `eval_ok` and `eval_is` are now `ok eval` and `is eval`, so that eval'd
377   strings will be run in the current lexical scope
379 == Examples and Utilities
381 === [examples/]
383 * All Perl 5 programs have been renamed from `*.p5` to `*-p5.pl`
384 * All Perl 6 programs have been renamed from `*.p6` to `*.pl`
385 * All references to them, except in talks, have been likewise updated
387 === [examples/games/dispatch_quiz.pl]
389 * A game to test your knowledge about Perl 6's multi-dispatch system
391 === [misc/runpugs/]
393 * A web teminal for running an interactive Pugs shell on the web
394 * WebTerminal: a library for building web terminals for interactive shells
395 * See [http://run.pugscode.org/] for a live demo
397 == Documentation
399 === [docs/Perl6/Perl5/Differences.pod]
401 * Significantly updated and linked from [http://spec.pugscode.org/]
403 === [docs/Perl6/Spec/]
405 * A new S16 draft for IO/IPC/signals as [docs/Perl6/Spec/IO.pod]
406 * A new S26 draft for documentation as [docs/Perl6/Spec/Documentation.pod]
407 * Revamped S29 draft in [docs/Perl6/Spec/Functions.pod]
409 === [docs/Pugs/Doc/]
411 * New directory for Pugs-specific documentation
412 * [docs/Pugs/Doc/Hack/Style.pod] - Haskell style guide for Pugs hackers
414 === [docs/talks/extraction.xul]
416 * Slides from Nathan Gray's /Practical Extraction with Perl 6/ talk
418 == Perl 6 on Perl 5
420 === [perl5/Pugs-Compiler-Perl6/]
422 * The `v6.pm` implementation of Perl 6 now handles `./pugs -CPerl5` commands
423 * See its own ChangeLog for more information
425 === [v6/]
427 * A new subproject to write a Perl 6 compiler in Perl 6
428 * Bootstrapped from the `v6.pm` compiler on the perl5 runtime
429 * See its own ChangeLog for more information
431 == Experimental projects
433 === [misc/pX/Common/P5_to_P6_Translation/]
435 * Converts Perl 5.9.4+'s YAML syntax tree into Perl 6
436 * Handles regexes, arrays, hashes and many builtin functions
437 * See its own documentation for more information
439 === [misc/pX/Common/convert_regexp_to_six.pl]
441 * Converts Perl 5 regex into Perl 6
442 * See its own documentation for more information
444 === [misc/pX/Common/redsix/]
446 * An Perl 6 implementation on Ruby 1.9+
447 * See its own documentation for more information
450 = Changes for 6.2.12 (r10930) - June 26, 2006
452 == Licensing Changes
454 * The [src/] tree and the `pugs` executable are now released under the
455 permissive MIT license, in addition to Artistic and GPL
456 * A new [third-party/] tree to hold bundled prerequisites originated
457 from non-Pugs projects
459 == New Perl 6 modules
461 * [ext/Relation/] - Relation type for Perl 6 (incomplete)
462 * [ext/Getopt-Std/] - Simple command-line parsing
464 == Updated modules
466 * [ext/Locale-KeyedText/] - Added export_as_hash() methods
467 * [ext/Rosetta/]: Multiple additions and rewrites
468 ** Merged ext/Rosetta-Engine-Native/ in, renamed to ::Example
469 ** Now officially incorporates "The Third Manifesto"
470 ** Rewrote half of Language.pod
471 ** Updated the DESCRIPTION and class list of Rosetta.pm
472 ** Added new core module Rosetta::Shell and example shell.pl
473 ** Added new documentation file Rosetta::SeeAlso
474 ** Various other documentation additions and edits
475 * [ext/Test/]: Avoid the use of junctions to make Parrot/Perl6's life easier
477 == Perl 6 on Perl 5 (under [misc/pX/Common/])
479 * Data-Bind - Implement Perl 6's calling/binding convention on Perl 5
480 * Inline-Parrot - a C version of Inline-Parrot - uses NCI for data exchange
481 * Module-Compile - precompile Perl 5 modules transparently
482 * P5_to_P6_Translation - beginning of a Perl 5.9 MAD tree parser and translater to Perl 6
483 * Pugs-Compiler-Perl6 - Compiler for Perl 6 (implements 'use v6-pugs'):
484     use v6-pugs; say "Perl 6"; use v5; print "Perl 5"
485 * Pugs-Compiler-Precedence - an operator precedence parser, built around Parse::Yapp
486 * Pugs-Compiler-Rule - Compiler for Perl 6 Rules
487 * Pugs-Grammar-MiniPerl6 - translate Perl 6 rules into haskell Parsec
488 * Pugs-Grammar-Perl6 - a Perl 6 parser - parses Test.pm!
489 * lrep - a bootstrapped, very minimal Perl 6 compiler written in Perl 6
490 * re-override - Swaps in an alternate regexp engine:
491     ./perl -we 'use re::override-perl6; print "a" =~ /<word>**{1}/;'
493 == Test, Examples and Documentations
495 * Restored this ChangeLog's entries for v6.0.0 thru v6.0.8, which were
496 truncated in r8916, apparently from gnome's copy-paste buffer limit
497 * [docs/Perl6/Doc] hierarchy, installable `Perl6::Doc`
498 * [docs/Perl6/FAQ/Capture.pod] - FAQ on the new Signature/Capture convention
499 * [docs/Perl6/FAQ/FUD.pod] - Fears, Uncertainties and Doubts about Perl 6
500 * [docs/talks/p6myths2.html]: Juerd's talk "Perl 6 Myths"
501 * [docs/talks/peek.spork]: Gaal's OSDC talk "A Peek into Pugs Internals"
502 * [examples/concurrency/]: Added sample usage on Software Transactional Memory
503 * [examples/qotw/]: Added the QOTW 8 Expert solution
504 * [examples/rules/]: Added a sample BASIC parser
505 * [src/Pugs/Parser] - Perl 6 grammars for Capture.pg and Signature.pg
506 * [util/cperl-mode.el] - Emacs mode for Perl 6
508 == Feature Changes
510 * Pugs now builds in a single pass
511 * Removed support for GHC 6.4.0 and added support for GHC 6.5
512 * Removed support for Parrot 0.4.4 or below and added support for Parrot 0.4.5
513 * &?SUB is replaced with &?ROUTINE; $?SUBNAME is replaced with &?ROUTINE.name
514 * Arguments beginning in parens, such as `f ('x')=>1`, is now always positional
515 * Array and hash sigilled match variables, such as `@0`, `@<foo>` and `%<bar>`
516 * Assignment with non-obviously-scalar left-hand side is now in list context:
517 ** `@a = 1,2,3` now parses as `@a = (1,2,3)`
518 * Broke down Parser and AST.Internals to smaller files so rebuilds are faster
519 * Builtin functions no longer defaults to `$_`; write `.ord` instead of `ord`
520 * Compile `Prelude.pm` and `Test.pm`, to YAML bytecode for faster loading
521 * Declarators are now lexical: `{ $x++ unless my $x }` increments `$OUTER::x`
522 * Declarators can now occur at expression position: `my $x + my $y` works
523 * Declarators no longer take qualified names: `our $Foo::x` is invalid
524 * Experimental support for Software Transactional Memory and atomic blocks
525 * Hash initializers now revert to bias-to-left behavior as in Perl 5
526 ** In `{X => 1, X => 2}`, the value of X is 2, not 1
527 * If a block ends on a line by itself, an implicit `;` is assumed if possible
528 * In the interactive shell, :d and :D (dump parse tree) now continues the parse
529 from the current environment; use :reset to reset the environment
530 * More helpful diagnostics when calling unsafe builtins under safe mode
531 * Multiline support in the interactive shell reports unrecoverable parsefails
532 * Names of named arguments must always be a bareword now, such as:
533     f(name=>1); f(:name(1));
534 * New AST-dumping backends: `Parse-Pretty`, `Parse-YAML`, `Parse-HsYAML`
535 * Parse-time binding `::=` is now fully supported
536 * Proper desugaring of `.=` expressions, such as `@a .= map(&sqrt)`
537 * Prototype objects: `my Dog $fifo` now assigns `::Foo` into `$fido`
538 * Removed support for `require ::Class::Literal`
539 * Removed support for `rx_` macros in Prelude for user-defined rule handlers
540 * Quotelike constructs such as `rx` and `qq` no longer takes `#` as delimiter
541 * Support for Unicode bracket characters for quotelike operators
542 * Support for bracketed comments: #(...), #<<< ... >>>, etc
543 * Support for controlled backtracking and whitespace sensitivity via distinct
544 `token`/`regex`/`rule` delecarators
545 * Support for environmental variables such as `$ENV::PWD` and `$+PATH`
546 * Support for implicit-topic dereferences such as `.[0]` and `.<foo>`
547 * Support for long dot syntax: $foo\   .blah
548 * Support for scan metaoperators: `[\+] 1,2,3` evaluates to `(1, 3, 6)`
549 * The `-M` command line switch can take import arguments: `pugs -Mlib=foo`
550 * The parser is now much faster by being mostly predictive (non-backtracking)
551 * The postfix infiniterange is no more; write `1..*` instead of `1...`
552 * Two `my $x` declarations in the same scope is now no-op instead of an error
553 * Use `Data.ByteString` for fast string representation
554 * Using libraries from embedded Perl 5 can import functions now
555 * Whitespace disambiguation implemented on `if`, `unless` and `for`:
556    if %ENV{ 3 } { 4 }   # hash lookup on %ENV
557    if %ENV { 3 } { 4 }  # %ENV by itself
558 * YAML bytecode is now versioned to reduce incompatibilities
559 * `&not` is now unary instead of a list operator
560 * `:!foo` is now a shorthand for `foo => False`
561 * `bool::true` and `bool::false` are renamed to `Bool::True` and `Bool::False`
562 * `make upload-smoke` now uploads smoke test automatically
563 * `my $!x` is now recognized as an alternative spelling for `my $x`
564 * `q:code {...}` gives ASTs in macros
565 * `readline` and `=$fh` now autochomps
567 == Bug Fixes
569 * (1.3 % 1) was evaluating to 0; now it evaluates to 0.3 like everybody else
570 * An uninitialized Code is no longer nullary: `my &f; f 1` is not a parsefail
571 * Chained assignments now return lvalues properly: `$x = %y = (1,2,3,4);`
572 * Implicit variables ($^x) is no longer allowed in statemeent-level bare blocks
573 * Implicit variables following a declarator was broken: `{my $x; $^y}.(42)`
574 * In `(@x, @y) = (1,2,3)`, the `@y` is now cleared into an empty list
575 * Invalid rules in embedded Parrot no longer triggers an uncatchable `exit`
576 * Lexical imports are no longer discarded upon block reentry
577 * Method invocant is `self` and `$?SELF` but no longer `$_`
578 * Named-only subs such as `sub f (:$x!) {}` no longer parse as unary positional
579 * Opening a file for writing now turns autoflushing on by default
580 * Short-circuit operators now works again
581 * Statement-level `return` and `yield` now propagates contexts correctly
582 * Statement-level bare blocks now counts as one scope for `OUTER`, not two
583 * Statement-level bare blocks now runs under all contexts: (sub { { 3 } }).()
584 * Strings outside ASCII range no longer raises exceptions at the PGE/Parrot bridge
585 * The bogus comma-less block argument form `map {$_} 1,2,3` is no longer supported
586 * `%.foo` and `@.foo` now always flattens in argument lists
587 * `&slurp` and `&readline` evaluates eagerly and no longer races with `&unlink`
588 * `1.` was parsed as a valid integer, causing ambiguities; it's now invalid
589 * `@foo.perl` works correctly when `@foo` is recursive
590 * `f(())` now passes `&f` an empty list, not `undef`
591 * `sign` and `<=>` now fails on undefined arguments, instead of returning undef
592 * `slurp` works correctly on UTF-8 files
593 * `sub f (@x) {}; f([1,2,3])` now works as it's no longer under slurpy context
596 = Changes for 6.2.11 (r8934) - Feb 1, 2006
598 == Bundled Modules
600 === New Perl 6 modules
602 * [ext/Parse-Rule/] - A Rules engine port in perl 6
603 * [ext/Rosetta/] - A federated relational database (incomplete)
604 * [ext/Rosetta-Engine-Native/] - A back-end for Rosetta testing (incomplete)
606 === Updated modules
608 * [ext/File-Spec/] - Rewritten to define its own exported wrapper subs
609 * [ext/Locale-KeyedText/] - Rewrote with a strong resemblence to the original
610 ** Split up `translate_message()` for more granular Translator usage
611 ** Objects now become something useful when coerced into a string
612 ** Added `Locale::KeyedText::L::en`, LKT now throws Message exceptions
613 ** Template Modules now have a different variable interpolation format
614 ** Created 2 running [examples/] from pod that was removed from KeyedText.pm
615 ** Deleted old test suite (yet to be replaced); now only tests compilation
616 * [ext/libwww-perl] - Rewrote `HTTP::Header::Util` with gather/take syntax
617 * [ext/Test] - `&fail` renamed to `&flunk` to avoid conflict with builtin
619 === Experimental modules (in misc/, not installed)
621 * [misc/Parser-Mini/] - Experimental *thin* p6 parser
622 * misc/Rosetta-Incubator/ broken up:
623 ** Locale::KeyedText was merged into the rewritten one in ext/
624 ** SQL::Routine and Rosetta were merged together, became Rosetta in ext/
625 ** The license of Rosetta is now GPL (with extra linking provision)
626 ** Remainder (SQLBuilder, SQLParser, Eng/Generic, Emu/DBI) was deleted
627 * [misc/sixpan/] - Prototype of new CPAN tools in Perl 5
629 == Test, Examples and Documentations
631 * Add timing data prints to smoke harness, to help spot hanging/slow tests
632 * Tests in [ext/] and [t/] - Temporary workaround the breaking of `use_ok`
633 * [Makefile.PL] - Begins with an overview POD section on the build system
634 * [TASKS] - Tracking current things to do
635 * [docs/AES/S17draft.pod] - Draft synopsis for Perl 6's concurrency
636 * [docs/AES/S22draft.pod] - Draft synopsis for Perl 6's CPAN
637 * [docs/articles/tpr.pod] - An introduction article to Pugs
638 * [docs/feather] - Feather.perl6.nl web site
639 * [docs/getting_started] - Pointers for people new to Pugs
640 * [docs/notes/context_coercion.pod] - Notes on implementing contexts
641 * [docs/notes/context_coersion.pod] - Notes on implementing contexts
642 * [docs/notes/docs_evil_plan.txt] - Plan for Perl 6 documentation
643 * [docs/notes/multimethods.pod] - Description of the canonical MMD algorithm
644 * [docs/p6doc/] - Perl 6 language tutorials and documentation
645 * [docs/quickref/] - Various updates and improvements from new Synopses
646 * [docs/quickref/fears] - assorted fears about Perl 6
647 * [examples/cookbook/] - New recipes
648 * [examples/network/wiki/] - demo wiki
649 * [examples/rpn/] - RPN calculator in Perl 6, Perl 6, and Haskell
650 * [util/run-smoke.pl] - Support for `PUGS_SMOKE_EXCLUDE_EXT` environment variable
651 * [util/catalog_tests.pl] - Annotate smoke reports with colored sources/specs
653 == New Features
655 * Adverbial number forms: `:16<deadbeef>` and `:16[14,15]`
656 ** This change obsoletes `hex()` and `oct()`
657 * Calling private methods with `self!method`
658 * Deep eager sequential evaluation list operator `eager`
659 * Access to the class metaobject with `.meta`
660 * Macros can now be called and reinterpolated at runtime
661 * Multisub declarations in the same scope can now be exported selectively
662 * Named arguments are now decided at parse time, not as runtime Pair objects
663 * New YAML tree-dump backends: `-C Parse-YAML`, `-C PIR-YAML`, `-C PIL1-YAML`
664 * New `\x[abcd]` and `\x[1,2,3,]` forms instead of `\x{abcd}` in qq-strings
665 * New backend: `-CParse-Pretty`, to show a pretty parse tree
666 * Parameter syntax changes:
667 ** `+$arg` becomes `:$arg`
668 ** `++$arg` and `+$arg is required` becomes `:$arg!`
669 ** `?$arg` becomes `$arg?`
670 * Round-trip data serialization with `.yaml` and `eval(..., :lang<yaml>)`
671 * Support for multiline inputs in interactive shell
672 * The build system now supports Cygwin again
673 * Two or more underscores in numbers (eg. `1__0`) is no longer accepted
674 * Unary `^` support: `^10` is a shorthand for `0..^10`
675 * `$+x` is now accepted as a shorthand for `$CALLER::x`
676 * `$CALLER::x` now only sees `env $x` in outer dynamic scopes, not `my $x`
677 * `$obj.clone` support
678 * `%*INC` now contains module interface structures, not file system pathnames
679 * `&die` and `&fail` can take an object argument without stringifying it
680 * `eqv` is now spelled `===`
681 * `pugs file.p6 --options` now passes options to the program, not to Pugs
682 * `self` is an alias for `$?SELF`
683 * `use Module` now imports its symbols lexically at the consumer's use time
684 * `use Perl-6` parses correctly now
686 == Bug Fixes
688 * Bareword `foo.bar` now always parses as `::foo.bar`, never `foo(.bar)`
689 * Binding a block to `&infix:<operator>` in BEGIN time now affects parsing
690 * Fixed embedding of threaded parrot
691 * Fixed evaluation order in array and hash access
692 * Fixed splice on scalar
693 * Improved detection of null patterns; this fixes some endless loops
694 * Improved hash parsing. `{("a"=>3),}.ref` is again ::Hash, not ::Block
695 * Infix macros no longer cause parsefail
696 * Lazy `{...}` executes its closure at most once
697 * Method calls on simple index lookups now gets dispatched correctly
698 * Parse (but no implementation) for scoped packages
699 * When `m:P5/(...)?/` captures nothing, $0 no longer evaluates to true
700 * `$.foo.bar()` correctly dispatches on the runtime type of `$.foo`
701 * `&splice` was destroying existing bindings on the array
702 * `.perl` stringification now escapes unprintable characters
703 * `1**Inf`, `0**0` and `Inf**0` are defined to 1 regardless of architecture
704 * `3..2` and `'z'..'a'` return empty lists
705 * `\(1,2,3,4).elems` no longer throws an exception
706 * `zip(@a; @b; @c)` no longer flattens the arrays together
708 == Backends
710 === JavaScript backend
712 * Division by zero raises an error, not return NaN like JS does
713 * Fix problems with `[=>]` and related operators
714 * New operators implemented: `+| +& +^ +< +> ~& ~| ~^ +^ ~^`
715 * PIL/JS compilation now works with exported multisubs
716 * Support for using Perl 5 modules in JavaScript backend via `-B JS-Perl5`
717 * `$*PID`
718 * `.assuming`
719 * `FIRST {...}` blocks
720 * `state $variable`
721 * `unlink()`
723 === Parrot backend
725 * Parrot 0.4.1+ is now required for Parrot targeting and embedding
726 * Closure creation no longer triggers segfaults
727 * Lexical variables are now truly lexical instead of emulated by temps
728 * Upon program exit, embedded Parrot/Perl5 objects are finalized correctly
729 * Support for modules with lexical imports
730 * When looking for an external parrot, look in `%ENV<PARROT_PATH>` first
732 === PIL^N backend
734 * New VM written in Haskell which uses the domain specific language PIL^N
735 ** Based on the Perl6-ObjectSpace prototype
736 ** Optionally built with `make pil` (and interactively as `make pili`)
737 ** See [src/PIL/Native/] for the source code
738 * Class Meta-Model written and bootstrapped in PIL^N
739 ** Basic tests for Meta-Model in [t/pil/]
740 * Role Meta-Model partially complete in PIL^N
741 * Some basic Container types written in PIL^N
742 ** See [docs/notes/piln_object_repr_types.pod] for implementation notes
743 * Haskell implementation of Perl 6 Rules and precedence parser
744 ** See [src/Text/Parser/] for the source code
746 === Perl6-ObjectSpace
748 * Prototype Perl 5 backend, served as the inspiration for the PIL^N backend
749 ** Currently somewhat out of sync with PIL^N
750 ** See [perl5/Perl6-ObjectSpace/] for the source code
751 * Core set of /native types/ written in Perl 5
752 ** Class Meta-Model bootstrapped using only the native types
753 ** Role Meta-Model and Container types not yet supported
754 * Based on work from the [perl5/Perl6-MetaModel/]
757 = Changes for 6.2.10 (r7520) - Oct 10, 2005
759 == Feature Changes
761 === Shared components
763 * Support for the Haskell Cabal framework, exposing Pugs as a library to other
764   Haskell users, paving the way for use in IDEs, as well as future Inline::Pugs
765   and Inline::GHC modules
766 * Adopted the code convention of expanding literal tab chars to spaces
767 * JavaScript backend can be invoked with `pugs -B JS`
768 * Perl 5 backend can be invoked with `pugs -B Perl5`
769 * Pugs will now compile version ranges in 'use/require' statements
770 * Significant backend enhancements; see below
771 * `$?PUGS_BACKEND` can be used to tell which runtime is in use
772 * `exec` emulated (partially) on Win32
774 === JavaScript backend
776 * Passes 91% of the main test suite (including TODO failures)
777 * Integrated with MetaModel 1.0
778 * Faster code generation, taking advantage of `-CPerl5` output
779 * Switched to continuation passing style (CPS) to properly support
780   `return()`, `&?CALLER_CONTINUATION`, coroutines, and `sleep()`
781 * Improved support for binding and autodereferentiation
782 * Initial support for multi subs
783 * Initial support for symbolic dereferentiation
784 * List construction no longer creates new containers
785 * Miscellaneous performance improvements
786 * Named-only arguments (`+$x` and `++$x`) can't be passed positionally anymore
787 * Parts of the Prelude can be written in Perl 5 now to improve performance
788 * Perl 5-like regular expressions mostly working
789 * Proper UTF-8 handling
790 * Support for "monkey-but" (`$foo but {...}`)
791 * Support for `$CALLER::` and `$OUTER::`
792 * Support for `lazy {...}` blocks for delayed evaluation
793 * Support for `temp` and `let` declarations
794 * Support for array and hash autovivification
795 * Support for array and hash slices
796 * Support for evaluating expressions in the PIL2JS shell (`:e <exp>`)
797 * Support for junctions
798 * Support for loading JSAN modules by using `use jsan:Module.Name`
799 * Support for lvalue subroutines (`foo() = ...`)
800 * Support for slurpy hashes in subroutine signatures
801 * Support for the `Proxy` class (not yet user-visible)
802 * Support for the `eqv` operator
803 * Using `for` with only one element to loop over works now
804 * `int()` works correctly on special values like `Inf` or `NaN` now
805 * `substr()` returns a r/w proxy: `substr($str, $pos, $len) = $replacement`
807 === Perl 5 backend
809 * Passes 33% of the main test suite (including TODO failures)
810 * Integrated with the Perl 5 edition of MetaModel 2.0
811 * Compiles and runs Perl 6 version of `Test.pm`
812 * Infinite lazy lists, Pairs, References, and intrinsic classes
813 * Multi Sub, Class, Match, exceptions, types and subtypes
814 * Scalar, Hash and Array containers, with tieing, binding and read-onlyness
815 * Support for an extensive list of operators
816 * Supports eval() with Perl 5 and Perl 6 code
817 * `%ENV` is shared with Perl 5; `@INC` is separate from `@Perl5::INC`
819 == Bug Fixes
821 === Shared components
823 * Fixed `foo {1}.blah` being misparsed as `foo({1}).blah`
824 * Fixed a hashref infinite loop
825 * Fixed infinite loop on sub { 1 }.pairs
826 * Multiple `sub foo` no longer silently means `multi foo`
828 === JavaScript backend
830 * Fixed evaluation order of assignments and bindings
831 * Fixed `.values` and `.kv` to return aliases
833 == Bundled Modules
835 === New Perl 6 modules
837 * Perl6-Container-Array, Perl6-Value-List
838 ** Prototype modules for implementing Lazy lists in Perl 6
839 * Log-Selective
840 * Cipher - Cipher API suite for cryptographic ciphers
841 * FA-DFA
843 === Updated modules
845 * Locale-KeyedText: Synchronized with p5 version 1.6.2
846 * Test-Builder: new APIs, including test_pass() and test_fail()
848 === Experimental modules (in misc/, not installed)
850 * Blondie, prototype compiler for native code generation and type-inferencing
851   with Attribute Grammers
852 * XML::SAX
853 * Getopt::Long
854 * Rosetta-Incubator, a complete set of Rosetta[|::*] and SQL::Routine[|::*]
855   modules, restarted development at 2005.09.29
857 == Test, Examples and Documentations
859 * Many new tests and test refactoring, we now have 10300+ tests
860 * Documentation for draft GC API at `docs/notes/GC.pod`
861 * Data file for curcular prelude exploratory diagram at
862   `docs/notes/compilation_of_circular_prelude.graffle`, some
863   examples at `docs/notes/circular_prelude_stuff.pl`
864 * Collaborative journal at `/docs/journal`
865 * Autrijus's CUFP talk at `/mirror/pugs/docs/talks/cufp2005.txt`
866 * Theory Model proposal at `docs/notes/theory.pod`
869 = Changes for 6.2.9 (r6050) - Aug 4, 2005
871 == Pugs Internals
873 * New build system in `inc/PugsBuild`
874 ** Configuration preferences are stored in `config.yml`
875 ** Persists across builds, overridable via `%*ENV<PUGS_BUILD_OPTS>`
876 * `$CALLER::_` is now again usable in defaults
877 * JavaScript Backend
878 ** Actively progressing in `perl5/PIL2JS`
879 ** Passes 64.00% of the Pugs test suite
880 * Perl5 Backend
881 ** Begun in `perl5/PIL-Run`
882 ** Primitive interactive shell as `crude_repl.pl`
883 * Object MetaModel
884 ** Perl 5 prototype is mostly self-hosting
885 ** New C3-based method dispatch algorithm
886 ** JavaScript version partially completed
887 ** Java version begun (in very early stages)
888 * Pugs Intermediate Language
889 ** New runcore design begun in `src/PIL`
890 ** QuickCheck-based specification tests added
891 * Precompilation for arbitrary modules (not enabled by default)
893 == Bundled Modules
895 * New Perl 6 modules:
896 ** `MIME::Base64`
897 ** `Recurrence`
898 ** `Span`
899 * Additions to `libwww-perl`:
900 ** `HTTP::Cookies`
901 ** `HTTP::Query`
902 ** `HTTP::Request::CGI`
903 ** `HTTP::Status`
904 ** `URI::Escape`
905 * Additions to `DateTime`:
906 ** `DateTime::Set`
908 == Test, Examples and Documentations
910 * Many new tests and test refactoring, we now have 8100+ tests
911 * A number of additions to `examples/cookbook`
912 * Beginning of Rule-based grammars for Perl6 in `modules/Grammars`
913 * SVG generation examples in `examples/graphics`
914 * `STATUS` document added to the top level to keep track of current progress
915 * `docs/notes/plan` expanded and added macro-related issues
916 * `examples/algorithms/Newton.pm` implements the newton method with currying
917 * `examples/network/evalbot.p6` gets safe &print primitive
918 * `examples/network/seenbot.p6` gets pretty duration printing
919 * `examples/network/svnbot.p6` supports branch information
920 * `examples/ppt/cat.p6` added to Perl Power Tools
921 * iblech's LUGA talk as `Anatomie_eines_Compilers_am_Beispiel_von_Pugs.latex`
922 * ingy's OSCON talk as `oscon-apocalypse.spork`
924 == Bug Fixes
926 * Fix pair binding for functions expecting pairs as arguments
927 * Global destruction is now guaranteed upon program exit
928 * Parameter's defaults are now evaluated in its original lexical scope
929 * Parser for hash subscripting was globbing whitespaces after it
930 * Primitive listops now handles Pairs as regular arguments
931 * Various `+$foos` in sub signatures changed to `?$foo` in `Test.pm`
932 * `%h<x>>` was misparsed as `%h{'x>'}`
933 * `-Inf` now stringifies as `-Inf`, not `-Infinity`
934 * `.end` and `.elems` no longer work as scalar methods
935 * `/a/ ~~ "a"` now works the same way as `"a" ~~ /a/`
938 = Changes for 6.2.8 (r5577) - July 13, 2005
940 == Pugs Internals
942 * Added code generation backends: `PIR`, `PIL`
943 ** Pugs can now generate PIL (Pugs Intermediate Language)
944 ** ...and emit PIR (Parrot Intermediate Representation) from PIL
945 ** New `make pirsmoke` target runs test suite using PIR backend
946 ** `Test.pm` can be compiled to PIR
947 ** `Prelude/PIR.pm` added with Perl 6 versions of some builtins
948 ** `pugs -CPIL -e 'say 123'` for dumping PIL from code
949 * Implicit variables like `$^a` now only work in bare blocks
950 * Initial support for `%*INC`: multiple `require` calls run only once
951 * Named binding is now done in an inferencing phase before positional binding
952 * New Haskell builtins: `IO::tell` and internal filehandle test functions
953 * New PIR-specific builtin: `leave`
954 * New Prelude builtins: `File::seek`, `localtime`, `trans`
955 * New builtin classes: `Proxy`, `Control::Caller`, `Time::Local`
956 * New trait for Prelude.pm: `is builtin` (installs into the global namespace)
957 * Pairs in variables now bind to named parameters just like pair literals do
958 * Parse `trusts ClassName` and `my $foo is trait_name` as no-ops
959 * Parse fractional number literals starting with a leading dot: `.1` `-.1`
960 * Qualified names and exports now dealt with consistently
961 * Support for `does RoleName` and `is ClassName` within class declarations
962 * `&foo` in module `Foo` now looks up `&Foo::foo` as well
963 * `@?INIT` and `@?CHECK` renamed back to `@*INIT` and `@*CHECK` space
964 * `Bare` and `Parametric` types merged into `Block`
965 * `MY`, `OUR`, `OUTER`, `CALLER` can no longer be used as user-defined packages
966 * `Prelude.pm` is now pre-compiled to reduce startup time
967 * `multi foo { ... }` is now a shorthand for `multi sub foo { ... }`
968 * `my Foo $foo .= new(...)` parses and works
969 * `our` variables in packages now generate qualified symbols
970 * `use perl5:DBI` replaces the old `use DBI--perl5` syntax
972 == Bundled Modules
974 * New Perl 6 modules:
975 ** `DateTime::Set`
976 ** `DateTime`
977 ** `HTTP::Server::Simple`
978 ** `Module::Pluggable::Fast`
979 ** `Perldoc` (partial port)
980 ** `Set::Infinite`
981 ** `Span`
982 ** `Tree::Visitor` and `Tree::Visitor::FindByPath`
983 ** `WTemplate` - the first Perl 6 templating engine
984 * New Pugs-specific modules:
985 ** `Perl-Compiler`, a PIL representation in Perl 6
986 ** `perl5/PIL-Run`, a Perl 5 prototype of Perl 6 runtime environment
987 ** `perl5/Perl6-MetaModel`, a Perl 5 prototype of Perl 6 object model
988 * Completed port: `Locale::KeyedText`
989 ** Compiles, executes, and passes whole pristine test suite
990 ** Updated version to 1.5.0, corresponding to the Perl 5 version 1.05
991 ** Some skips and workarounds remain due to missing Pugs features
992 * Completed port: `Test::Builder`
994 == Test, Examples and Documentations
996 * Examples of methods acting on builtin types in `examples/vmethods/`
997 * Interpreter and debugger for the l33t language in `examples/obfu/l33t.p6`
998 * Low level sanity tests in `t/01-sanity/` for the PIR code emitter
999 * More JAPHs added to `examples/japhs/`
1000 * New directories: `examples/continuation` and `examples/unitfunctions`
1001 * Overview of PIL-based compilation roadmap in `docs/notes/plan`
1002 * Perl 6 Rule grammar and related files added to `module/Grammars/`
1003 * Script to generate Haskell source's import graph as `util/importgraph.pl`
1004 * Updates and cleanups to PA01; master copy is now `docs/01Overview.kwid`
1005 * YAPC::NA talk: /Apocalypse Now/ (in `docs/talks/Apocalypse_Now.spork`)
1007 == Bug Fixes
1009 * Call parrot with `-C` (CGP) instead of `-j` (JIT) runcore to avoid segfaults
1010 * Fixed `!~` to mean negated `~~` instead of `ne`
1011 * Fixed `.isa` to agree with smartmatch results
1012 * Fixed order of method invocation in `BUILDALL` and `DESTROYALL`
1013 * New environment variable `PUGS_PARROT_OPTS` for invoking external parrot
1014 * Qualified and global variables may now be used without declaration
1015 * `$hashref.does(Hash)` now returns true
1016 * `&say =:= &say` now evaluates to true
1017 * `(42).kv` now dies and `(42,).kv` works
1018 * `[1] <=> [2]` no longer misparsed as `[1]{'='}[2]`
1019 * `caller` now counts `eval` and the topmost `main` as one frame
1020 * `qq{ ... { code } ... }` no longer ignores the interpolated code
1021 * `redo` and `next` now works correctly inside loop blocks
1022 * `sleep()` returns seconds slept instead of undef
1023 * `try` is now capable of catching all type casting errors
1026 = Changes for 6.2.7 (r4612) - June 13, 2005
1028 == Pugs Internals
1030 * Add `::?CLASS`, `::?ROLE`, and `::?PACKAGE` magicals
1031 * Allow bypassing the Standard Prelude by setting `$ENV<PUGS_BYPASS_PRELUDE>`
1032 * Experimental heredoc support via `qq:to/END/ ... END`
1033 * Implement `is required` for subroutine parameters
1034 * New builtins: `caller`, `Carp::longmess`, `Scalar::as`
1035 * Obsolete the old `open` builtin in favor of Prelude's `File::open()`
1036 * Rudimentary, source-filter-like macro support added
1037 * Speed up parsing by 100% by caching dynamic grammar rules
1038 * Support for lvalue `substr()`
1039 * `coerce:` and other categories from A12 are parsed in sub names
1040 * `is unsafe` trait to mark subs unavailable in safe mode
1041 * `method foo ($.x) {}` now sets `$.x`
1042 * `undef($x)` is now spelled `undefine($x)`
1044 == Bundled Modules
1046 * New modules added:
1047 ** `FindBin`
1048 ** `File::Find`
1049 ** `POE` (experimental)
1050 ** `URI::Escape`
1051 * Extended tests for `Tree`
1053 == Tests, Examples and Documentation
1055 * APW talk: "Apocalypse Now" in `docs/talks/Apocalypse_Now.spork`
1056 * APW talk: "Eine Einfuehrung in Perl 6" in `docs/talks/perl6-apw2005/`
1057 * Documentation for running Pugs in `lib/pugs/run.pod`
1058 * Examples of nested loops in `examples/nested_loops`
1059 * Haskell Workshop paper on Pugs in `docs/talks/hw2005.tex`
1060 * Overview of Pugs source tree in `lib/pugs/hack.pod`
1061 * Overview of Rules bootstrapping plan in `docs/other/rules_bootstrap`
1062 * Some new tests; several tests refactored; we now have 7600+ tests
1063 * Unit manipulation and conversion examples in `units.p6`
1064 * `examples/algorithms` subdir now unifies algorithmic examples
1066 == Bug Fixes
1068 * '\' protects delimiters in rules
1069 * Chained comparisons now work again (were broken in 6.2.6)
1070 * Critical evals (`use`, `require`, `prelude`) now raise parsefail exceptions
1071 * Fix `[].method` and `{}.method` to call `Array::method` and `Hash::method`
1072 * Fix `~{1=>2}` to stringify correctly to `"1\t2\n"`
1073 * Parse errors inside blocks now reported at the position at which they occurred
1074 * Parse array and hash captures in rules
1075 * `Test::is()` now shows the expected result correctly again
1076 * `module Foo {...}` now parses
1079 = Changes for 6.2.6 (r4318) - June 2, 2005
1081 == Pugs Internals
1083 * Pugs can now embed Perl 5 and use CPAN modules
1084 ** Perl 5 objects, classes and functions are understood by Pugs
1085 ** Pugs objects, classes and functions are understood by Perl 5
1086 ** These types can also be used in round-trip callbacks
1087 * All user-defined classes now inherit from "Object"
1088 * Bare blocks now belongs to the `Bare` type; pointy subs are still `Block`
1089 * Class methods: `My::Class.foo()`
1090 * Class objects are initialised from the default class tree
1091 * Exclusive-range operators: `^..`, `..^` and `^..^`
1092 * Experimental compiler backend `Pugs.Compile.Pugs2` (not yet working)
1093 * Experimental `&code.body` support for reified ASTs
1094 * Experimental embed API in `src/perl5/pugsembed.h`
1095 * Fully qualified subroutine names are now parsed
1096 * More core modules refactored for improved compilation speed and readability
1097 * Multi-invocant calls like `foo($x, $y: $z)` are no longer legal
1098 * New builtins: `evalfile`, `nothing`, `getc`
1099 * Parameterless bare blocks now get an implicit $_ by default
1100 * Parameterless pointy blocks no longer get a default parameter list
1101 * Parrot compilation backend now handles qualified subroutine names
1102 * Pugs now has a /Safe/ mode, enable by the PUGS_SAFEMODE environment variable
1103 * Stub implementation for `.does` as an alias of `.isa` (no Roles yet)
1104 * Unix-only builtins: `opendir`, `readdir`, `rewinddir`, `closedir`
1105 * `$str.split(/rule/)` and `$str.split($delim)`
1106 * `&infix<=>` can now be used as the assignment operator
1107 * `Prelude.pm` added to `src/perl6` to implement S29 builtins in Perl 6
1108 * `SUPER::`, `BUILDALL` and `DESTROYALL`
1109 * `is export` now works as specified
1110 * `loop {...} while`, `loop {...} until`
1111 * `map` and `reduce` can now take n-ary functions.
1112 * `when .does(Foo)`, `when $_.does(Foo)` and `when Foo`
1114 == Bundled Modules
1116 * Many more code sketches and documentation added to `Perl-MetaModel`
1117 * New `Benchmark` module added
1118 * `CGI` has been improved:
1119 ** Now has: `escapeHTML`, `unescapeHTML`, `redirect`
1120 ** Supports more HTTP headers in `header`
1121 ** New module `CGI::Util` added
1122 * New `Date` module added
1123 * New `Text::Glob` module added
1124 * New `libwww-perl` distribution added
1125 ** `LWP-Simple` now moved here
1126 ** `HTTP::Headers`, `HTTP::Message` modules added
1127 * `Test::Builder` is now dangerously close to completely working
1128 * `fp` now exports `&identity` instead of `&id` to avoid clash with `$obj.id`
1129 * `use lib 'path';` now works
1131 == Tests, Examples and Documentations
1133 * Some new test and several tests refactored, we now have 7200+ tests
1134 * Pugs Apocryphon 2 improved and edited in `docs/02Internals.pod`
1135 * Many improvements to `util/perl6.vim` to handle new features
1136 * More Haddock documentation added to the Haskell source
1137 * New IRC bot `evalbot` added to `examples/network`
1138 * New JAPH for Italian Perl Workshop added in `examples/japh`
1139 * Perl 6 port of Perl Power Tools begun in `examples/ppt`
1140 * Some new additions and cleanup of the cookbook
1141 * `examples/network/screen-nodestatus.p6` added to monitor hosts in GNU screen
1143 == Bug Fixes
1145 * Hyper-reduction prefix operators such as `[+]«` are now parsed
1146 * Single-character class names were not parsed correctly
1147 * Stringifying a Rule no longer throws an uncatchable exception
1148 * Use of undeclared types in signatures no longer breaks MMD
1149 * `(1 => 2 ?? 3 :: 4)` now always constructs a pair
1150 * `Foo.bar()` now dispatches to `&Foo::bar` instead of to `&Class::bar`
1151 * `Foo.isa(Foo)` no longer means `Class.isa(foo)`
1152 * `pugs -MFoo` now means `use Foo`, not `require Foo`
1153 * `readline()` now reads utf-8
1154 * `times` now really works on Win32
1155 * `when .isa(Foo)` is no longer parsed as `when $_ ~~ .isa(Foo)` now
1158 = Changes for 6.2.5 (r3794) - May 24, 2005
1160 == Bundled Modules
1162 * Fix one broken test from the `Set` module
1165 = Changes for 6.2.4 (r3790) - May 24, 2005
1167 == Pugs Internals
1169 * All infix operators now receive reduction forms, such as `[+]`
1170 * All operators now receive hyperised forms, such as `>>+<<` and `~<<`
1171 * Dereferencers: `@{...}` and `@$var`
1172 * Experimental support for `coro { ... }`, `coro name { ... }` and `yield()`
1173 * Experimental support for `lazy {...}`
1174 * External Parrot for Rules is now kept in a single process
1175 * Inheritance: `class Foo is Bar` and `class Foo does Bar`
1176 * Interactive shell commands normalised to always begin with `:`
1177 * MMD handling is now more sophisticated, and `$.chained.attr.methods` works
1178 * Much better error messages, with cascading stack trace
1179 * New `./method` syntax implemented
1180 * Objects numify to a unique value accessible with `$obj.id()`
1181 * Parrot compiler backend now handles namespaces and method calls
1182 * Parsing of hierarchical return types: `sub foo returns Hash of Str`
1183 * Private attributes: `has $:foo` now generates private accessors
1184 * Private methods: `method :foo ()` and `$obj.:foo`
1185 * Switch to sum-of-inheritance-level distance for MMD dispatch on invocants
1186 * Symbolic references: `$::(...)` and `$::some::("var")::($bar)`
1187 * User-defined symbolic infix, postfix and prefix unary functions
1188 * `$?CLASS` and `$?PACKAGE` works; `$?ROLE` currently works as `$?CLASS`
1189 * `&code.name` and `&code.arity` added
1190 * `FIRST {...}` and `my $x = FIRST {...}` support
1191 * `INIT {...}` and `CHECK {...}` blocks in void context and as rvalues
1192 * `OUTER::` scope implemented
1193 * `do {...}` literal added
1194 * `gather {...}` and `take()` implemented
1195 * `submethod BUILD` is called for each parent class as well as the class itself
1196 * `time()` now returns a fractional number
1197 * `try {...}` literal allowed at expression level
1198 * `warn()`, `uniq()`, `fail()`, `times()` implemented
1200 == Bundled Modules
1202 * `Inline::Pugs` and `pugs` module to allow Perl 6 in Perl 5 programs
1203 * `Locale::KeyedText` re-added (this was our first contributed module)
1204 * `Net::IRC`, OO version added
1205 * `Perl::MetaModel`, prototype of Perl 6 OO meta-model in Perl 6 OO
1206 * `Set::Junction` and `Set::Hash` added as implementation backends to `Set`
1207 * `Set` now has many overloaded operators
1208 * `Test::Builder`, with Perl 6 objects (parses, and mostly works -- see tests)
1209 * `Tree::Simple`, renamed to `Tree` and converted to OO
1210 * `Test::cmp_ok` now gives better diagnostic messages
1211 * `fp` module added for functional programming
1213 == Tests, Examples and Documentations
1215 * Many new tests; several tests refactored; we now have 5600+ tests
1216 * Hangman IRC bot created from `hangman.p6`
1217 * IRC logfile to HTML converter added
1218 * Initial sketch of Pugs Apocryphon 2 in `docs/02Internals.pod`
1219 * Much work on internal Haddock Haskell documentation
1220 * OO Wizard RPG game added in `examples/games/`
1221 * Parrot is now included in the Pugs Live CD
1222 * Perl 6 quick reference documents added to `docs/quickref`
1223 * Perl6::Rules test suite incorporated under `t/rules/`
1224 * Replaced `force_todo()` with `:todo`
1226 == Bug Fixes
1228 * Bare blocks containing `$_` are now executed correctly
1229 * Correct parsing for user-defined nullary functions
1230 * Hash and array sub parameters are now read-only by default, same as scalars
1231 * Post-term invocation in interpolation no longer eats trailing whitespace
1232 * Slurpy hash parameters no longer count as nonslurpy during arity matching
1233 * Type-to-type smartmatch, e.g. `Int ~~ Num`, now works
1234 * `$obj.method($arg1, $arg2)` now dispatches based on all the arguments
1235 * `foo 3 and foo 4` is now parsed as two separate function calls
1236 * `loop (;0;) {...}` will no longer execute the loop body
1237 * `map({...} @list)` is no longer valid syntax
1238 * `next` now re-evaluates condition in `loop` constructs
1239 * `returns Foo::Bar` from subs/methods now works
1240 * `split//` now attaches the submatches to the resulting list
1241 * `state $x = 42` now only assigns `$x` once
1242 * `system()` returns proper exit codes
1245 = Changes for 6.2.3 (r3111) - May 12, 2005
1247 == Pugs Internals
1249 * Pugs can now embed Parrot or use an external `parrot` executable
1250 ** Under embedded mode, Pugs is a registered Parrot compiler
1251 ** `eval_parrot` and `require_parrot` builtins for running PIR code
1252 ** `pugs -BParrot` can compile Perl 6 program to PIR and run it in-memory
1253 * Perl 6 Rules support via Parrot/PGE:
1254 ** Named rules and subrule support
1255 ** The former `$0` (entire match) is now `$<>`
1256 ** `$0` is now the same as `~$/[0]`, i.e. the same as Perl 5's `$1`
1257 ** `.from`, `.to`, `.matches`
1258 ** `//`, `rx//`, `m//`, `rule{}`
1259 ** `s///` and `//` in statement level operates on `$_`
1260 * Basic Object support:
1261 ** Accessors generated for public attributes
1262 ** Identity operator: `=:=`
1263 ** Method chaining: `$foo.bar().baz()`
1264 ** Method invocant: `method foo ($self: $x)` and topicalized as `$_`
1265 ** Public and private attributes, as well as `has $.attr is rw`
1266 ** `$obj ~~ Class` support
1267 ** `$obj.clone()` support
1268 ** `class Foo {}` works (no inheritance yet)
1269 * Experimental `eval_yaml()` support to parse YAML streams
1270 * Experimental support for prefix reduce metaoperator `[+]`
1271 * Hyper operators now works on arrays too
1272 * Improved `.perl()` format for array, hash and pair objects
1273 * Much faster random access to arrays; it's now O(1) instead of O(n)
1274 * Much improved MMD support
1275 * New `is lazy` trait for parameters
1276 * Refactoring of large Haskell modules to improve compilation speed
1277 * Support for building a profiled Pugs
1278 * Undef in grouped lhs: `my ($x, undef, $y) = 1..3;` is now legal
1279 * `$thread.kill`, `$thread.detach`, `$thread.join`
1280 * `%hash.pick`, `@array.pick` and `(list).pick`
1281 * `reduce` primitive
1282 * `state $var` implemented
1283 * `system(Str: List)` and `exec(Str: List)` on Unix platforms
1285 == Bundled Modules
1287 * All modules have their own `ChangeLog` now
1288 * `Algorithm::TokenBucket`, with closure objects
1289 * `Config::Tiny`, with closure objects
1290 * `Kwid::Event::Parser`, with procedures
1291 * `Net::IRC`, with closure objects
1292 * `Perl::MetaModel`, prototype of Perl 6 OO meta-model in Perl 6
1293 * `Pod::Stream::Parser` renamed to `Pod::Event::Parser` and added more functionality
1294 * `Set`, with Perl 6 objects
1295 * `Test::Builder`, with Perl 6 objects (parses, but does not work yet)
1296 * `Tree::Simple`, with closure objects
1298 == Tests, Examples and Documentations
1300 * Many new test and several tests refactored, we now have 4921 tests
1301 * Documentation for `hangman.p6` added in `examples/games/hangman.pod`
1302 * New "Monads in Perl 6" example in `examples/functional/monads.p6`
1303 * Script to generate a Pugs Live CD in `util/livecd`
1304 * Several IRC bots added to `examples/network` including svnbot and logbot
1305 * TODO tests now use `:todo<reason>` for better reporting
1306 * The first Perl 6 poem in `examples/poetry/`
1308 == Bug Fixes
1310 * Logical short-circuiting operators no longer flattens references
1311 * Prohibit Array and Hash dereference on plain values
1312 * Slurpy context no longer flattens
1313 * Stringifying IO handles is no longer fatal
1314 * `$*PID` now works on Win32
1315 * `%*ENV` now completely works on Win32
1316 * `(a => 3+4)` is now parsed as `(a => (3+4))`, not `(a => 3)+4`
1317 * `any().pick` no longer dies
1318 * `my @x = [1]; @x[0][0] = 2` should now work
1319 * `next` in nested `for {}` blocks no longer escapes the outer loop
1320 * `to => 123` parses again; arrow pairs now always trumps unary functions
1321 * `{}` in P5 rules is no longer closure interpolation
1324 = Changes for 6.2.2 (r2604) - May 1, 2005
1326 == Pugs Internals
1328 * Many performance speed-ups, including:
1329 ** New, much much faster implementation type for Pad
1330 ** Replace Data.HashTable with STM Map
1331 ** Restructured the Eval monad to be reusable on compilers and interpreters
1332 ** Position handling and statement reduction logic re-written
1333 ** Add strictness to core Monad and object structures
1334 * Functions declared as unary are now parsed as such
1335 * Global subroutine declaration is now visible in the whole file
1336 * Improved Parrot compiler backend support for mod_pugs
1337 * Much better error messages, tracking source file range for expressions
1338 * New loop control routines: `next` and `redo`
1339 * On Win32, `-s` and `-z` now work correctly
1340 * Optimized build is now default; use `make unoptimized` to turn it off
1341 * Pugs can now build on Cygwin
1342 * `#line 123` and `#line 123 "filename"` both work
1343 * `&infix:<%>` raises trappable exception when modulus is zero
1344 * `(undef, $x) = (1, 2)` is now supported
1345 * `@array.end` implemented
1346 * `BEGIN {...}` blocks now work on both statement-level and term level
1347 * `for @a { say }` is now parsed as `for @a -> $_ is rw { say }`
1348 * `for @a -> () { ... }` now consumes one element at a time
1349 * `my $var ::= expr` works
1350 * `print (4)+4` now prints 8, because the whitespace is no longer skipped
1351 * `use Module;` supported and happens at `BEGIN` time
1352 * `|=` `^=` `&=` for junctions
1354 == Tests, Examples and Documentations
1356 * Many new tests and cleanup of older tests, we are now at 4600+ tests
1357 * API documentation available in `docs/haddock/`
1358 * Added an example of IRC bot into `examples/network`
1359 * Added simple POD parser into `ext/Pod-Stream-Parser`
1360 * Added support for generating Haskell documentation with `make haddock`
1361 * Added the tic-tac-toe game from perlmonks into `examples/games/`
1362 * Parallel `make smoke` when `%ENV<PUGS_TESTS_CONCURRENT>` is greater than 1
1363 * Patched local `Test::Harness` to display number of TODO tests
1364 * Progressive powerset generator from perlmonks added to `examples/`
1365 * Smoke testing tool now includes timing data in YAML harness data
1366 * German talk /Perl 6, genau jetzt!/ finished
1368 == Bug Fixes
1370 * Constant references now automatically dereference when used in rvalue context
1371 * Junctive `^` should join junctions instead of autothread them
1372 * Lone block does not count as /simple expression/ anymore
1373 * Repair single statements in shell to preserve lexical context
1374 * Repair the `list` context hinter
1375 * The dot in `123.ref` is now parsed correctly as `(123).ref`
1376 * `$_` in subroutine signatures is no longer slurpy by default
1377 * `$x = \$x` no longer causes an infinite loop
1378 * `NaN` calculations no longer causes infinite loop
1379 * `last if foo` now means `last() if foo()` instead of `last(if(foo()))`
1380 * `one(1,1).pick` bug fixed; it should return `undef`
1381 * `splice([], 1)` no longer causes division by zero errors
1384 = Changes for 6.2.1 (r2288) - April 24, 2005
1386 == Pugs Internals
1388 * Unification of the quoting code, most quoting constructs now work
1389 ** <<>> now works
1390 ** Regular expressions are parsed as `qq//`, but without backslash protection
1391 ** Hash subscripts using `<>` or `<<>>` are parsed as general quotations
1392 ** This means interpolation, etc. is done just like `q:w` or `qq:ww`
1393 ** `$<delim>` not interpolate in quoting constructs
1394 ** `$)`, `$]`, `$#` and `$<ws>` do not interpolate in `rx:P5//` constructs
1395 * Assigning a `List` into a `Scalar` now vivifies it into an `Array`
1396 * Assigning to pairs now works as expected
1397 * Autoextracted `$_` is now `rw` by default
1398 * Better handling for size extensions and `exists()` for negative indices
1399 * Bindings implemented for multiple variables
1400 * Experimental support for `eval_haskell()` builtin
1401 * First stab at a lexical `$*CWD` variable
1402 * Index in slices now defaults to List: `@a[func_returns_array()]` now works
1403 * Initialize readline properly in interactive shell
1404 * Junctive types in subroutine signatures `sub foo (Str|Array)`
1405 * New builtins: `>>~<<`, `kill()`, `splice`, `readdir()` (list context only)
1406 * Pairs are now always objects and never values
1407 * Passing too many slurpy arguments is now an exception
1408 * Regexps now support `:P5` and `:Perl5` as well as `:perl5`
1409 * Storing into negative array elements now works
1410 * The `Any` parameter type no longer inhibits juctive autothreading
1411 * Variables in rvalue context no longer returns its references
1412 * `%h<>` now acts just like `%h{}` in both lhs and rhs
1413 * `%h<x>` now means `%h{'x'}` instead of `%h{'x',}`
1414 * `'key' => val` now works as named param just like `key => val` did
1415 * `(sub {3} | sub {2})()` implemented
1416 * `:P5` flags now work as `:P5<imsgx>` and `:i` `:g` works too
1417 * `:l filename` no longer needs double quotes in the Shell
1418 * `<>` (list quoting) is now always in list context
1419 * `is rw` and `is copy` implemented in full
1420 * `list()` now actually imposes list context
1421 * `want()` has been implemented, returning a simple string
1423 == Tests, Examples and Documentations
1425 * Many new tests and cleanup of older tests, we are now at 4500+ tests
1426 ** removed all usages of todo_* functions since the are now deprecated
1427 * Added `isnt()`, `unlike()`, `skip_rest`, `throws_ok` functions to `Test.pm`
1428 * Added some Perl 6 related talks in `docs/talks`
1429 * Added the `make smoke` target to `Makefile`
1430 * Additions and improvements to the `util/catalog_tests.pl` scripts
1431 * Improvements to `examples/network` and added README file
1432 * Improvments to the `util/p5_to_p6.pl` script
1433 * Major refactoring of the Test.pm module (see `ext/Test/ChangeLog` for details)
1434 * Memory game, first web application written in Perl 6
1435 * New Perl 6 tutorial generator ported to Pugs in `examples/tutorial_gen/`
1436 * New naive baysian text classifier add in `examples/naive_bayesian`
1437 * New quote generator script in `examples/motd`
1438 * Params are now loaded on-demand in `CGI.pm` to take advantage of encoding
1439 * Several new additions to the Perl 6 Cookbook
1440 * Svn graphing script added to `util/`
1441 * Test smoke scripts converted to use `Test::Tap::Model`
1442 * The `fp.p6` file has been broken into seperate files in `examples/fp/`
1443 * UTF-8 URL decoding added to `CGI.pm`
1445 == Bug Fixes
1447 * Accessing `@array[1000]` (without setting it) no longer extends `@array`
1448 * Code blocks as subroutine arguments now results in correct arity
1449 * Code objects now returns the correct subtypes
1450 * Comma is no longer flattened as arguments for infix and postfix functions
1451 * Corrected `chmod` prototype
1452 * Fixed infinite bug when evaluating `+((1|2).values)`
1453 * Fixed passing references into bound variables in subroutines
1454 * Fixed segfault with `:r` in interactive shell
1455 * Hyper operators now extends to the longer, not shorter, lists
1456 * Inf/NaN handling for `**` now works
1457 * Manpage for `Perl6::Pugs` now generated correctly
1458 * RValues at the right hand of array assignment are flattened to prevent loops
1459 * Restore `%h<str> = want()` to impose string context on rhs
1460 * Setting `$*CWD` to invalid directory is no longer fatal
1461 * Slurpy params now applies *-flattening to its arguments
1462 * `$x = 1|2; $x = 3` no longer treats `1|2` as a constant
1463 * `%h<a>` or `%h{'a'}` no longer eats trailing spaces interpolated strings
1464 * `(1,(2,3))` in scalar context is now `[1,[2,3]]`
1465 * `**` no longer truncates the exponent to integer
1466 * `=` now assigns correct slurpy context to rhs
1467 * `=cut` without a newline at EOF is now parsed correctly
1468 * `return() if 1` now works correctly
1471 = Changes for 6.2.0 (r1921) - April 13, 2005
1473 == Pugs Internals
1475 * Major refactor of ITypes subsystem, we now have:
1476 ** Nested structures: `$a{1}[2]{3}`
1477 ** Autovivification: `$a{1}[2]{3} = <b>`
1478 ** Tied magic: `%ENV<USER>`
1479 ** Proxy scalars: `%ENV<PATH> ~= '/tmp'`
1480 ** Slice assignment: `@x[1,2] = <a b>`
1481 ** Anonymous arrays: `[1..10][0] = 0`
1482 ** Lazy IArray structures: "Infinite lists, constant time"
1483 ** Infinite slices: `@x[1...]`
1484 ** and much much more ...
1485 * Experimental support for link external Haskell libraries
1486 ** One such module is SHA1.pm: http://tpe.freepan.org/repos/ingy/SHA1/
1487 * New builtins:
1488 ** `sum`, `log`, `log10`, `sign`, `pi`, `tan`, `cos`, `atan`
1489 ** `zip`, `hash`, `pair`, `isa`, `bytes`, `chars`, `codes`, `graphs`
1490 * New type specific builtins;
1491 ** `.kv`, `.pairs`, `.delete`, `.exists`
1492 ** `.pick`, `.keys`, `.values`
1493 * Several file test operators
1494 ** `-r`, `-w`, `-x`, `-e`, `-z`, `-s`, `-f`, `-d`
1495 * Support for `$*UID`, `$*EUID`, `$*GID`, and `$*EGID` on *nix
1496 * Stacked file test operators now (mostly) work
1497 * Added `is rw` trait for subroutine parameters
1498 * `$*PID` now works on *nix systems
1499 * Several command line switches implemented: `-I` `-p` `-n` and more
1500 * `s:perl5/.../{ <code> }/` works correctly
1501 * Type casting errors are now more descriptive
1502 * `require ""` now works on UTF-8 files
1503 * Regex substitution is now UTF-8 safe
1504 * `sort {}` now works
1505 * Some support for the /splat/ star `*`
1507 == Tests, Examples and Documentations
1509 * Many new tests and cleaning up of older tests, we now have 4200+
1510 * `examples/games/hangman.p6` added, with `AUTHORS` as the dictionary file
1511 * `READTHEM` added; recommended reading for aspiring Pugs hackers
1512 * The Perl 6 Cookbook is well underway at `examples/cookbook/`
1513 * Working perl6 modules added to `ext/`
1514 ** CGI.pm
1515 ** lib.pm
1516 ** HTML::Entities
1517 * Several Working Drafts added to `docs/`
1518 ** Apocalypse 20 - Debugging
1519 ** Synopsis 26 - Perl Documentation
1520 ** Synopsis 28 - Special Variables
1521 ** Synopsis 27 - Perl Culture (with CPAN drinking game rules)
1522 ** Synopsis 29 - Builtin Functions
1523 * Early work on Perl 6 Object System in `docs/class/`
1525 == Bug Fixes
1527 * Parens no longer required for; `last()` and `return()`
1528 * Fixed issue with binding invocant parameters
1529 * Fixed parsing issue with `lc $, $y`
1530 * `$_` now behaves correctly in most cases
1531 * `exit()` now triggers `END {}` correctly
1532 * `undef $x` now works correctly ($x is rw)
1533 * Fixed parsing of default parameters: `sub foo (+$x = 3, +$y = 4)`
1534 * `say` and `print` now default to `$_`
1535 * `map { ... } @list` now parses correctly
1536 * `loop { ... }` now works correctly
1537 * `int(3) + 4` now parses correctly
1538 * Fix parsefail bug on false unaries
1539 * `for (@list)` no longer flattens `@list`
1540 * `$var.method $param` is now illegal: use `$var.method($param)`
1541 * `readline()` in list context is no longer evaluated lazily
1542 * `$list.join('|')` now works
1543 * `xor` and `^^` now returns the true operand instead of `bool::true`
1544 * Named bindings to `%_` repaired
1547 = Changes for 6.0.14 - April 4, 2005
1549 == Pugs Internals
1551 * We now require GHC 6.4 on all platforms
1552 * Added socket primitives: `listen()`, `connect()`, `accept()`
1553 * Added thread primitives: `async()`, `yield()`
1554 * Added string primitives: `chr()`, `ord()`, `hex()`, `split()`
1555 * Adverb pairs: `:key(123)`, `:key<abc>`, `:key[1,2,3]` and `:key`
1556 * `pugscc` may now be invoked outside the pugs source tree
1557 * `slurp()` now works on IO handles
1558 * Non-interpolated `q//` literals
1559 * Tentative `%?CONFIG` hash
1560 * `pugs -V:configvar` now displays that config variable
1561 * Command line improvements (`-I`, `-l`, `-e`, etc.)
1562 * Minimal IMC compiler as `src/IMC.hs`
1563 * Began work on GADTs; the Pad now holds `Symbol Val` types only
1564 * Support definition and invocation of subs with namespaces
1566 == Tests, Examples and Documentations
1568 * Many new tests: we have around 3850 now
1569 * `modules/` have been relocated to FreePAN. See `modules/README`
1570 * `t/Synopsis/` have been relocated to `Perl6::Bible` on CPAN
1571 * HTML generated by testgraph now responds to mouseover
1572 * New autosmoker script added
1573 * Many cross-referencer improvements
1574 * Normalize all `t/` to begin with `#!/usr/bin/pugs`
1575 * `VICTUALS` file added on April Fools
1576 * Debian package scripts in `debian/`
1577 * Updates on the Vim syntax file as `util/perl6.vim`
1578 * `Pugs::MakeMaker` is renamed to `Perl6::MakeMaker`
1579 * First Pugs obfuscation in `examples/obfu/`
1580 * HTTP server and client examples in `examples/network/`
1582 == Bug Fixes
1584 * `~~` now takes variables on the right hand side
1585 * Correct installation locations for `ext/` modules
1586 * `{ block }` in `qq` and `rx` no longer skips trailing whitespaces
1587 * `pugs -e` may now use `@*ARGS` in the one-liner
1588 * `rx:perl:g` no longer ignores the `:g`
1589 * `$:x` and `$.x` now parsed as variable names
1590 * Readline support is correctly probed on `Makefile.PL` time
1591 * Mimick Perl 5's behaviour for function that defaults to `$_`
1594 = Changes for 6.0.13 - March 27, 2005
1596 == Pugs Internals
1598 * Support for `given`, `when` and `elsif` statements
1599 * Support for Perl5 style `-I` on the command line
1600 * Command line equivalents of shell commands `:i` and `!`
1601 * Regex now supports `s:perl5///` and `s:perl5:g///`
1602 * `$1`, `$2` etc can be used in `s:perl5:g///` substitutions
1603 * Experimental *pugscc* backends generating limited Parrot and Haskell code
1604 * Refactored the /VSub/ type to support currying
1605 * Support for currying: `&foo.assuming(param => 'bar')`
1606 * New file test primitives: `-d` and `-f`
1607 * New logical primitive: `?|`
1608 * Experimental support for `eval_perl5` (not built by default)
1609 * Experimental Inline support; see `ext/SHA1` for example
1610 * New magicals: `$*EXECUTABLE_NAME` and `$*PROGRAM_NAME`
1611 * Several numeric builtins: `atan2`, `cos`, `sin`, `sqrt`, `exp`
1612 * Beginings of a Pugs class meta-model
1614 == Test, Examples and Documentations
1616 * New test for junctions, regexp and more; about 3200 tests now
1617 * Added 200+ new TODO tests for objects in `t/oo/`
1618 * Added 20 new Perl 5 modules ported to Perl 6
1619 * Added `t/README`, `modules/README` and `modules/PORTING_HOWTO`
1620 * Much work on the test-cataloger and Synopsis cross-referencer
1621 * Work on plan for smoke testing framework using *YAML* and *Test::Harness*
1622 * Work on HTML output gathered from *Test::Harness* YAML output
1623 * Actual working port of most of *File::Spec* complete with tests and docs
1624 * Added support for outputing test logs with *Test.pm*
1625 * Added documentation to *pugscc*
1626 * Several TODO tests for command line options
1627 * `fix_authors.pl` now handles UTF8 input
1628 * New golf-based tests in `t/examples/golf.t`
1629 * Added `examples/mandel.p5` for benchmarking against `mandel.p6`
1630 * The first JAPH for Pugs in `examples/japh/`
1632 == Bug Fixes
1634 * Numification now uses the same lexer as numeric literals
1635 * Passing pairs to named parameters works
1636 * Fixed 2-element lists to be proper pairs
1637 * Fixed some error reporting issues in *Test.pm*
1638 * `$!` now has the correct value after `eval`
1639 * `END {...}` now runs after `die`
1640 * Hash keys are now strings
1641 * Contextual logicals like `+^` and `~^` are parsed correctly
1644 = Changes for 6.0.12 - March 21, 2005
1646 == Pugs Internals
1648 * We now require GHC 6.4 on Win32
1649 * Perl5-compatible regular expressions as rx:perl5/.../
1650 * Unicode identifiers now work across all platforms
1651 * Smartmatch ~~ for regex
1652 * Capturing variables as $/.[], $0, $1, $2
1653 * Nested outward CALLER::CALLER::CALLER:: scopes
1654 * x=, xx= and Y=
1655 * => now autoquotes left hand barewords
1656 * ?? :: now parses correctly
1657 * New primitives: index(), rindex(), substr(), sort(), true()
1658 * New primitives: lcfirst(), ucfirst(), lc(), uc(), split()
1659 * New primitives: pick(), values(), nor
1660 * The interactive shell now preserves lexical variable declarations
1661 * String numification now uses the same lexing rule as numeric literals
1662 * Kludgy hack for &sub.goto() now works
1663 * :l in interactive shell for loading modules
1664 * More experimental shell commands like :i and !
1665 * Symbol table now contains Vals instead of Exps
1667 == Tests, Examples and Documentations
1669 * Massive reorganization for t/ hierarchy; we have 2450 subtests now
1670 * Test coverage catalog utility in util/catalog_tests.pl
1671 * New p6ified CPAN modules: Algorithm::Dependency, File::Spec
1672 * Core documentations moved into ext/Pugs-Documentation/
1673 * Locale::KeyedText is made more perl6ish with subtypes
1674 * Test.pm has been massively refactored, and now has its own test suite
1675 * isa_ok(), eval_ok() and eval_is() in Test.pm
1676 * perlpodspec.kwid, describing POD document model and dialects.
1677 * perlkwidspec.kwid, specification for the Kwid dialect of POD
1678 * PA01.kwid, Kwid version of Pugs Apocryphon 1
1679 * Perl5-Kwid, Perl 5 implementation of the Kwid language
1681 == Bug Fixes
1683 * Infix junction constructors no longer falltens its operands
1684 * Mutable variables are now properly pretty-printed
1685 * "pugscc" was broken on case-sensitive filesystems
1686 * last() no longer work as return() outside loops
1687 * Pugs could not install when perl5's sitelib path did not contain "perl"
1688 * := binding did not preserve the lexical scope at the binding site
1689 * Hanoi.p6 was broken due to premature binding of subroutine parameters
1690 * "&sub.foo" no longer attempts to interpolate
1693 = Changes for 6.0.11 (r690) - March 14, 2005
1695 == Pugs Internals
1697 * Ported to GHC 6.4 final
1698 * Source code is now always treated as UTF-8
1699 * Unicode variable names and subroutines now works, if GHC
1700   is compiled with unicode support
1701 * We no longer look for Perl6::lib::* namespace in Perl 5;
1702   Pugs now has its own library path independent from Perl 5
1703 * New primitives: scalar(), list(), reverse().
1704 * Infix Y (and its UTF8 form)
1705 * $! is now set after an eval call
1706 * Stub implementation for ~~ and !~ operators
1707 * "make optimized" and "make profiled" targets
1708 * Assignment to array slices
1709 * Assignment now copies variables in RHS, instead of aliasing them
1710 * Declaration of multiple variables with my()
1711 * try {...} works
1712 * Hash stringification
1713 * Lone block without trailing semicolon is parsed correctly
1714 * time() now counts seconds from 2000-01-01 00:00:00
1715 * Assignment operators like .=, //= and ||= etc
1716 * Postfix conditionals now works inside expressions
1717 * --help and -c command line options
1718 * Experimental support for "pugscc", which compiles Perl 6 code
1719   into stand-alone executables
1721 == Tests, Examples and Documentations
1723 * Much more extensive TODO tests; we have 1477 now
1724 * Sample Perl 6 modules under modules/, including Sample-Module and
1725   Locale-KeyedText (ported from Perl 5 on CPAN)
1726 * Kwid version of PA01; updated Chinese translations
1727 * One can now build Pugs with Perl 5.6
1728 * examples/sendmoremoney.p6 now really works
1729 * A new, much prettier banner ASCII art
1730 * New junction examples in examples/junctions/
1731 * New golf-based examples in examples/golf/
1732 * Include IRC nicks and UTF8 names in AUTHORS
1733 * Some releng and utility scripts under util/
1735 == Bug Fixes
1737 * In pointy subs, -> () {...} and -> {...} are now distinguished
1738 * require() now reports errors correctly
1739 * Magical $a++ when $a is a string should not return a numified form
1740 * int() now properly truncates, instead of rounds, the operand
1741 * Array and hash variables inside qq strings now won't interpolate without
1742   explicit brackets, as specced in S02
1743 * my $a == $b no longer parses are my $a = =$b
1744 * Nested ?? :: now parses correctly, even inside brackets
1745 * Postfix ... works again
1746 * [...] is now evaluated in list context
1747 * Duplicate occurence of implicit params like $_ and $^x now works correctly
1748 * =<> now reads the first file in @*ARGS if there is a @*ARGS; it is a TODO
1749   to make it read all files in @*ARGS
1750 * List associativity now works again
1751 * $?CALLER:: variables in subroutine parameters and defaults are
1752   now both evaluated in the caller's scope
1755 = Changes for 6.0.10 - March 5, 2005
1757 == Pugs Internals
1759 * Massive `-Wall` cleanup
1760 * Some work on Pugs extension mechanisms (XS for Pugs)
1761 * Complete reworking of the build system
1762 * Support for basic read, write, append I/O
1763 * Added `system()`, `chmod()`, `chop()` and `chomp()`
1764 * Pretty printing now works
1765 * Added the beginings of a Config module
1766 * Ported to GHC 6.4 pre-release
1767 * More works on junctions
1769 == Tests, Examples and Documentations
1771 * Test, tests and more tests, we now have over 1050
1772 * Added several tests for unimplemented features
1773 * Added tail recursive nested worker multisubs into `fp.p6`
1774 * New example: `hanoi.p6`
1775 * Several new junctions examples
1776 * Switched most documentations to the Kwid format
1777 * zh-cn and zh-tw translations of the Apocryphon
1778 * Haskell source documentation begun
1779 * Kwid documentation for `Test.pm`
1781 == Bug Fixes
1783 * Fixed double-evaluation bug in `say($a++)`
1784 * Fixed `@a` interpolation bug
1785 * Postfix `--` now returns the value instead of numified value
1786 * Lone bare blocks in statement level are now always executed
1787 * Fixed `grep`/`map`/`push`/`unshift` parsing so they are properly binOp now
1788 * Fixed prefix function parsing bug that eats more parens than it should
1791 = Changes for 6.0.9 (r335) - February 28, 2005
1793 * First Perl 6 module: `Test.pm`
1794 * First Pugs Apocryphon: `docs/01Overview.html`
1795 * More than 600 unit tests, with a comprehensive coverage
1796 * Relicensed under GPLv2 and Artistic2.0b5
1797 * New flags: `--version`, `-v`, `-c`
1798 * New examples: `examples/fp.p6`, `examples/shuffle.p6`
1799 * New syntaxes: `?? ::`, `our()`, chained `=>`, `END{}`, `=begin END`, `unless`
1800 * New primitives: `defined()`, `unlink()`, `ref()`, `join()`, `require()`, `int()`
1801 * New magicals: `$?SUBNAME`, `%*ENV`, `&?BLOCK`, `&?CALLER_CONTINUATION`, `@*INC`
1802 * New literals: `\d1234`, `0d1234`, `qq[]`, `qw[]`
1803 * Interpolation in double-quoted strings
1804 * Hashes and subscripting
1805 * Bare blocks now assumes outer scope's lexical pad
1806 * Bare blocks in statement level is now always executed
1807 * Closures closes properly; errors are propagated upwards
1808 * A first draft of /Kwid/ documentation format
1809 * A first draft of builtins declarations
1812 = Changes for 6.0.8 - February 21, 2005
1814 * New example code snippet: `examples/quicksort.p6`
1815 * Unit tests ported from th Perl5 tree
1816 * Hashes, Pairs and their access methods
1817 * Much more robust casting between arrays, lists and hashes
1818 * Fixed harness output problem on older perls
1819 * Many Posix-based IO primitives
1820 * Precedence for builtin unary/list functions are parsed correctly
1821 * `unless` construct
1822 * New primitives: `join`, `split`, prefix `++` and `--`
1823 * `+>>` etc changed to `+>` etc
1824 * Stacking multiple prefix and postfix operators now works
1825 * `@*INC`, `&?SUB`, `CALLER::`
1826 * Tests for the /perlego/ dialect
1827 * User-defined function applications now takes arbitary expressions
1828 * Deep recursion detection
1831 = Changes for 6.0.7 - February 18, 2005
1833 * Beginning of synopses-based unit tests
1834 * Two code snippets that runs: `examples/life.p6` and `examples/mandel.p6`
1835 * Code literals -- /sub/, /pointy/ and /bare/ variants all works
1836 * Lexical subroutine declarations via `my sub`
1837 * The `say`, `exit`, `die`, `time`, `open`, `close` primitives
1838 * `Bool.perl` now prints correct literals
1839 * Blocks under void contexts now evaluates automatically
1840 * The `...` (dotdotdot) literal
1841 * Errors are propagated upward using shiftT
1842 * Postfix `++` and `--`
1843 * Ternary `?? ::`
1844 * Assignment to mutable variables and to array slices
1845 * `loop`, `for` and `if` constructs
1848 = Changes for 6.0.5 - February 15, 2005
1850 * The `rand` primitive
1851 * Taking references of junctions no longer create a junction of references
1852 * Illegal divisions are caught
1853 * Chained comparison for four or more terms now works
1854 * Collapsing for /JuncOne/ into two sets: the `none` set and the `one` set
1855 * The evaluator now prints some helpful debugging messages
1856 * New parser logic merged from Michaud and Palmer's `Perl6.grammar`
1857 * Extra semicolon and whitespace in blocks are dealt with
1858 * Space around punctiation operators is now optional
1859 * The /Eval/ monad now supports `shift`/`reset`/`callcc`, lexical and dynamic scopes
1860 * Improved pretty-printing code for syntactic constructs
1863 = Changes for 6.0.4 - February 12, 2005
1865 * The `eval` primitive
1866 * Refactor junctive logic into `Junc.hs`
1867 * /JuncAny/ and /JuncAll/ now collapses operands of the same type correctly
1868 * /JuncOne/ now collapses into an empty set when operands contains duplicates
1871 = Changes for 6.0.3 - February 12, 2005
1873 * Formal parameters declaration and binding
1874 * Invocant-based multimethod dispatch
1875 * Optional(`?`), named(`+` and `++`), slurpy(`*`) parameters with defaulting
1876 * Extraction of higher-order placeholder variables
1877 * Proper semantics and extraction of `@_`, `%_` and `$_`
1878 * Global variables and subroutines: `&*foo`, `$*bar`
1879 * Context propagation from types of formal parameters
1880 * The `returns` / `is returns` trait
1881 * Trailing comma and semicolons are now allowed
1882 * Better handling of exponential primitives
1883 * &prefix: is now consistently added for user-defined subroutines
1884 * Junctions are now proper sets, instead of lists masqueraded as sets
1885 * New operators: `!!` and `nor`
1886 * The `all` junction builder now collapses nested junctions under it
1889 = Changes for 6.0.2 - February 9, 2005
1891 * User-defined subroutine with `$_` and `@_` as parameters
1892 * Variable binding
1893 * Context propagation
1894 * Multimethod dispatch
1895 * Subtype distancing and casting
1896 * Autothreading over chained comparison and multiarg functions
1897 * List associativity
1898 * Array references as literals
1899 * Flattening (slurpy) star
1902 = Changes for 6.0.1 - February 7, 2005
1904 * Fix building on Mac OS X
1905 * Characters in single quotes should not be escaped
1906 * Add one very basic test in `t/`
1909 = Changes for 6.0.0 - February 7, 2005
1911 * Initial CPAN release
1912 * Evaluation of most simple expressions
1913 * Junctions and chained comparisons
1914 * Interactive shell and `#!/usr/bin/pugs` support