Rakudo Star Release 2015.06
A useful, usable, "early adopter" distribution of Perl 6
On behalf of the Rakudo and Perl 6 development teams, I'm happy to announce the June 2015 release of "Rakudo Star", a useful and usable distribution of Perl 6. The tarball for the June 2015 release is available from http://rakudo.org/downloads/star/.
This Rakudo Star release comes with support for the MoarVM backend (all module tests pass on supported platforms).
In the Perl 6 world, we make a distinction between the language ("Perl 6") and specific implementations of the language such as "Rakudo Perl". This Star release includes release 2015.06 of the Rakudo Perl 6 compiler, version 2015.06 of MoarVM, plus various modules, documentation, and other resources collected from the Perl 6 community.
Other Rakudo Perl 6 Comiler changes included in this release: https://github.com/rakudo/rakudo/blob/master/docs/announce/2015.04.md https://github.com/rakudo/rakudo/blob/master/docs/announce/2015.05.md https://github.com/rakudo/rakudo/blob/master/docs/announce/2015.06.md
Some of the new compiler features added to this release include:
- "0" (0 as a string) is now True, no special-casing anymore
- an Int() coercion type in a multi now creates two candidates: Any and Int
- native arrays
- starts-with/substr-eq/ends-with for comparing strings inside other strings
- where constraints on variable and attribute declarations
- 'is rw' parameters implemented for native subs (they get passed as a pointer)
- use Foo:from<Perl5> and EVAL $code, :lang<perl5> are now supported as long as Inline::Perl5 is installed. Allows passing most of S01 spec tests.
- NFG, NFC, NFD, Uni
- "unit" declaration needed for blockless packages
- Various API changes for the Great List Refactor, such as...
- 'for' loops not longer flatten; use 'for flat' for that
- .map no longer flattens, map as a listop does. Use .flatmap to get the old behavior
- Likewise other methods that used to flatten their invocant no longer do: all, any, one, none, unique, squish, min, max, minmax, classify, and categorize
- Nil no longer iterates like the empty List. Use () or Empty instead.
- .pick($n)/roll($n) now always return lists, even when $n == 1
- The "is cached" trait no longer works on methods, throws a NYI instead
- Method .map should be used instead of .for
- The REPL is strict by default now, that leaves only '-e' lines to be lax
- Implement new @*INC handling (about 30% faster startup time) (bare startup time is now below 100 ms on some machines)
- Implemented CUnions which map to the union C type definition for NativeCall
- Implemented HAS declarator for attributes to mark it embedded into the CStruct or CUnion
- Lexical pragma 'use trace' now outputs statements on STDERR
There are some key features of Perl 6 that Rakudo Star does not yet handle appropriately, although they will appear in upcoming releases. Some of the not-quite-there features include:
- advanced macros
- non-blocking I/O (in progress)
- much of Synopsis 9 and 11
There is an online resource at http://perl6.org/compilers/features that lists the known implemented and missing features of Rakudo's backends and other Perl 6 implementations.
In many places we've tried to make Rakudo smart enough to inform the programmer that a given feature isn't implemented, but there are many that we've missed. Bug reports about missing and broken features are welcomed at email@example.com.
See http://perl6.org/ for links to much more information about Perl 6, including documentation, example code, tutorials, reference materials, specification documents, and other supporting resources. A draft of a Perl 6 book is available as docs/UsingPerl6-draft.pdf in the release tarball.
The development team thanks all of the contributors and sponsors for making Rakudo Star possible. If you would like to contribute, see http://rakudo.org/how-to-help, ask on the firstname.lastname@example.org mailing list, or join us on IRC #perl6 on freenode.