root/ChangeLog

Revision 20276, 79.0 kB (checked in by Darren_Duncan, 6 months ago)

updated any other refs in Pugs repo from Muldis DB to Muldis Rosetta

  • Property svn:mime-type set to text/plain; charset=UTF-8
  • Property svn:eol-style set to native
Line 
1= Changes for 6.28.0 (rXXXXX) - June XX, 2007
2
3== Licensing Changes
4
5* The license for Pugs in general (not third-party components) is now
6simplified to be just the final Artistic 2.0, rather than the disjunction
7of the Artistic 2.0 beta 5 and the GPL.  Such a disjunction has no benefit
8since the Artistic 2.0 is GPL compatible on its own.  This said, the
9Artistic/MIT disjunction still exists where it did before.  So LICENSE/ now
10contains the text of the Artistic version 2.0 final rather than the text of
11the Artistic version 2.0 beta 5.
12
13* LICENSE/ now contains the texts of the GPL version 3.0 and LGPL version
143.0 (which were published on 2007 June 29th), rather than the GPL version 2
15and LGPL version 2.1.  All projects outside of third-party/ (which have
16their own copies of their licenses) which were licensed under some member
17of the GPL family allow the use of the newest versions, so there is no
18reason to also retain copies of older versions in LICENSE/.
19
20== Build System
21
22* The config file that you must make in order to receive credit for smokes
23is now named "smoker.yml" rather than ".smoker.yml"; this hand-made file
24is now not hidden, which is consistent with Pugs' "config.yml" nature.
25
26== Feature Changes
27
28=== Interactive Shell and Command-Line Flags
29
30
31
32=== Perl 5 Interoperability
33
34
35
36=== Lexical Syntax
37
38
39
40=== Declarators and Operators
41
42
43
44=== Blocks and Statements
45
46* Topicalisers for `if`, `elsif` and `else` blocks: `if EXPR -> $x {...}`
47
48=== Regexes and Grammars
49
50
51
52=== Modules and Routines
53
54
55
56=== Classes and Objects
57
58
59
60=== Built-in Primitives
61
62
63
64== Bundled Modules
65
66=== New modules
67
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
75
76
77=== [ext/Locale-KeyedText/]
78
79* Added French localization file lib/Locale/KeyedText/L/fr.pm
80
81=== [ext/<Foo>]
82
83
84
85== Test Suite
86
87=== [util/<foo>]
88
89
90
91=== [t/]
92
93
94
95== Examples and Utilities
96
97=== [examples/]
98
99
100
101=== [examples/<foo>]
102
103
104
105=== [misc/<foo>]
106
107
108
109== Documentation
110
111=== [docs/<foo>]
112
113
114
115== Perl 6 on Perl 5
116
117=== [perl5/Pugs-Compiler-Perl6/]
118
119
120
121=== [v6/]
122
123
124
125== Experimental projects
126
127=== [misc/pX/Common/P5_to_P6_Translation/]
128
129
130
131=== [misc/pX/Common/convert_regexp_to_six.pl]
132
133
134
135=== [misc/pX/Common/redsix/]
136
137
138
139
140= Changes for 6.2.13 (r14402) - October 17, 2006
141
142== Build System
143
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
147
148* Prompting for Parrot embedding is now disabled by default
149** Set the `PUGS_EMBED` environment variable to `parrot` to enable this
150
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
153
154== Feature Changes
155
156=== Interactive Shell and Command-Line Flags
157
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
162
163=== Perl 5 Interoperability
164
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`
170
171=== Lexical Syntax
172
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
196
197=== Declarators and Operators
198
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
217
218=== Blocks and Statements
219
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
240
241=== Regexes and Grammars
242
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
251
252=== Modules and Routines
253
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]`
270
271=== Classes and Objects
272
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
287
288=== Built-in Primitives
289
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
301
302== Bundled Modules
303
304=== New modules
305
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
310
311=== [ext/CGI/]
312
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
324
325=== [ext/HTTP-Server-Simple/]
326
327* The old non-standard `./method` syntax has been replaced with `self.method`
328
329=== [ext/Rosetta/]
330
331* Significant updates to the `lib/Rosetta/SeeAlso.pod` documentation
332
333=== [ext/Set-Relation/]
334
335* Renamed from [ext/Relation/]
336* Beginning of separate `Set::Tuple` and `Set::Relation` classes
337
338=== [ext/Test/]
339
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)
344
345== Test Suite
346
347=== [util/prove6]
348
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
352
353=== [util/smartlinks.pl]
354
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]
359
360=== [util/smokeserv/]
361
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
365
366=== [t/]
367
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
378
379== Examples and Utilities
380
381=== [examples/]
382
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
386
387=== [examples/games/dispatch_quiz.pl]
388
389* A game to test your knowledge about Perl 6's multi-dispatch system
390
391=== [misc/runpugs/]
392
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
396
397== Documentation
398
399=== [docs/Perl6/Perl5/Differences.pod]
400
401* Significantly updated and linked from [http://spec.pugscode.org/]
402
403=== [docs/Perl6/Spec/]
404
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]
408
409=== [docs/Pugs/Doc/]
410
411* New directory for Pugs-specific documentation
412* [docs/Pugs/Doc/Hack/Style.pod] - Haskell style guide for Pugs hackers
413
414=== [docs/talks/extraction.xul]
415
416* Slides from Nathan Gray's /Practical Extraction with Perl 6/ talk
417
418== Perl 6 on Perl 5
419
420=== [perl5/Pugs-Compiler-Perl6/]
421
422* The `v6.pm` implementation of Perl 6 now handles `./pugs -CPerl5` commands
423* See its own ChangeLog for more information
424
425=== [v6/]
426
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
430
431== Experimental projects
432
433=== [misc/pX/Common/P5_to_P6_Translation/]
434
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
438
439=== [misc/pX/Common/convert_regexp_to_six.pl]
440
441* Converts Perl 5 regex into Perl 6
442* See its own documentation for more information
443
444=== [misc/pX/Common/redsix/]
445
446* An Perl 6 implementation on Ruby 1.9+
447* See its own documentation for more information
448
449
450= Changes for 6.2.12 (r10930) - June 26, 2006
451
452== Licensing Changes
453
454* The [src/] tree and the `pugs` executable are now released under the
455permissive MIT license, in addition to Artistic and GPL
456* A new [third-party/] tree to hold bundled prerequisites originated
457from non-Pugs projects
458
459== New Perl 6 modules
460
461* [ext/Relation/] - Relation type for Perl 6 (incomplete)
462* [ext/Getopt-Std/] - Simple command-line parsing
463
464== Updated modules
465
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
476
477== Perl 6 on Perl 5 (under [misc/pX/Common/])
478
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}/;'
492
493== Test, Examples and Documentations
494
495* Restored this ChangeLog's entries for v6.0.0 thru v6.0.8, which were
496truncated 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
507
508== Feature Changes
509
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
529from 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
566
567== Bug Fixes
568
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
594
595
596= Changes for 6.2.11 (r8934) - Feb 1, 2006
597
598== Bundled Modules
599
600=== New Perl 6 modules
601
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)
605
606=== Updated modules
607
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
618
619=== Experimental modules (in misc/, not installed)
620
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
628
629== Test, Examples and Documentations
630
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
652
653== New Features
654
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
685
686== Bug Fixes
687
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
707
708== Backends
709
710=== JavaScript backend
711
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()`
722
723=== Parrot backend
724
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
731
732=== PIL^N backend
733
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
745
746=== Perl6-ObjectSpace
747
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/]
755
756
757= Changes for 6.2.10 (r7520) - Oct 10, 2005
758
759== Feature Changes
760
761=== Shared components
762
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
773
774=== JavaScript backend
775
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`
806
807=== Perl 5 backend
808
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`
818
819== Bug Fixes
820
821=== Shared components
822
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`
827
828=== JavaScript backend
829
830* Fixed evaluation order of assignments and bindings
831* Fixed `.values` and `.kv` to return aliases
832
833== Bundled Modules
834
835=== New Perl 6 modules
836
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
842
843=== Updated modules
844
845* Locale-KeyedText: Synchronized with p5 version 1.6.2
846* Test-Builder: new APIs, including test_pass() and test_fail()
847
848=== Experimental modules (in misc/, not installed)
849
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
856
857== Test, Examples and Documentations
858
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`
867
868
869= Changes for 6.2.9 (r6050) - Aug 4, 2005
870
871== Pugs Internals
872
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)
892
893== Bundled Modules
894
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`
907
908== Test, Examples and Documentations
909
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`
923
924== Bug Fixes
925
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/`
936
937
938= Changes for 6.2.8 (r5577) - July 13, 2005
939
940== Pugs Internals
941
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
971
972== Bundled Modules
973
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`
993
994== Test, Examples and Documentations
995
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`)
1006
1007== Bug Fixes
1008
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
1024
1025
1026= Changes for 6.2.7 (r4612) - June 13, 2005
1027
1028== Pugs Internals
1029
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)`
1043
1044== Bundled Modules
1045
1046* New modules added:
1047** `FindBin`
1048** `File::Find`
1049** `POE` (experimental)
1050** `URI::Escape`
1051* Extended tests for `Tree`
1052
1053== Tests, Examples and Documentation
1054
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
1065
1066== Bug Fixes
1067
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
1077
1078
1079= Changes for 6.2.6 (r4318) - June 2, 2005
1080
1081== Pugs Internals
1082
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`
1113
1114== Bundled Modules
1115
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
1130
1131== Tests, Examples and Documentations
1132
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
1142
1143== Bug Fixes
1144
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
1156
1157
1158= Changes for 6.2.5 (r3794) - May 24, 2005
1159
1160== Bundled Modules
1161
1162* Fix one broken test from the `Set` module
1163
1164
1165= Changes for 6.2.4 (r3790) - May 24, 2005
1166
1167== Pugs Internals
1168
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
1199
1200== Bundled Modules
1201
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
1212
1213== Tests, Examples and Documentations
1214
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`
1225
1226== Bug Fixes
1227
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