| 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 |
|---|
| 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. |
|---|
| 12 | |
|---|
| 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/. |
|---|
| 19 | |
|---|
| 20 | == Build System |
|---|
| 21 | |
|---|
| 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. |
|---|
| 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 `"emeta` 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 |
|---|
| 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 |
|---|
| 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 |
|---|
| 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 |
|---|
| 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 |
|---|
| 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 | * `¬` 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 |
|---|
|
|---|