...
 
Commits (3)

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

......@@ -98,6 +98,11 @@ U: brrt
E: bartwiegmans@gmail.com
D: Hack MoarVM JIT stuff
N: Ben Davies
U: Kaiepi
E: kaiepi@outlook.com
D: Improving *BSD and networking support
N: Bernhard Schmalhofer
U: bernhard
E: Bernhard.Schmalhofer@gmx.de
......@@ -317,11 +322,6 @@ E: francois.perrad@gadz.org
W: http://fperrad.googlepages.com/home
U: fperrad
N: M. Faiz Zakwan Zamzuri
E: skelic3@gmail.com
U: faraco
W: https://faracosite.wordpress.com
N: Gabor Szabo
E: szabgab@gmail.com
......@@ -603,6 +603,10 @@ D: Test infrastructure, tests, general Rakudo hacking
N: Mouq
E: alexmoquin@gmail.com
N: Momo
E: skelic3@gmail.com
U: momozor
N: Nicholas Clark
U: nicholas
E: nick@ccl4.org
......@@ -641,6 +645,7 @@ U: paultcochrane
E: paul@liekut.de
N: Paweł Murias
N: Pawel Murias
U: pmurias
E: pawelmurias@gmail.com
......
......@@ -66,19 +66,26 @@ MAIN: {
$options{libdir} = $default;
}
my $prefix = $options{'prefix'};
my @known_backends = qw/moar jvm/;
my @known_backends = qw/moar jvm js/;
my %backend_prefix = (jvm => 'j', moar => 'm', js => 'js');
my %known_backends = map { $_, 1; } @known_backends;
my %letter_to_backend;
my $default_backend;
for (keys %known_backends) {
$letter_to_backend{ substr($_, 0, 1) } = $_;
$letter_to_backend{ $backend_prefix{$_} } = $_;
}
my @backends;
my %backends;
if (my $nqp_bin = $options{'with-nqp'}) {
die "Could not find $nqp_bin" unless -e $nqp_bin;
my $passed_backends = $options{backends};
$options{backends} = qx{$nqp_bin -e 'print(nqp::getcomp("nqp").backend.name)'}
or die "Could not get backend information from $nqp_bin";
if (defined $passed_backends && $passed_backends ne $options{backends}) {
die "Passed value to --backends ($passed_backends) is overwritten by the one infered by --with-nqp ($options{backends})";
}
}
if (defined $options{backends}) {
$options{backends} = join ",", @known_backends
......@@ -173,7 +180,7 @@ MAIN: {
}
}
for my $target (qw/common_bootstrap_sources moar_core_sources moar_core_d_sources jvm_core_sources jvm_core_d_sources/) {
for my $target (qw/common_bootstrap_sources js_core_sources js_core_d_sources moar_core_sources moar_core_d_sources jvm_core_sources jvm_core_d_sources/) {
open my $FILELIST, '<', "tools/build/$target"
or die "Cannot read 'tools/build/$target': $!";
my @lines;
......@@ -209,9 +216,9 @@ MAIN: {
fill_template_file('tools/build/Makefile-common-macros.in', $MAKEFILE, %config);
my @prefixes = map substr($_, 0, 1), @backends;
my @prefixes = map $backend_prefix{$_}, @backends;
my $launcher = substr($default_backend, 0, 1) . '-runner-default';
my $launcher = $backend_prefix{$default_backend} . '-runner-default';
print $MAKEFILE "all: ", join(' ', map("$_-all", @prefixes), $launcher), "\n";
print $MAKEFILE "install: ", join(' ', map("$_-install", @prefixes), $launcher . '-install'), "\n";
......@@ -267,7 +274,7 @@ MAIN: {
$config{'nqp_jars'} = $nqp_config{'jvm::runtime.jars'};
$config{'bld_nqp_jars'} = join( $config{'cpsep'}, map { $config{'sysroot'} . $_ } split( $config{'cpsep'}, $nqp_config{'jvm::runtime.jars'} ) );
$config{'nqp_classpath'} = $nqp_config{'jvm::runtime.classpath'};
$config{'nqp_libdir'} = $nqp_config{'nqp::libdir'};
$config{'nqp::libdir'} = $nqp_config{'nqp::libdir'};
$config{'j_runner'} = $win ? 'perl6-j.bat' : 'perl6-j';
......@@ -312,6 +319,28 @@ MAIN: {
fill_template_file('tools/build/Makefile-Moar.in', $MAKEFILE, %config, %nqp_config);
}
}
if ($backends{js}) {
my %nqp_config;
$config{js_nqp} = $impls{js}{bin};
$config{js_nqp} =~ s{/}{\\}g if $win;
$config{'perl6_runtime'} = File::Spec->rel2abs('src/vm/js/perl6-runtime');
$config{'perl6_lowlevel_libs'} = File::Spec->rel2abs('node_modules') . '/';
$config{'perl6_js_runner'} = File::Spec->rel2abs('perl6-js');
if ( $impls{js}{ok} ) {
%nqp_config = %{ $impls{js}{config} };
}
elsif ( $impls{js}{config} ) {
push @errors, "The nqp-js is too old";
}
else {
push @errors, "Unable to read configuration from NQP on JS";
}
system("$config{js_nqp} tools/build/gen-js-makefile.nqp > gen/js/Makefile-JS.in");
fill_template_file('gen/js/Makefile-JS.in', $MAKEFILE, %config, %nqp_config);
}
if ($errors{jvm}{'no gen-nqp'} || $errors{moar}{'no gen-nqp'}) {
my @options_to_pass;
......@@ -331,10 +360,9 @@ MAIN: {
}
sorry($options{'ignore-errors'}, @errors) if @errors;
my $l = uc substr($default_backend, 0, 1);
my $l = uc $backend_prefix{$default_backend};
print $MAKEFILE qq[\nt/*/*.t t/*.t t/*/*/*.t: all\n\t\$(${l}_HARNESS5_WITH_FUDGE) --verbosity=1 \$\@\n];
close $MAKEFILE or die "Cannot write 'Makefile': $!";
unless ($options{'no-clean'}) {
......
This diff is collapsed.
This diff is collapsed.
# Announce: Rakudo Perl 6 compiler, Release #127 (2018.10)
On behalf of the Rakudo development team, I’m very happy to announce the
October 2018 release of Rakudo Perl 6 #127. Rakudo is an implementation of
Perl 6 on the Moar Virtual Machine[^1].
This release implements the 6.c version of the Perl 6 specifications.
It includes bugfixes and optimizations on top of
the 2015.12 release of Rakudo.
Upcoming releases in 2018 will include new functionality that is not
part of the 6.c specification, available with a lexically scoped
pragma. Our goal is to ensure that anything that is tested as part of the
6.c specification will continue to work unchanged. There may be incremental
spec releases this year as well.
The tarball for this release is available from <https://rakudo.org/files/rakudo>.
Please note: This announcement is not for the Rakudo Star
distribution[^2] — it’s announcing a new release of the compiler
only. For the latest Rakudo Star release, see
<https://rakudo.org/files/star>.
The changes in this release are outlined below:
New in 2018.10:
+ SPECIAL NOTES:
+ This is the first Rakudo release that comes with an additional
JS backend. See `6pad` project for running Perl 6 code directly
in your browser.
+ Deprecations:
+ Deprecated `gethostname()` in favor of `$*KERNEL.hostname` [f7fa5185]
+ Fixes:
+ Fixed/improved divide-by-zero errors in
`Rational.floor`/`.ceiling`/`.Str` [a639fa9c][6d70346c]
+ Fixed semantics of `[Nil]` [88e6de22]
+ Fixed issue with custom `bless` method [64137bd2]
+ Made nativecall's `postcircumfix:<[ ]>` return containers [be2d4cb4]
+ Fixed hash descriptor when doing `Hash[Int].new` [9acbf000][ea710414]
+ `Nil` is now allowed in initialization and assignment of hashes
[f61ba41a][605bcb39][7e86d4e3]
+ Fixed ContainerDescriptor for arrays with a dimension of three [a2e78ec8]
+ Fixed indexing of shaped arrays with a dimension higher than 3 [0307c366]
+ `.in-timezone`s value is now coerced to Int [c8438e6a]
+ Stub methods from roles are now verified [fd5d5bdf]
+ Fixed double-closing of handles in `IO::Handle.lines` when `:close` and
`$limit` are used [6edb142f]
+ Fixed closing of handles in `IO::Handle.lines` when `$limit`
is used [c1c75740]
+ Consistified Rat.base to fail instead of throw [a804ab57]
+ Fixed enforcing of return constraints on multi method stubs [abba67b2]
+ Various improvements to produced messages [cc2fcc9a][560e94ef]
[bf10f4c5][243a2f01][7d02b949][9894eda5][0243275d]
+ Additions:
+ [6.d] Constructs `$()`/`@()`/`%()` no longer have any `$/`-related
magic [bb88a032]
+ [6.d] DefiniteHOWs' (type smileys) default default is now the base
type [38b198c9]
+ Zero-Denominator Rationals are now normalized on creation [671c4115]
[75ec2248]
+ Made `my @a is List = 1,2,3,4` work [2bdf2b35]
+ Using `is Type` on `@` and `%` attributes is now allowed [b537ce2e]
+ Added a BOM on `open` for utf16 filehandles [959b89cf][479348f3]
+ Added initial support for Unicode 11.0 [5c272ee4]
+ Pluggable `MAIN` interface refactored, documented and tested
[f234b9af][35f3d83d][7c9b2955][33c24153][8c3a4131][fbfccfa2]][341190e2][24413b5f[2c43d2bf]
+ Usage message now limits itself to partially matching candidates
[0d1be77e]
+ Added additional dashed variants for utf16le and utf16be [4307996a]
+ Added `Parameter.coerce_type` method [0243275d]
+ Added `Code.cando` method to allow for `.cando` on all `Callable`s
[45eeab78][69533b50]
+ Removals:
+ Removed --encoding support [bea08ec6][31b19d09]
+ Efficiency:
+ Made Hash.push/append between 1.2x and 1.4x as fast [12cfde2a]
+ Made `"".ord` orders of magnitude faster [b22edce4]
+ Made `==` with Rationals up to 1.55x as fast [c5a2eb81]
+ Made Rational `===` Rational 2.47x as fast [97e8413b]
+ Made many cases of `for (range-like things)` up to 150x as fast
[2dd02751][645eeb52][dfd6450d][49baea70][89787028][2af789d7]
+ Made `[42]` not allocate anything anymore [8c4546bb]
+ Made `[@a]` and `[1,2,3]` about 1.4x as fast [e430813f]
+ Made `Array.List` coercion 1.5x as fast [3d405e89]
+ Made `.isa` about 2x as fast [4e8740c8]
+ Made `infix:<%%>` 10.42x as fast on natives [3d161a56]
+ Other minor optimizations [464a86b1][ab83b9d8][8cc3d5d7][b107cda5]
+ Internal:
+ Made `make` an only [369068ae]
+ Added skip-one method to appropriate `PredictiveIterator`s [e54885e5]
+ More things are now initialized at setting compile time
[06dfbf02][688cbac1][92735770]
+ Simplified initialization of `CompUnit::RepositoryRegistry`
[0425d927][8e1cd01a]
+ Introduced `IterationBuffer.List` [8c10da6a]
+ Use `nqp::create` for IterationBuffer instead of .new [84311b77]
+ Made sure `.STORE` only works on instances of mixy/baggy types [9daac683]
+ Added `$*INSIDE-EVAL` to mark that we're inside an `EVAL` [73b7c603]
The following people contributed to this release:
Zoffix Znet, Elizabeth Mattijsen, Paweł Murias, JJ Merelo, Tom Browder,
Bart Wiegmans, Jonathan Worthington, Will "Coke" Coleda,
Aleks-Daniel Jakimenko-Aleksejev, Samantha McVey, thebooort,
Juan Julián Merelo Guervós, Ben Davies, Fernando Correa de Oliveira,
Timo Paulssen, Daniel Green, MorayJ, Valentin Anger,
threadless-screw, Jeremy Studer, Nick Logan, finanalyst, Alexander,
Amir Aharoni, Claudio Ramirez, Luis F. Uceta, Nacho Mas, Richard Hainsworth,
Alex Schroeder, Bartosz Janus, Brad Gilbert, Jared Miller, Jason Cole,
Jonathan Beebe, Patrick Sebastian Böker, Rafael Schipiura,
Tzu-Li "tison" Chen, Tzu-Li Chen, sarna
If you would like to contribute or find out more information, visit
<https://perl6.org>, <https://rakudo.org/how-to-help>, ask on the
<perl6-compiler@perl.org> mailing list, or ask on IRC #perl6 on freenode.
Additionally, we invite you to make a donation to The Perl Foundation
to sponsor Perl 6 development: <https://donate.perlfoundation.org/>
(put “Perl 6 Core Development Fund” in the ‘Purpose’ text field)
The next release of Rakudo (#128), is tentatively scheduled for 2018-11-17.
A list of the other planned release dates is available in the
“docs/release_guide.pod” file.
The development team appreciates feedback! If you’re using Rakudo, do
get back to us. Questions, comments, suggestions for improvements, cool
discoveries, incredible hacks, or any other feedback – get in touch with
us through (the above-mentioned) mailing list or IRC channel. Enjoy!
Please note that recent releases have known issues running on the JVM.
We are working to get the JVM backend working again but do not yet have
an estimated delivery date.
[^1]: See <http://moarvm.org/>
[^2]: What’s the difference between the Rakudo compiler and the Rakudo
Star distribution?
The Rakudo compiler is a compiler for the Perl 6 language.
Not much more.
The Rakudo Star distribution is the Rakudo compiler plus a selection
of useful Perl 6 modules, a module installer, Perl 6 introductory
documentation, and other software that can be used with the Rakudo
compiler to enhance its utility.
# Announce: Rakudo Perl 6 compiler, Release #128 (2018.11)
On behalf of the Rakudo development team, I’m very happy to announce the
November 2018 release of Rakudo Perl 6 #128. Rakudo is an implementation of
Perl 6 on the Moar Virtual Machine[^1].
This release implements 6.c and 6.d versions of the Perl 6 specification.
6.c version of the language is available if you use the `use v6.c`
version pragma, otherwise 6.d is the default.
Upcoming releases in 2018 will include new functionality that is not
part of 6.c or 6.d specifications, available with a lexically scoped
pragma. Our goal is to ensure that anything that is tested as part of
6.c and 6.d specifications will continue to work unchanged. There may
be incremental spec releases this year as well.
The tarball for this release is available from <https://rakudo.org/files/rakudo>.
Please note: This announcement is not for the Rakudo Star
distribution[^2] — it’s announcing a new release of the compiler
only. For the latest Rakudo Star release, see
<https://rakudo.org/files/star>.
The changes in this release are outlined below:
New in 2018.11:
+ SPECIAL NOTES:
+ 🎆❇️🔥 Default language version is now `v6.d` 🔥❇️🎆 [46ef0ea0]
+ Deprecations:
+ Deprecated `.path`/`.args` in `Proc::Async`, use `.command`
instead [45bbc946]
+ Fixes:
+ Fixed `$*PERL.version` to always report the right version [c9ecfb7a]
+ Consistified `:U.pairup` with `:D.pairup` to return a Seq [d73272e4]
+ Provided a stable `.WHICH` for `Map` [4e0a1c24][052067fd]
+ Made sure `DEPRECATED` reports location correctly when
using `:up` [8561d0ae]
+ Fixed literal `\` in `tr///` [85107ec0]
+ Fixed tap add/remove race in `Supplier` and `Supplier::Preserving`
[7ee1f3c5][68d79e70]
+ `QuantHash`es now properly report `.of` and `.keyof` [8b93ec9f]
+ Added type constraints to port numbers in `IO::Socket::Async` [547f28ba]
+ Fixed re-initialization on some types of arrays [f1fa5adf]
[7262b4e8][49f07abe]
+ Gave 6.d correct `is rw` Proxy semantics [7d37f9aa]
+ Fixed `Match.^roles` [becbdeb9]
+ Fixed missing path volume after `..` is resolved [8854bbd3]
+ The `.values` method can now be used to change values in
object hashes [a728bb2d]
+ Fixed shaped dynamic variables like `my %*a{Int}` [bcdf87a6]
+ Made `my @a is Blob / Buf = ...` work [762c708f]
+ Object hashes and `QuantHash`es can now be used with
metaops [Hyper refactor]
+ Many improvements to the JS backend [32b7c089][f35dd301][9457f7e5]
[ea69c0a0][0e4969fe][9df074ba][78389aa2][1ef62aca][f460ad1a][cbbe16ed]
+ Improved error message when using placeholders with methods [deae5bcd]
[0896c301][48093d0d][0bda7dc1][90103f6d][68b44e33][8549c4c1]
+ Various improvements to produced messages [15c16e35][e6758492]
+ Additions:
+ Implemented `X::Language::TooLate` [3365094f]
+ `$*COLLATION.set` is no longer experimental [20c41ca5]
+ Added dynamic variable `$*FOLDING` [cec1f511]
+ Removals:
+ Removed unspecced `.allowed` attribute in `Pod::Block::Code` [5aba3e96]
+ Set operators `(<+)`, `≼`, `(>+)`, `` now die when used [951303f9]
[7a1a1868][81474bf9][5598f37d]
+ `Associative >>op<< Iterable` now dies, as the results are indeterminate
due to random hash key order [Hyper refactor]
+ Build system:
+ Fixed `t/*/*.t` rule in generated Makefile [d2c7e327]
+ Made running timing based tests optional [72b896c8]
+ Efficiency:
+ Made `Int eqv Int` 3x and `int eqv int` 5x as fast [fb9a0454][94dd0a41]
+ Made `ObjAt` `eqv` `ObjAt` also faster [5120d3d2]
+ Made `Hash`/`Map` slices about 5x as fast [6fe27894][b83179f0]
[c4da4c7e][9a2c4b44]
+ Optimized various operations on `Date` and `DateTime` making
them up to 3x as fast [11cb4fac][b6292fe9][08fac045][98d07cf6]
[b463746d][bf3eb8ec][a11d599f]
+ Made metaops use the fast path for `&[+=]`-like ops [e7ce194a]
+ Hyper operator refactor makes many things like
`%h >>+>> 1` 1.3x to 8x as fast [bfe2ad63][130cc817][0bc72e05]
[75c9456a][ec2848c4][f06e8582][73eb297f][194daab7][a575effe]
[c50cf82a][1a2b39dc][307a98bd][843118ea][6208c266][9221c08d]
[c03e71d5][78f64203][63ae9dcc][fa5215b6][d5a751d9][674a0837]
[8fa72681][80edefcf][cf5c8a09][534d8f65][7fad12b0][800d8fbb]
[c3f03e67][1ed2b098][21434dda][234e298b][e8285c01][32ab0d30]
[90ac0940][f7007ac0][dc67ee75][cae9847e][481dbf92][c4445649]
[19f0c842][86ce4f4e][50f2207b][2e5be5b8][1b7253df][64a47d87]
[005261a4][10693d16]
+ Internal:
+ Changed CORE.d setting compilation to propagate indicator flags [4a6d9108]
+ Made sure we don't add object to serialization context more
than once [3995e423]
+ New QAST to mbc compiler [edc4c054][6aafe18d][f8be2fa0][656a8045][bb43acdb]
+ Added `Hash.STORE(\keys,\values)` [faa19ab9]
+ Introduced `R:I.AssociativeIterableKeys` [6fe27894]
+ Various internal optimizations [5f1a81e0][1766435a][8e858c8d][00eb7b85]
[0fa6988c][bf3575cc][18ded174]
The following people contributed to this release:
Stefan Seifert, Elizabeth Mattijsen, Zoffix Znet,
Aleks-Daniel Jakimenko-Aleksejev, Paweł Murias, Timo Paulssen, Nick Logan,
Tom Browder, Rob Hoelz, Jonathan Worthington, Joelle Maslak, Donald Hunter,
Bart Wiegmans, Daniel Green, Fernando Correa de Oliveira,
Juan Julián Merelo Guervós, Samantha McVey
If you would like to contribute or find out more information, visit
<https://perl6.org>, <https://rakudo.org/how-to-help>, ask on the
<perl6-compiler@perl.org> mailing list, or ask on IRC #perl6 on freenode.
Additionally, we invite you to make a donation to The Perl Foundation
to sponsor Perl 6 development: <https://donate.perlfoundation.org/>
(put “Perl 6 Core Development Fund” in the ‘Purpose’ text field)
The next release of Rakudo (#129), is tentatively scheduled for 2018-12-15.
A list of the other planned release dates is available in the
“docs/release_guide.pod” file.
The development team appreciates feedback! If you’re using Rakudo, do
get back to us. Questions, comments, suggestions for improvements, cool
discoveries, incredible hacks, or any other feedback – get in touch with
us through (the above-mentioned) mailing list or IRC channel. Enjoy!
Please note that recent releases have known issues running on the JVM.
We are working to get the JVM backend working again but do not yet have
an estimated delivery date.
[^1]: See <http://moarvm.org/>
[^2]: What’s the difference between the Rakudo compiler and the Rakudo
Star distribution?
The Rakudo compiler is a compiler for the Perl 6 language.
Not much more.
The Rakudo Star distribution is the Rakudo compiler plus a selection
of useful Perl 6 modules, a module installer, Perl 6 introductory
documentation, and other software that can be used with the Rakudo
compiler to enhance its utility.
# Announce: Rakudo Perl 6 compiler, Release #129 (2018.12)
On behalf of the Rakudo development team, I’m very happy to announce the
December 2018 release of Rakudo Perl 6 #129. Rakudo is an implementation of
Perl 6 on the Moar Virtual Machine[^1].
This release implements 6.c and 6.d versions of the Perl 6 specification.
6.c version of the language is available if you use the `use v6.c`
version pragma, otherwise 6.d is the default.
Upcoming releases in 2019 will include new functionality that is not
part of 6.c or 6.d specifications, available with a lexically scoped
pragma. Our goal is to ensure that anything that is tested as part of
6.c and 6.d specifications will continue to work unchanged. There may
be incremental spec releases this year as well.
The tarball for this release is available from <https://rakudo.org/files/rakudo>.
Please note: This announcement is not for the Rakudo Star
distribution[^2] — it’s announcing a new release of the compiler
only. For the latest Rakudo Star release, see
<https://rakudo.org/files/star>.
The changes in this release are outlined below:
New in 2018.12:
+ Fixes:
+ Fixed infiniloops with some set operators [99d94db4][9f5cc8d1]
+ Fixed regression in handling of `"1"..9` [d92b155c]
+ Fixed use of `Proxy` in a class attribute using
the `Attribute`.`get_value`/`set_value` interface [a5411e45]
+ Fixed semantics of `minpairs`/`maxpairs` (ignore undefined values) [7bf7a2c6]
+ Fixed error on `@a > 2` if `@a` is a native array
+ Fixed error reporting on initializing shaped array with
improperly shaped data [fd216fec]
+ Negative indexes on native arrays are now checked properly [dd2af90c]
+ Fixed use of uninitialized value in `IO::Notification` [83d0056b]
+ Enums can now have private methods mixed in [3c2cfb22]
+ Fixed resource content lookup for `Distribution::Path` [370310b3]
+ Fixed precompilation when cwd gets changed at run time [e2e5cc53]
+ Shared library versions are now ignored on OpenBSD [5603128e]
+ Many improvements to the JS backend [1865db0d][fdd249a3][194c84b9]
[1dd59f10][52c2af5d][8b13655c][2869a48b][cf5432ae][758caa89]
[e0b943d0][a759f9d7]
+ Various improvements to produced messages [869b9e58][abfb9a40]
[79824db5][55d08c8f][24c8e172]
+ Additions:
+ Added `Endian` enum and implemented new methods in `blob8`/`buf8`
for reading/writing native values [46d4c9fe][011c6f11][f66861dc]
[f0279313][b781f8cc][543219c9][77182713][06156a7c]
+ Added `Kernel.endian` [2a761ca7][af43b159]
+ Implemented `Blob.readint` / `Buf.writeint` [4f14d713][fecfb22d]
[5cc0e02d][79dd1c8e][ceaf7218][631940c7][38afa2d6][e7b61aff]
+ Added `.native-descriptor` for async sockets [a4db9139][2fd90b1e]
+ Added `.Real` method to native arrays [dd3f91a2]
+ Implemented `last` and `LAST` in `whenever` blocks [890d628a]
+ Efficiency:
+ Made `<$rx>` interpolation 1.05x as fast [62243cd9]
+ Made simple regex matches 1.05x as fast [01c56b48]
+ Other minor optimizations [93ea7ed1][a0cb89a7][adb85609][6c2f3c83]
+ Internal:
+ Introduced a more generally usable `X::ArrayShapeMismatch` error [dd030145]
+ Internal micro-optimizations [38bc682b][f18432ea]
The following people contributed to this release:
Paweł Murias, Elizabeth Mattijsen, Aleks-Daniel Jakimenko-Aleksejev,
Stefan Seifert, Jonathan Worthington, Ben Davies, Petr Rockai, Nick Logan,
Samantha McVey, Timo Paulssen, Momo
If you would like to contribute or find out more information, visit
<https://perl6.org>, <https://rakudo.org/how-to-help>, ask on the
<perl6-compiler@perl.org> mailing list, or ask on IRC #perl6 on freenode.
Additionally, we invite you to make a donation to The Perl Foundation
to sponsor Perl 6 development: <https://donate.perlfoundation.org/>
(put “Perl 6 Core Development Fund” in the ‘Purpose’ text field)
The next release of Rakudo (#130), is tentatively scheduled for 2019-01-19.
A list of the other planned release dates is available in the
“docs/release_guide.pod” file.
The development team appreciates feedback! If you’re using Rakudo, do
get back to us. Questions, comments, suggestions for improvements, cool
discoveries, incredible hacks, or any other feedback – get in touch with
us through (the above-mentioned) mailing list or IRC channel. Enjoy!
Please note that recent releases have known issues running on the JVM.
We are working to get the JVM backend working again but do not yet have
an estimated delivery date.
[^1]: See <http://moarvm.org/>
[^2]: What’s the difference between the Rakudo compiler and the Rakudo
Star distribution?
The Rakudo compiler is a compiler for the Perl 6 language.
Not much more.
The Rakudo Star distribution is the Rakudo compiler plus a selection
of useful Perl 6 modules, a module installer, Perl 6 introductory
documentation, and other software that can be used with the Rakudo
compiler to enhance its utility.
# Notes and hints for working with Rakudo NQP and Pod
## Traps for the Perl 6 programmer
+ **DO NOT use '$0' in match results** - The Perl 6 shorthand for a
match variable '**$0**' doesn't work in NQP. Instead, use **$/[0]**
for the zeroeth match. Note the parser will be very confused
otherwise and it currently cannot point to the error.
+ **DO NOT use 'nqp::say'** - The routine '**say**' is an NQP built-in
and it does not need the '**nqp::**' prefix. You can sometimes get
away with using '**nqp::say**' but, when you least expect it, the
parser will fail without a helpful error message.
+ **DO use 'nqp::die'** - As opposed to '**say**', '**die**' does need
to be qualified with '**nqp::**'. If used without the '**nqp::**'
prefix, you sometimes may get a very unhelpful error message.
+ **BE WARNED about '$\<some-match-var>' inside a sub with a '$/'
arg** - Use the full syntax for a match variable
('**/$<some-match-var**') for more reliable (or at least
self-documenting) results.
+ **BE WARNED about '$\<a-match-var>' versus
'$\<a-match-var>\*\*1'** - The first form will result in a scalar
object while the '\*\*' form will result in an array. Either form
may be appropriate for the situation, but proper handling will vary
for each.
+ **BE WARNED about "return if (...)" statements** - Sometimes they
work and sometimes not. But the failure message is usually good
enough to find the offending code.
For example, all these failed:
```
return if !nqp::elems(@arr);
return unless nqp::elems(@arr);
```
but this finally worked:
```
if !nqp::elems(@arr) {
return;
}
```
## Pod compilation overview
Pod is parsed as it is discovered during the parsing phase of each
compilation unit. Each pod object (string, paragraph, block,
configuration, term, heading, item, etc.) is serialized as it is
completed, and that result is a QAST node. The appropriate assembly of
QAST nodes (which have also been marked as a *compile_time_constant*)
are grouped into instances of pod classes as defined in
**src/core/Pod.pm6**.
## Pod block text content handling
Text inside pod blocks that are contents rather than markup is
comprised of intermixed text and formatting code characters. Newlines
and contiguous whitespace may or may not be significant depending upon
the general block type (abbreviated, paragraph, delimited, or
declarator) or block identifier (e.g., *code*, *input*, *output*,
*defn*, *comment*, or *data*).
The content as it is parsed in Grammar.nqp is first broken into
individual characters which are then assigned to one of three token
groups: regular text, text with formatting code, and text that is to
be unchanged from its input form (*code*, *input*, and *output*).
The regular text and intermingled formatted text are then divided into
two more categories: text that will form one or more paragraphs and
text that is part of a table. Ultimately, each paragraph of text
should be grouped into the @contents array of a single