| 1 | | = Changes for 6.2.13 (r14380) - October 17, 2006 |
| 2 | | |
| 3 | | == Perl 6 Modules |
| | 1 | = Changes for 6.2.13 (r14400) - October 17, 2006 |
| | 2 | |
| | 3 | == Build System |
| | 4 | |
| | 5 | * Enabled Perl 5 embedding by default |
| | 6 | ** For Windows users, Perl 5.8.x is required |
| | 7 | ** Set the `PUGS_EMBED` environment variable to `noperl5` to disable this |
| | 8 | |
| | 9 | * Disabled prompting for Parrot embedding by default |
| | 10 | ** Set the `PUGS_EMBED` environment variable to `parrot` to enable this |
| | 11 | |
| | 12 | * Support for compiling with GHC 6.6 |
| | 13 | ** GHC 6.4.1+ is still supported, but will discontinue in te next release |
| | 14 | |
| | 15 | == Feature Changes |
| | 16 | |
| | 17 | === Perl 5 Interoperability |
| | 18 | |
| | 19 | * Array and Hashes now round-trips from Pugs to Perl 5 land and back |
| | 20 | * Importing functions from Perl 5: `use perl5:CGI <header param>` |
| | 21 | * Passing unboxed values across runtimes no longer leaks memory |
| | 22 | * When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings |
| | 23 | |
| | 24 | === Lexical Syntax |
| | 25 | |
| | 26 | * Capture literals: `\($bar: 1, 2, 3, named => 4)` |
| | 27 | * Interpolation of chained calls: `"$foo.meth.meth.meth.meth()"` |
| | 28 | * List comprehension: `for 0 < list(@x) < 10 {...}` |
| | 29 | * Named character escapes: `"\c[LATIN CAPITAL LETTER Y]"` |
| | 30 | * New magical variables: `$?COMPILER` and `$?VERSION` |
| | 31 | * POD directives: `=begin`/`=end` and `=for` now terminate without `=cut` |
| | 32 | * POD variables: `$=DATA` and `@=DATA` |
| | 33 | * Signature literals: `:($foo is copy = 42, $, @)` |
| | 34 | * `"\123"` and `"\03"` are now errors; write `"\d123"` and `"\o03"` instead |
| | 35 | * `$::x` now means exactly the same a `$x`, instead of `$*x` |
| | 36 | * `%h<>` now means `%h{}` -- the entire hash, not the empty string as key |
| | 37 | * `($::('x'))` with two adjacent closing parens now parses correctly |
| | 38 | * `1<2>` is now a fatal error: Odd numbers of elements in Hash |
| | 39 | |
| | 40 | === Declarators and Operators |
| | 41 | |
| | 42 | * Argument interpolation via prefix `|` and `|<<` |
| | 43 | * Binding to qualified uninitialized symbols: `&fully::qualify := sub {...}` |
| | 44 | * Hyperised reduce operators: `[>>+<<]` and `[\>>+<<]` |
| | 45 | * Mid-block redeclaration no longer allowed: `my $x; { $x = 1; my $x = 2 }` |
| | 46 | * New infix comparison operators: `===` and `eqv` |
| | 47 | * Nullary reduction of builtin operators gives identity values: `[*]() === 1` |
| | 48 | * Postfix operators can be called with a dot: `.++`, `$x.++`, `$x.\ ++` |
| | 49 | * Prefix `=` now iterates on arrays as well: `=@array` |
| | 50 | * Short-circuiting chained comparison: `1 > 2 > die('foo')` no longer fails |
| | 51 | * Smart matching against implicit invocation: `$obj ~~ .meth`, `$obj ~~ .[0]` |
| | 52 | * Typed constraints on autovivification: `my Hash $x; $x[0] = 1` now fails |
| | 53 | * Typed declarations: `my Dog $fido`, `my T ($x, $y)` |
| | 54 | * `*` is now always a term, never a prefix operator |
| | 55 | |
| | 56 | === Blocks and Statements |
| | 57 | |
| | 58 | * Implicit invocation in `when`: `when .true {...}`, `when .<key> {...}` |
| | 59 | * Loop topic is not forced into rw: `for 1..3 { $_++ }` now fails correctly |
| | 60 | * New `&break` and `&continue` primitives to use inside `when` blocks |
| | 61 | * New `&leave` primitive to exit from the innermost block |
| | 62 | * New postfix `given` statement modifier: `.say given foo()` |
| | 63 | * Support for `FIRST`, `NEXT`, `LAST` loop control blocks |
| | 64 | * Support for `START`, `PRE`, `POST`, `KEEP`, `UNDO`, `ENTER`, `LEAVE` blocks |
| | 65 | * Support for test-after `repeat {...} while EXPR;` blocks |
| | 66 | * Support for the `each` list interleaver: `for each(@a; @b) -> $x, $y {...}` |
| | 67 | * The `for` loop no longer double-flattens lists: `for %h.pairs -> $p {...}` |
| | 68 | * User-defined topicalizers: `if EXPR -> $x {...}`, `given EXPR -> $x {...}` |
| | 69 | * `&last` and `&redo` now work in `repeat {...}` and `loop {...}` blocks |
| | 70 | * `&take` no longer flattens array literals: `take [1,2,3];` |
| | 71 | * `&take` now works in functions called from within a `gather {...}` block |
| | 72 | * `BEGIN(...)`, `END(...)` etc are parsed as calls, not syntax errors |
| | 73 | * `do {...}` is now a loop block that takes standard loop controls |
| | 74 | |
| | 75 | === Regexes and Grammars |
| | 76 | |
| | 77 | * Anonymous tokens and rules anchor on both ends: `123 ~~ token{2}` is false |
| | 78 | * New `s[...] = ...` syntax; `s[...][...]` is deprecated |
| | 79 | * Pugs::Compiler::Rule (PCR) replaced Parrot/PGE as the default engine |
| | 80 | * Support for `:c/:continue`, `<prior>`, and much more: see PCR's ChangeLog |
| | 81 | * `$()`, `@()` and `%()` parsed correctly as `$$/`, `@$/` and `%$/` |
| | 82 | |
| | 83 | === Modules and Routines |
| | 84 | |
| | 85 | * Allow space-separated adverbial named arguments: `f( :x<foo> :$y :!z )` |
| | 86 | * Multi-dispatching now handles named, slurpy and optional arguments |
| | 87 | * Named arguments with no matching parameters is now an error |
| | 88 | * New `&sub.call($capture)` syntax to call without a caller frame |
| | 89 | * Parse for the `proto` routine modifier: `proto method foo ($x) {...}` |
| | 90 | * Precompiled `.pm.yml` files with mismatching AST version no longer loads |
| | 91 | * Support for user-defined unary and optional-unary prefix macros |
| | 92 | * The main package is now ::Main, not ::main |
| | 93 | * `sub ($x = 0 is copy)` no longer allowed; say `sub ($x is copy = 0)` instead |
| | 94 | * `sub f ($x is lazy) {...}` no longer evaluates $x more than once |
| | 95 | |
| | 96 | === Classes and Objects |
| | 97 | |
| | 98 | * Attribute-like method call syntax: `@.method(1)`, `$.method: 2, 3, 4` |
| | 99 | * Circular mixin is no longer allowed: `role A does A` |
| | 100 | * Default expression for attributes: `class C { has $.x = 123 }` |
| | 101 | * Dynamic method calls: `$obj.$meth` |
| | 102 | * Hyperised method calls: `$obj.>>meth` |
| | 103 | * Quantified method calls: `$obj.*meth`, `$obj.+meth` and `$obj.?meth` |
| | 104 | * Reopening classes: `class C is also {...}` |
| | 105 | * Role mixins: `role R {...} class C does R {...}` |
| | 106 | |
| | 107 | === Built-in Primitives |
| | 108 | |
| | 109 | * New `&comb` function, a dual to `&split` but matches the wanted parts |
| | 110 | * New `&printf` function for formatted printing |
| | 111 | * New `"emeta` function for escaping strings |
| | 112 | * Support for `%b` in formatted printing |
| | 113 | * The `&system` function no longer dies when the command does not exist |
| | 114 | * The `.as` method is renamed to `.fmt` for formatted printing |
| | 115 | * The `.perl` method now returns Unicode strings |
| | 116 | |
| | 117 | == Bundled Modules |
| 120 | | == Build System |
| 121 | | |
| 122 | | * Enabled Perl 5 embedding by default |
| 123 | | ** For Windows users, Perl 5.8.x is required |
| 124 | | ** Set the `PUGS_EMBED` environment variable to `noperl5` to disable this |
| 125 | | |
| 126 | | * Disabled prompting for Parrot embedding by default |
| 127 | | ** Set the `PUGS_EMBED` environment variable to `parrot` to enable this |
| 128 | | |
| 129 | | * Support for compiling with GHC 6.6 |
| 130 | | ** GHC 6.4.1+ is still supported, but will discontinue in te next release |
| 131 | | |
| 132 | | == Feature Changes |
| 133 | | |
| 134 | | === Perl 5 Interoperability |
| 135 | | |
| 136 | | * Importing functions from Perl 5: `use perl5:CGI <header param>` |
| 137 | | * Array and Hashes now round-trips from Pugs to Perl 5 land and back |
| 138 | | * Passing unboxed values across runtimes no longer leaks memory |
| 139 | | * When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings |
| 140 | | |
| 141 | | === Lexical Syntax |
| 142 | | |
| 143 | | * Named character escapes: `"\c[LATIN CAPITAL LETTER Y]"` |
| 144 | | * `"\123"` and `"\03"` are now errors; write `"\d123"` and `"\o03"` instead |
| 145 | | * New magical variables: `$?COMPILER` and `$?VERSION` |
| 146 | | * Interpolation of chained calls: `"$foo.meth.meth.meth.meth()"` |
| 147 | | * Signature literals: `:($foo is copy = 42, $, @)` |
| 148 | | * Capture literals: `\($bar: 1, 2, 3, named => 4)` |
| 149 | | * POD variables: `$=DATA` and `@=DATA` |
| 150 | | * POD directives: `=begin`/`=end` and `=for` now terminate without `=cut` |
| 151 | | * `%h<>` now means `%h{}` -- the entire hash, not the empty string as key |
| 152 | | * `1<2>` is now a fatal error: Odd numbers of elements in Hash |
| 153 | | * List comprehension: `for 0 < list(@x) < 10 {...}` |
| 154 | | * `$::x` now means exactly the same a `$x`, instead of `$*x` |
| 155 | | |
| 156 | | === Declarators and Operators |
| 157 | | |
| 158 | | * New infix comparison operators: `===` and `eqv` |
| 159 | | * `*` is now always a term, never a prefix operator |
| 160 | | * Argument interpolation via prefix `|` and `|<<` |
| 161 | | * Typed declarations: `my Dog $fido`, `my T ($x, $y)` |
| 162 | | * Binding to qualified uninitialized symbols: `&fully::qualify := sub {...}` |
| 163 | | * Postfix operators can be called with a dot: `.++`, `$x.++`, `$x.\ ++` |
| 164 | | * Mid-block redeclaration no longer allowed: `my $x; { $x = 1; my $x = 2 }` |
| 165 | | * Smart matching against implicit invocation: `$obj ~~ .meth`, `$obj ~~ .[0]` |
| 166 | | * Short-circuiting chained comparison: `1 > 2 > die('foo')` no longer dies |
| 167 | | |
| 168 | | === Blocks and Statements |
| 169 | | |
| 170 | | * `BEGIN(...)`, `END(...)` etc are parsed as calls, not syntax errors |
| 171 | | * Support for `START`, `PRE`, `POST`, `KEEP`, `UNDO`, `ENTER`, `LEAVE` blocks |
| 172 | | * Support for `FIRST`, `NEXT`, `LAST` loop control blocks |
| 173 | | * New `&leave` primitive to exit from the innermost block |
| 174 | | * New `&break` and `&continue` primitives to use inside `when` blocks |
| 175 | | * `&last` and `&redo` now work in `repeat { ... }` and `loop {...}` blocks |
| 176 | | * `do {...}` is now a loop block that takes standard loop controls |
| 177 | | * New postfix `given` statement modifier: `.say given foo()` |
| 178 | | * `&take` now works in functions called from within a `gather {...}` block |
| 179 | | * `&take` no longer flattens array literals: `take [1,2,3];` |
| 180 | | * Implicit invocation in `when`: `when .true {...}`, `when .<key> {...}` |
| 181 | | * Loop topic is not forced into rw: `for 1..3 { $_++ }` now fails correctly |
| 182 | | |
| 183 | | === Regexes and Grammars |
| 184 | | |
| 185 | | * Pugs::Compiler::Rule (PCR) replaced Parrot/PGE as the default engine |
| 186 | | * Implemented `s[...] = ...` and deprecated `s[...][...]` |
| 187 | | |
| 188 | | === Modules and Routines |
| 189 | | |
| 190 | | * The main package is now ::Main, not ::main |
| 191 | | * Allow space-separated adverbial named arguments: `f( :x<foo> :$y :!z )` |
| 192 | | * Parse for the `proto` routine modifier: `proto method foo ($x) {...}` |
| 193 | | * Multi-dispatching now handles named, slurpy and optional arguments |
| 194 | | * Support for user-defined unary and optional-unary prefix macros |
| 195 | | * `sub f ($x is lazy) {...}` no longer evaluates $x more than once |
| 196 | | * `sub ($x = 0 is copy)` no longer allowed; say `sub ($x is copy = 0)` instead |
| 197 | | * Named arguments with no matching parameters is now an error |
| 198 | | * New `&sub.call($capture)` syntax to call without a caller frame |
| 199 | | |
| 200 | | === Classes and Objects |
| 201 | | |
| 202 | | * Dynamic method calls: `$obj.$meth` |
| 203 | | * Hyperised method calls: `$obj.>>meth` |
| 204 | | * Quantified method calls: `$obj.*meth`, `$obj.+meth` and `$obj.?meth` |
| 205 | | * Default expression for attributes: `class C { has $.x = 123 }` |
| 206 | | * Attribute-like method call syntax: `@.method(1)`, `$.method: 2, 3, 4` |
| 207 | | * Role mixins: `role R {...} class C does R {...}` |
| 208 | | * Circular mixin is no longer allowed: `role A does A` |
| 209 | | * Reopening classes: `class C is also {...}` |
| 210 | | |
| 211 | | === Built-in Primitives |
| 212 | | |
| 213 | | * New `"emeta` function for escaping strings |
| 214 | | * New `&printf` function for formatted printing |
| 215 | | * New `&comb` function, a dual to `&split` but matches the wanted parts |
| 216 | | * The `.as` method is renamed to `.fmt` for formatted printing |
| 217 | | * Support for `%b` in formatted printing |
| 218 | | * The `.perl` method now returns Unicode strings |
| 219 | | * The `&system` function no longer dies when the command does not exist |
| 220 | | |
| 221 | | --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- |
| 222 | | |
| 223 | | * Begin integration of new AST into Pugs. This AST is planned to be shared |
| 224 | | with other implementations, so macros are portable even if they don't |
| 225 | | operate on the source level |
| 226 | | * Added support for the `each` builtin, so now you can write |
| 227 | | for each(@a; @b) -> $x, $y { ... } |
| 228 | | * New Prims: `Pugs::Safe::safe_getc` and `Pugs::Safe::safe_readline`, |
| 229 | | allowing eval servers to interface an interactive Pugs |
| 230 | | * New `Perl6::Internals::emit_yaml` prim to dump AST programmatically |
| 231 | | as YAML |
| 232 | | * Implemented staleness checking for .yml/.pm loader |
| 233 | | * Pugs.Parser: $() now means $$/, @() means @$/, %() means %$/, etc |
| 234 | | * Added identity values for the builtin reduceable operators from S03 |
| 235 | | * Implement hyperfold and hyperscan: [>>+<<] and [\>>+<<] |
| 236 | | * Pugs.Eval: Autovivification is now constrainted by typed variables: |
| 237 | | my Hash $x; |
| 238 | | $x[0] = 1; # fails, as $x can _only_ vivify to Hash |
| 239 | | * Implement rudimentary "fail" control via $*FAIL_SHOULD_DIE |
| 240 | | * Reduce standalone blocks even if nested: |
| 241 | | { { { say 3 } } } |
| 242 | | * Reject named arguments that cannot find a matching named |
| 243 | | parameter or slurpy hash |
| 244 | | sub f () {...} |
| 245 | | f(y => 1); # used to bind silently, but now no more |
| 246 | | * Primitive support for =@Array on both contexts |
| 247 | | |
| 248 | | == Bug Fixes |
| 249 | | |
| 250 | | * in a "for" loop with rvalue lists, don't double-listify |
| 251 | | its list elements. This fixes the case of: |
| 252 | | for %h.pairs -> $p { ... } |
| 253 | | which used to make $p contain a seq instead of a pair |
| 254 | | * Allowed double-right-parens to end a "parens" structure: |
| 255 | | (@(1)) |
| 256 | | (@::("foo")) |
| 257 | | now all parses correctly without needing a whitespace |
| 258 | | * Pugs.Parser: Parse for |
| 259 | | repeat { |
| 260 | | } |
| 261 | | while 1; |