Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r14394 r14395 14 14 15 15 == Feature Changes 16 17 === Interactive Shell and Command-Line Flags 18 19 * New `pugs -d` flag to display a trace for debugging 20 * The `:r` command now resets the environment once, not twice 21 * The return value of blocks, such as `gather {...}`, is displayed correctly 22 * `$_` is no longer clobbered with the result of each expression's evaluation 16 23 17 24 === Perl 5 Interoperability … … 21 28 * Passing unboxed values across runtimes no longer leaks memory 22 29 * When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings 30 * `eval($str, :lang<perl5>)` now accepts non-ASCII characters in `$str` 23 31 24 32 === Lexical Syntax 25 33 26 34 * Capture literals: `\($bar: 1, 2, 3, named => 4)` 35 * Here-docs now work as specced; also warns against inconsistent indentation 27 36 * Interpolation of chained calls: `"$foo.meth.meth.meth.meth()"` 28 37 * List comprehension: `for 0 < list(@x) < 10 {...}` 29 38 * Named character escapes: `"\c[LATIN CAPITAL LETTER Y]"` 39 * New grammatical category `term:`, separated from the `prefix:` category 30 40 * New magical variables: `$?COMPILER` and `$?VERSION` 41 * Parse for `LABEL: STMT`, although it's currently treated the same as `STMT` 31 42 * Pod directives: `=begin`/`=end` and `=for` now terminate without `=cut` 32 * Pod variables: `$=FOO` and `@=FOO` give you access to the Pod 33 section FOO 43 * Pod variables: `$=FOO` and `@=FOO` give you access to the Pod section FOO 44 * Quote adverbs no longer take non-parens brackets: `rx:P5{...}` is valid again 45 * Shell-like quoting rules implemented for `<< $x "qq" 'q' >>` 34 46 * Signature literals: `:($foo is copy = 42, $, @)` 47 * Support for UTF-8, UTF-16 and UTF-32 encoded source files 48 * Support for backquotes and `qx/.../` for capturing external command output 49 * User-defined infix associativity: `sub infix:<foo> is assoc('right') {...}` 35 50 * `"\123"` and `"\03"` are now errors; write `"\d123"` and `"\o03"` instead 36 51 * `$::x` now means exactly the same a `$x`, instead of `$*x` 37 52 * `%h<>` now means `%h{}` -- the entire hash, not the empty string as key 38 53 * `($::('x'))` with two adjacent closing parens now parses correctly 54 * `0_123_456` now parses as `0d123456`, not an error 39 55 * `1<2>` is now a fatal error: Odd number of elements in Hash 56 * `q()` and `qw()` with parentheses are parsed as functions, not quotes 40 57 41 58 === Declarators and Operators … … 43 60 * Argument interpolation via prefix `|` and `|<<` 44 61 * Binding to qualified uninitialised symbols: `&fully::qualify := sub {...}` 62 * Contextual variables are now declared with `my $x is context`, not `env $x` 45 63 * Hyperised reduce operators: `[>>+<<]` and `[\>>+<<]` 64 * Implicit invocation assignment: `.= uc` is parsed as `$_ = $_.uc` 46 65 * Mid-block redeclaration no longer allowed: `my $x; { $x = 1; my $x = 2 }` 66 * Negated comparison operators: `!eqv`, `!=:=` etc; `!~~` replaces `!~` 47 67 * New infix comparison operators: `===` and `eqv` 68 * New infix non-short-circuiting boolean AND operator: `?&` 48 69 * Nullary reduction of builtin operators gives identity values: `[*]() === 1` 49 70 * Postfix operators can be called with a dot: `.++`, `$x.++`, `$x.\ ++` 50 71 * Prefix `=` now iterates on arrays as well: `=@array` 51 72 * Short-circuiting chained comparison: `1 > 2 > die('foo')` no longer fails 73 * Smart matching against code objects: `$obj ~~ { 1 > $_ > 5 }` 52 74 * Smart matching against implicit invocation: `$obj ~~ .meth`, `$obj ~~ .[0]` 53 75 * Typed constraints on autovivification: `my Hash $x; $x[0] = 1` now fails … … 58 80 59 81 * Implicit invocation in `when`: `when .true {...}`, `when .<key> {...}` 82 * Listops in conditions no longer consume the block: `for say {...}` 60 83 * Loop topics are not forced into rw: `for 1..3 { $_++ }` now fails correctly 61 84 * New `&break` and `&continue` primitives for use within `when` blocks … … 64 87 * Support for `FIRST`, `NEXT`, `LAST` loop control blocks 65 88 * Support for `START`, `PRE`, `POST`, `KEEP`, `UNDO`, `ENTER`, `LEAVE` blocks 66 * Support for test-after `repeat {...} while EXPR;` blocks67 * Support for the ` each` list interleaver: `for each(@a; @b) -> $x, $y {...}`89 * Support for repeat blocks: `repeat {...} while 1`, `repeat while 1 {...}` 90 * Support for the `&each` list interleaver: `for each(@a; @b) -> $x, $y {...}` 68 91 * The `for` loop no longer double-flattens lists: `for %h.pairs -> $p {...}` 69 * User-defined topicalisers: `if EXPR -> $x {...}`, `given EXPR -> $x {...}` 92 * Topicalisers for `if`, `else`, `while`, `given` blocks: `if EXPR -> $x {...}` 93 * Topicalisers for postfix `for` loop: `-> $x {...} for 1,2,3` 70 94 * `&last` and `&redo` now work in `repeat {...}` and `loop {...}` blocks 71 95 * `&take` no longer flattens array literals: `take [1,2,3];` 72 96 * `&take` now works in functions called from within a `gather {...}` block 73 97 * `BEGIN(...)`, `END(...)`, etc., are now parsed as calls, not syntax errors 98 * `END {...}` in `.pm` files are no longer ignored when executed directly 99 * `INIT {...}` now works correctly inside `eval "..."` 74 100 * `do {...}` is now a loop block that takes standard loop controls 101 * `do {...}` with statement modifiers is explicitly disallowed 75 102 76 103 === Regexes and Grammars 77 104 78 105 * Anonymous tokens and rules anchor on both ends: `123 ~~ token{2}` is false 79 * New `s[...] = ...` syntax; `s[...][...]` is deprecated 106 * New `s[...] = EXPR` and `s[...] = .meth` syntax; `s[...][...]` is deprecated 107 * New `tr///` syntax for transliteration; `y///` will not be supported 80 108 * Pugs::Compiler::Rule (PCR) replaces Parrot/PGE as the default engine 81 109 * Support for `:c/:continue`, `<prior>`, and much more: see PCR's ChangeLog 82 110 * `$()`, `@()` and `%()` parses correctly as `$$/`, `@$/` and `%$/` 111 * `/.../` matches `$_` under Int, Num and void context in addition to Bool 112 * `m:g/(1)|(2)/` now returns only successfully matched subcaptures 83 113 84 114 === Modules and Routines … … 86 116 * Allow space-separated adverbial named arguments: `f( :x<foo> :$y :!z )` 87 117 * Multi-dispatching now handles named, slurpy and optional arguments 118 * Multi-dispatching now handles parenthesized expressions as arguments 88 119 * Named arguments with no matching parameters is now an error 89 * New `&sub.call($capture)` syntax to call without a caller frame (similarly 90 to Perl 5's `goto &sub`, but it returns) 120 * New `&c.call($capture)` method to call without a caller frame 121 (similar to Perl 5's `goto &sub`, but it returns) 122 * New `&c.signature` method to get a Signature object from a Code object 91 123 * Parse for the `proto` routine modifier: `proto method foo ($x) {...}` 92 124 * Precompiled `.pm.yml` files with mismatching AST version will no longer load 93 125 * Support for user-defined unary and optional-unary prefix macros 94 126 * The main package is now ::Main, not ::main 127 * `&?CALLER_CONTINUATION` is now fully reentrant 128 * `&yield` in coroutines works correctly within loop blocks 95 129 * `sub ($x = 0 is copy)` no longer allowed; say `sub ($x is copy = 0)` instead 96 130 * `sub f ($x is lazy) {...}` no longer evaluates $x more than once 131 * `sub f (@x?) {...}; f()` now sets `@x` to `[]`, not `[undef]` 97 132 98 133 === Classes and Objects 99 134 100 135 * Attribute-like method call syntax: `@.method(1)`, `$.method: 2, 3, 4` 136 * Class attributes: `class C { my $.x is rw }` 137 * Class name literals are now term macros, not prefix functions 101 138 * Compile-time self-mixin no longer allowed: `role A does A` 102 139 * Default initialiser expression for attributes: `class C { has $.x = 123 }` 140 * Dot attributes are now method calls: `@.x` is the same as `@(self.x)` 103 141 * Dynamic method calls: `$obj.$meth` 104 142 * Hyperised method calls: `$obj.>>meth` … … 106 144 * Reopening classes: `class C is also {...}` 107 145 * Role mixins: `role R {...} class C does R {...}` 146 * `$?SELF` is gone; write `self` instead 147 * `BUILDALL`/`DESTROYALL` trigger once per class even with diamond inheritance 148 * `does R` and `is C` statements in class body now evaluate in compile time 108 149 109 150 === Built-in Primitives 110 151 152 * New `&HOW`, `&WHAT` and `&WHICH` functions replace `&meta`, `&ref` and `&id` 153 * New `&VAR` macro to force lvalue evaluation of an expression 111 154 * New `&comb` function, a dual to `&split` but matches the wanted parts 155 * New `&crypt` function to create one-way digest strings 156 * New `&fork` function to create a new process 112 157 * New `&printf` function for formatted printing 113 158 * New `"emeta` function for escaping strings … … 129 174 130 175 * A new `as_yaml` method to dump CGI parameters as YAML 176 * Allow initializing the CGI object with a hash of parameters 177 * New `Dump` function adapted from Perl 5's CGI.pm 131 178 * New basic tests for `escapeHTML` and `unescapeHTML`, which were broken 132 179 * New tests for `PATH_INFO` 133 * Allow initializing the CGI object with a hash of parameters134 * New `Dump` function adapted from Perl 5's CGI.pm135 180 * Only send the Content-Type: header if we actually have a content-type 136 181 * Only send the Status: header if it's a redirect, or if it's explicitly added 137 182 * Refactored into an OO-only module. N.B.: this breaks backwards compatibility! 183 * Some work on charset handling, though a `charset` method is still missing 138 184 * The `content_type` method is renamed to `type` for compatibility 139 185 * The `cookies` attribute is renamed to `cookie` for compatibility 140 * Some work on charset handling, though a `charset` method is still missing141 186 142 187 === [ext/HTTP-Server-Simple/] 143 188 144 * The old non-standard `./method` syntax has been replaced with 145 standard `self.method` syntax 189 * The old non-standard `./method` syntax has been replaced with `self.method` 146 190 147 191 === [ext/Rosetta/] … … 165 209 === [util/prove6] 166 210 211 * Can now run only a portion of the test suite, or even a single file 167 212 * Original shell script rewritten in Perl 5 for improved portability 168 * Can now run only a portion of the test suite, or even a single file169 213 * Support for multiple Pugs backends and multiple Perl 6 implementations 170 214 … … 173 217 * A new visualiser of smartlinks used in the test suite 174 218 * Generates much nicer cross-referenced HTML pages 219 * See annotated specs in action on [http://spec.pugscode.org/] 175 220 * Smartlinks replace the old [util/catalog_tests.pl] 176 * See annotated specs in action on [http://spec.pugscode.org/]177 221 178 222 === [util/smokeserv/] 179 223 224 * See the `SYN` links on [http://smoke.pugscode.org/] for this in action 180 225 * Smoke client now uploads raw `.yml` results as well as `.html` 181 226 * The smokeserver now annotates the spec with test results using smartlinks 182 * See the `SYN` links on [http://smoke.pugscode.org/] for this in action183 184 === [t/02-test-pm/]185 186 * A new subdirectory to ensure that `Test.pm` works as advertised187 * Copied [ext/Test/t/*] and moved [t/01-sanity/08-test.t] into it188 189 === [t/blocks/]190 191 * Renamed from [t/subroutines/]192 193 === [t/closure_traits/]194 195 * A new test subdirectory to test closure traits (FIRST, LAST, etc.)196 227 197 228 === [t/] 198 229 230 * All tests now begin with `use v6-alpha;` instead of `use v6;` 199 231 * Many, many more smartlinks have been added into the spec 200 * All tests now begin with `use v6-alpha;` instead of `use v6;` 201 * `eval_ok` and `eval_is` are now `ok eval` and `is eval`, so that 202 eval'd strings will be run in the current lexical scope 232 * Programs and modules in [examples/] are tested for syntactic correctness 203 233 * Tests in [t_disabled/] are merged back into the main test suite 234 * [t/02-test-pm/] created to ensure that `Test.pm` works as advertised 235 * [t/blocks/] renamed from [t/subroutines/] 236 * [t/closure_traits/] created to test closure traits (`FIRST`, `LAST`, etc.) 204 237 * `#!/usr/bin/pugs` is gone from all test files 238 * `eval_ok` and `eval_is` are now `ok eval` and `is eval`, so that eval'd 239 strings will be run in the current lexical scope 205 240 206 241 == Examples and Utilities … … 208 243 === [examples/] 209 244 210 * All Perl scripts have been renamed from *.p6 to *.pl and from *.p5 to *-p5.pl 245 * All Perl 5 programs have been renamed from `*.p5` to `*-p5.pl` 246 * All Perl 6 programs have been renamed from `*.p6` to `*.pl` 211 247 * All references to them, except in talks, have been likewise updated 212 248 249 === [examples/games/dispatch_quiz.pl] 250 251 * A game to test your knowledge about Perl 6's multi-dispatch system 252 213 253 === [misc/runpugs/] 214 254 215 * New feature: aweb teminal for running an interactive Pugs shell on the web255 * A web teminal for running an interactive Pugs shell on the web 216 256 * WebTerminal: a library for building web terminals for interactive shells 217 257 * See [http://run.pugscode.org/] for a live demo … … 232 272 233 273 * New directory for Pugs-specific documentation 234 * Haskell style guide for Pugs hackers in [docs/Pugs/Doc/Hack/Style.pod]274 * [docs/Pugs/Doc/Hack/Style.pod] - Haskell style guide for Pugs hackers 235 275 236 276 === [docs/talks/extraction.xul] 237 277 238 * Slides from Nathan Gray's "Practical Extraction with Perl 6" talk 239 240 == Perl 6 on Perl 5 (under [misc/pX/Common/]) 241 242 * Added make_build_perl5, to make it possible to build all the perl5 modules 243 without installing ghc first. 244 * lrep is no longer used to bootstrap - moved to misc/lrep 245 * .WHAT method implemented 246 247 XXX fglock: please write more here 248 249 == Perl 5 to Perl 6 Translater (under [misc/pX/Common/P5_to_P6_Translation]) 250 251 XXX Sage: please write something here 278 * Slides from Nathan Gray's /Practical Extraction with Perl 6/ talk 279 280 == Perl 6 on Perl 5 281 282 === [perl5/Pugs-Compiler-Perl6/] 283 284 * The `v6.pm` implementation of Perl 6 now handles `./pugs -CPerl5` commands 285 * See its own ChangeLog for more information 286 287 === [v6/] 288 289 * A new subproject to write a Perl 6 compiler in Perl 6 290 * Bootstrapped from the `v6.pm` compiler on the perl5 runtime 291 * See its own ChangeLog for more information 292 293 == Experimental projects 294 295 === [misc/pX/Common/P5_to_P6_Translation/] 296 297 * Converts Perl 5.9.4+'s YAML syntax tree into Perl 6 298 * Handles regexes, arrays, hashes and many builtin functions 299 * See its own documentation for more information 300 301 === [misc/pX/Common/convert_regexp_to_six.pl] 302 303 * Converts Perl 5 regex into Perl 6 304 * See its own documentation for more information 305 306 === [misc/pX/Common/redsix/] 307 308 * An Perl 6 implementation on Ruby 1.9+ 309 * See its own documentation for more information 252 310 253 311 … … 397 455 * `sub f (@x) {}; f([1,2,3])` now works as it's no longer under slurpy context 398 456 457 399 458 = Changes for 6.2.11 (r8934) - Feb 1, 2006 400 459 … … 557 616 * Based on work from the [perl5/Perl6-MetaModel/] 558 617 618 559 619 = Changes for 6.2.10 (r7520) - Oct 10, 2005 560 620 … … 668 728 * Theory Model proposal at `docs/notes/theory.pod` 669 729 730 670 731 = Changes for 6.2.9 (r6050) - Aug 4, 2005 671 732 … … 735 796 * `.end` and `.elems` no longer work as scalar methods 736 797 * `/a/ ~~ "a"` now works the same way as `"a" ~~ /a/` 798 737 799 738 800 = Changes for 6.2.8 (r5577) - July 13, 2005 … … 823 885 * `try` is now capable of catching all type casting errors 824 886 887 825 888 = Changes for 6.2.7 (r4612) - June 13, 2005 826 889 … … 874 937 * `Test::is()` now shows the expected result correctly again 875 938 * `module Foo {...}` now parses 939 876 940 877 941 = Changes for 6.2.6 (r4318) - June 2, 2005 … … 953 1017 * `when .isa(Foo)` is no longer parsed as `when $_ ~~ .isa(Foo)` now 954 1018 1019 955 1020 = Changes for 6.2.5 (r3794) - May 24, 2005 956 1021 … … 958 1023 959 1024 * Fix one broken test from the `Set` module 1025 960 1026 961 1027 = Changes for 6.2.4 (r3790) - May 24, 2005 … … 1037 1103 * `state $x = 42` now only assigns `$x` once 1038 1104 * `system()` returns proper exit codes 1105 1039 1106 1040 1107 = Changes for 6.2.3 (r3111) - May 12, 2005 … … 1116 1183 * `{}` in P5 rules is no longer closure interpolation 1117 1184 1185 1118 1186 = Changes for 6.2.2 (r2604) - May 1, 2005 1119 1187 … … 1174 1242 * `one(1,1).pick` bug fixed; it should return `undef` 1175 1243 * `splice([], 1)` no longer causes division by zero errors 1244 1176 1245 1177 1246 = Changes for 6.2.1 (r2288) - April 24, 2005 … … 1261 1330 * `return() if 1` now works correctly 1262 1331 1332 1263 1333 = Changes for 6.2.0 (r1921) - April 13, 2005 1264 1334 … … 1336 1406 * Named bindings to `%_` repaired 1337 1407 1408 1338 1409 = Changes for 6.0.14 - April 4, 2005 1339 1410 … … 1381 1452 * Readline support is correctly probed on `Makefile.PL` time 1382 1453 * Mimick Perl 5's behaviour for function that defaults to `$_` 1454 1383 1455 1384 1456 = Changes for 6.0.13 - March 27, 2005 … … 1430 1502 * Hash keys are now strings 1431 1503 * Contextual logicals like `+^` and `~^` are parsed correctly 1504 1432 1505 1433 1506 = Changes for 6.0.12 - March 21, 2005 … … 1478 1551 * Hanoi.p6 was broken due to premature binding of subroutine parameters 1479 1552 * "&sub.foo" no longer attempts to interpolate 1553 1480 1554 1481 1555 = Changes for 6.0.11 (r690) - March 14, 2005 … … 1540 1614 now both evaluated in the caller's scope 1541 1615 1616 1542 1617 = Changes for 6.0.10 - March 5, 2005 1543 1618 … … 1574 1649 * Fixed `grep`/`map`/`push`/`unshift` parsing so they are properly binOp now 1575 1650 * Fixed prefix function parsing bug that eats more parens than it should 1651 1576 1652 1577 1653 = Changes for 6.0.9 (r335) - February 28, 2005 … … 1595 1671 * A first draft of builtins declarations 1596 1672 1673 1597 1674 = Changes for 6.0.8 - February 21, 2005 1598 1675 … … 1613 1690 * Deep recursion detection 1614 1691 1692 1615 1693 = Changes for 6.0.7 - February 18, 2005 1616 1694 … … 1629 1707 * `loop`, `for` and `if` constructs 1630 1708 1709 1631 1710 = Changes for 6.0.5 - February 15, 2005 1632 1711 … … 1643 1722 * Improved pretty-printing code for syntactic constructs 1644 1723 1724 1645 1725 = Changes for 6.0.4 - February 12, 2005 1646 1726 … … 1649 1729 * /JuncAny/ and /JuncAll/ now collapses operands of the same type correctly 1650 1730 * /JuncOne/ now collapses into an empty set when operands contains duplicates 1731 1651 1732 1652 1733 = Changes for 6.0.3 - February 12, 2005 … … 1667 1748 * The `all` junction builder now collapses nested junctions under it 1668 1749 1750 1669 1751 = Changes for 6.0.2 - February 9, 2005 1670 1752 … … 1679 1761 * Flattening (slurpy) star 1680 1762 1763 1681 1764 = Changes for 6.0.1 - February 7, 2005 1682 1765 … … 1684 1767 * Characters in single quotes should not be escaped 1685 1768 * Add one very basic test in `t/` 1769 1686 1770 1687 1771 = Changes for 6.0.0 - February 7, 2005
