Commit c3b35511 authored by Daniel Dehennin's avatar Daniel Dehennin

New upstream version 2016.09

parent a9c5af6b
# How to Contribute to Rakudo Perl 6
Contributions to Rakudo are very welcome.
To make the process smoother for you and the contributors, please read the note
below.
## The Contribution Process
For small changes, please submit a pull request on GitHub.
This includes
* bug fixes
* improvements to the build process
* implementation of features that are already specified
If you want to implement a new language feature or built-in of your own
design, please discuss it first in the `#perl6-dev` IRC channel on
irc.freenode.org.
If you get no feedback on your pull request, feel free to nudge us in the
IRC channel mentioned above.
If you want to contribute large amounts of code, please follow the
[Contributor License Agreement
process](http://www.perlfoundation.org/contributor_license_agreement) from the
Perl Foundation.
For small contributions, you agree to place your code under the terms of the
license of the code that Rakudo is under.
Please separate your commits for different issues into different
branches, and please squash out any intermediate commits, like
adding/removing debug output.
## Test Coverage
New features should be accompanied by test cases in the [roast
repository](https://github.com/perl6/roast/). Please ask for direct push
access in the `#perl6-dev` or `#perl6` IRC channels on freenode, or submit a
pull request.
Bug fixes should also come with test cases (if practical), though we prefer
bug fixes without test cases to no contribution at all. In this case, the
corresponding bug ticket will stay open, and gets the `testsneeded` tag.
If you add the tests to a new test file, please include that filename in the
`t/spectest.data` file in the Rakudo repository.
## Coding Style
Please match your coding style to that of the code around it.
We aren't terribly strict when it comes to coding style, but here are some
very basic guidelines:
* Indentation happens with four spaces
* Use uncuddled `else`, so use a newline between a closing curly brace and
the `else` keyword
* Perl 5 code (part of the build system) should `use strict; use warnings;`
and loosely follow [perlstyle](http://perldoc.perl.org/perlstyle.html).
## Have Fun!
Enjoy the ride, and please join our IRC channels to meet the great community.
......@@ -555,7 +555,7 @@ N: Mikhail Khorkov
E: m.s.khorkov@gmail.com
N: Moritz Lenz
E: moritz@faui2k3.org
E: moritz.lenz@gmail.com
U: moritz
D: Test infrastructure, tests, general Rakudo hacking
......
#! perl
# Copyright (C) 2009 The Perl Foundation
use 5.010;
use 5.10.1;
use strict;
use warnings;
use Text::ParseWords;
......@@ -270,8 +270,8 @@ MAIN: {
unless ($win) {
$config{'m_cleanups'} = " \$(M_GDB_RUNNER) \\\n \$(M_VALGRIND_RUNNER)";
$config{'m_all'} = '$(M_GDB_RUNNER) $(M_VALGRIND_RUNNER)';
$config{'m_install'} = "\t" . '$(PERL5) tools/build/create-moar-runner.pl "$(MOAR)" perl6.moarvm $(DESTDIR)$(PREFIX)/bin/perl6-gdb-m "$(PERL6_LANG_DIR)/runtime" "gdb" "$(M_LIBPATH)" "$(PERL6_LANG_DIR)/lib" "$(PERL6_LANG_DIR)/runtime"' . "\n"
. "\t" . '$(PERL5) tools/build/create-moar-runner.pl "$(MOAR)" perl6.moarvm $(DESTDIR)$(PREFIX)/bin/perl6-valgrind-m "$(PERL6_LANG_DIR)/runtime" "valgrind" "$(M_LIBPATH)" "$(PERL6_LANG_DIR)/lib" "$(PERL6_LANG_DIR)/runtime"';
$config{'m_install'} = "\t" . '$(M_RUN_PERL6) tools/build/create-moar-runner.pl "$(MOAR)" perl6.moarvm $(DESTDIR)$(PREFIX)/bin/perl6-gdb-m "$(PERL6_LANG_DIR)/runtime" "gdb" "$(M_LIBPATH)" "$(PERL6_LANG_DIR)/lib" "$(PERL6_LANG_DIR)/runtime"' . "\n"
. "\t" . '$(M_RUN_PERL6) tools/build/create-moar-runner.pl "$(MOAR)" perl6.moarvm $(DESTDIR)$(PREFIX)/bin/perl6-valgrind-m "$(PERL6_LANG_DIR)/runtime" "valgrind" "$(M_LIBPATH)" "$(PERL6_LANG_DIR)/lib" "$(PERL6_LANG_DIR)/runtime"';
}
unless (@errors) {
......@@ -367,9 +367,9 @@ General Options:
--backends=jvm,moar
Which backend(s) to use (or ALL for all of them)
--gen-nqp[=branch]
Download and build a copy of NQP
Download, build, and install a copy of NQP before writing the Makefile
--gen-moar[=branch]
Download and build a copy of MoarVM to use
Download, build, and install a copy of MoarVM to use before writing the Makefile
--make-install Install Rakudo after configuration is done
--moar-option='--option=value'
Options to pass to MoarVM's Configure.pl
......@@ -384,6 +384,11 @@ General Options:
--makefile-timing Enable timing of individual makefile commands
--no-clean Skip cleanup before installation
Please note that the --gen-moar and --gen-nqp options are there for convenience
only and will actually immediately - at Configure time - compile and install
moar and nqp respectively. They will live under the path given to --prefix,
unless other targeting options are used.
Configure.pl also reads options from 'config.default' in the current directory.
END
......
appveyor.yml
blib/Perl6/.gitignore
Configure.pl
CONTRIBUTING.md
CREDITS
docs/announce/2009-02
docs/announce/2009-03
......@@ -94,7 +95,9 @@ docs/announce/2016.05.md
docs/announce/2016.06.md
docs/announce/2016.07.1.md
docs/announce/2016.07.md
docs/announce/2016.08.1.md
docs/announce/2016.08.md
docs/announce/2016.09.md
docs/architecture.html
docs/architecture.svg
docs/ChangeLog
......@@ -108,6 +111,7 @@ docs/metaobject-api.pod
docs/module_management.md
docs/obtaining-a-commit-bit.pod
docs/ops.markdown
docs/release_guide_automated.md
docs/release_guide.pod
docs/ROADMAP
docs/running.pod
......
......@@ -39,14 +39,20 @@ any administrator privileges for carrying out this step.
### Configuring Rakudo to run on MoarVM
To automatically download and build a fresh MoarVM and NQP, run:
To automatically download, build, and install a fresh MoarVM and NQP, run:
perl Configure.pl --gen-moar --gen-nqp --backends=moar
Please be aware, that this will install MoarVM and NQP into your given
--prefix before Configure.pl exits.
Alternatively, feel free to git clone https://github.com/perl6/nqp and
https://github.com/MoarVM/MoarVM manually and install them individually.
### Configuring Rakudo to run on the JVM
Note that to run Rakudo on JVM, JDK 1.7 must be installed. To automatically
download an build a fresh NQP, run:
download, build, and install a fresh NQP, run:
perl Configure.pl --gen-nqp --backends=jvm
......@@ -55,12 +61,18 @@ need to modify your NQP runner to limit memory use. e.g. edit the
nqp-j / nqp-j.bat executable (found wherever you installed to, or in the
`install/bin` directory) to include `-Xms500m -Xmx2g` as options passed to java.
Please be aware, that this will install NQP into your given --prefix
before Configure.pl exits.
Alternatively, feel free to git clone https://github.com/perl6/nqp manually
and install it individually.
### Multiple backends at the same time
By supplying combinations of backends to the `--backends` flag, you
can get two or three backends built in the same prefix. The first
backend you supply in the list is the one that gets the `perl6` name
as a symlink, and all backends are installed seperately as
as a symlink, and all backends are installed separately as
`perl6-m` or `perl6-j` for Rakudo on
MoarVM, or JVM respectively.
......@@ -93,36 +105,16 @@ For questions about MoarVM, you can join #moarvm on freenode.
## Reporting bugs
Bug reports should be sent to "rakudobug@perl.org", which will
automatically create a ticket in
[the RT system](https://rt.perl.org/rt3/).
Please include or attach any sample source code that exhibits the bug,
and include either the release name/date or the git commit identifier.
You find that information in the output from `perl6 --version` (or in
the first line of `git log`, if Rakudo fails to build). There's no need
to cc: the perl6-compiler mailing list, as the RT system will handle
this on its own. Please start your subject with one (or more) of the
following text, including the brackets:
* [BUG] - this is an actual bug
* [LTA] - a "Less Than Awesome" diagnostic or warning is being generated
* [JVM] - issue only occurs on the JVM
* [PERF] - any performance related issue
* [UNI] - related to unicode support
* [@LARRY] - this ticket requires a decision from the design team
If you find a bug in MoarVM or NQP, you can either discuss it on the IRC
and have it reported for you, or you can submit an issue to the issue
trackers on github for perl6/nqp or moarvm/moarvm.
Please see https://github.com/rakudo/rakudo/wiki/rt-introduction
for more information about how and where to report issues with
Rakudo, its components, and the Perl 6 language specification.
## Submitting patches
If you have a patch that fixes a bug or adds a new feature, please
create a pull request using github's pull request infrastructure.
Please separate your commits for different issues into different
branches, and please squash out any intermediate commits, like
adding/removing debug output.
See [our contribution guidelines](https://github.com/rakudo/rakudo/blob/nom/CONTRIBUTING.md) for more information.
## Line editing and tab completion
......
New in 2016.09
+ Fixes:
+ Various improvements to the content of error messages
+ Defaults on a slurpy params now throw instead of crashing at the VM level
+ Distribution::Path now handles native libraries correctly
+ Junctions now work in .classify
+ Control statements (e.g. `next`) in toplevel REPL now show useful error
+ IO::Handle.encoding now returns correct values
+ .comb/.split on binary handles now throws X::NYI
+ Fixed filehandle leak in precompilation
+ Regex in .grep and .first on Pairs now works correctly
+ Pod parser returns proper Bool instead of Int on passed config options
+ Fixed PERL6_TEST_DIE_ON_FAIL=1 exiting the test suite too soon
or dieing on failing tests inside TODOed subtests
+ Fixed failure to accept enums as types for optional arguments
+ Fixed blocking bug when using socket accept and threads
+ Fixed fatal bug when using Non-ASCII tokens in regex/grammars
+ Fixed missing adverbs and candidates in Cool.split; made same as Str.split
+ Fixed missing adverbs in Cool.trans; made same as Str.trans
+ Fixed NativeCall CArray hanging when created from empty list
+ Fixed various issues with reading chars from an async socket (uncatchable
exceptions on decode errors, and mis-handling of graphemes and multi-byte
sequences over packet boundaries)
+ Fixed "%%foo @@bar" interpolation trying to find %foo and @bar variables
+ Fixed mis-compilation and possible compiler crash when using a construct
like /$<cap>=@(1,2)/
+ Fixed a memory leak involving EVAL
+ Fixed a multi-dispatch cache unbounded growth bug involving calls
with many named arguments
+ Fixed warnings emitted when using hyper operators on two hashes
+ Channel.elems now returns a Failure rather than eating all values
+ Fixed type error ion IO::Path.rw
+ Fixed …, ???, and !!! yadas not working to stub classes
+ Fixed tab-completion issues with non-identifiers in REPL
+ Additions:
+ Coercions now work in return types
+ Added RAKUDO_EXCEPTIONS_HANDLER env var to control exceptions output
+ IO::Handle.slurp-rest now has :close flag
+ CompUnit::Repository::Installation now cleans up short-name
folders when empty
+ Added support for very large numbers in :42foo colon pairs
+ Added a .Map coercer for object hashes
+ All Unicode quotes can now be used as quoters inside qqww/qww
+ LEFT/RIGHT DOUBLE PARENTHESIS characters can now be used with q and others
+ Unicode digits can now be used with Match variables ($١), quote
pairs (:۳<12>), negative numbers (-١), and radix bases (:۳("22"))
+ Efficiency:
+ Numerous improvements in CUR, offering up to 10x faster module loading
+ Baggy.ACCEPTS(Baggy) is now about 25x faster
+ Baggy eqv Baggy is now at least 10x faster
+ Infix === now checks identicality, offering performance gains on large
objects, such as a Bag with 1000 elements
+ Many metaops are now about 10% faster
+ Made Junction.Bool|ACCEPTS about 2x faster
+ Improvement in performance of IO::Path::child
+ Made permutations() about 5x faster
+ Made List.permutations about 40x faster
+ Made combinations() about 1.8x faster
+ Made List.combinations about 7x faster
+ Made Unix's canonpath several times faster for simple paths
+ Made Buf|Blob.reverse 1.5x faster
+ Made .IO.lines about 10% faster on large files
+ Changed APIs:
+ The operator precedence configuration rule `O()` has been changed to be
more precompilation-friendly; rather than taking a string containing
colonpairs, it now takes named arguments directly. This is not
strictly a Perl 6 change, but rather a change in NQP, and thus only
applies if you're doing fairly involved hacking on the grammar. If the
sentences above made no sense to you, your code is not affected by
this change.
New in 2016.08.1
+ Fixes:
+ Updated NQP version to avoid broken tag
New in 2016.08
+ Fixes:
+ Numerous improvements to content of error messages and addition
......@@ -220,7 +295,7 @@ New in 2016.06
+ return, next, last, and redo are now all faster
+ infix:<,> about 40% faster
+ numerous other smaller or edge-case speed improvements
+ Deprecations:
+ Deprecations:
+ The "is_approx" sub (note underscore) from Test
New in 2016.05
......@@ -539,7 +614,7 @@ New in 2015.10:
+ The new .self method is the identity method on anything
+ Negative integers are now allowed in the parameter slot
+ List associative operators can now be autoprimed, including Xop and Zop
+ Incompatible Changes
+ Incompatible Changes
+ Array.push is now used for pushing one element (mostly); Array.append
exists for pushing multiple values. Same for 'unshift'/'prepend'
+ Basic arithmetic operations ('+', '*', '-', '/') on Range objects
......@@ -763,7 +838,7 @@ New in 2015.05
+ Make List.pick about 3% faster, List.pick(*) about 7% faster
+ Implement new @*INC handling (about 30% faster startup time)
(bare startup time is now below 100 ms on some machines)
+ NativeCall:
+ NativeCall:
+ Implemented CUnions which map to the union C type definition
+ Implemented HAS declarator for attributes to mark it embedded into the
CStruct or CUnion
......
# Announce: Rakudo Perl 6 compiler, Release 2016.08.1
On behalf of the Rakudo development team, I'm announcing an
out-of-schedule release of the Rakudo Perl 6 compiler.
Rakudo is an implementation of Perl 6 on the Moar Virtual Machine[^1].
This release is a point release in addition to the regular, monthly
releases. Rakudo 2016.08 (note: no .1) references a problematic NQP[^3] git tag.
While testing did not reveal any issues when building 2016.08 Rakudo from
scratch, users who pulled in new changes into existing repositories had build
issues where the configuration script was failing to find that NQP tag.
The 2016.08.1 NQP was released to fix the tag issues and Rakudo 2016.08.1 is
being released as a pre-emptive measure.
The tarball for this release is available from <http://rakudo.org/downloads/rakudo/>.
New in 2016.08.1:
+ No changes, other than an updated build reference to the new NQP tag
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
<http://rakudo.org/downloads/star/>.
The next release of Rakudo (#102), is tentatively scheduled for 2016-08-20.
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?
[^3]: NQP stands for 'Not Quite Perl', which is a language/environment
that Rakudo is largely written in. See https://github.com/perl6/nqp
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, the most recent
incarnation of the “Using Perl 6” book, and other software that can
be used with the Rakudo compiler to enhance its utility.
# Announce: Rakudo Perl 6 compiler, Release #103 (2016.09)
On behalf of the Rakudo development team, I’m very happy to announce the
September 2016 release of Rakudo Perl 6 #103. 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, but no new features.
Upcoming releases in 2016 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 <http://rakudo.org/downloads/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
<http://rakudo.org/downloads/star/>.
The changes in this release are outlined below:
New in 2016.09:
+ Fixes:
+ Various improvements to the content of error messages
+ Defaults on a slurpy params now throw instead of crashing at the VM level
+ Distribution::Path now handles native libraries correctly
+ Junctions now work in .classify
+ Control statements (e.g. `next`) in toplevel REPL now show useful error
+ IO::Handle.encoding now returns correct values
+ .comb/.split on binary handles now throws X::NYI
+ Fixed filehandle leak in precompilation
+ Regex in .grep and .first on Pairs now works correctly
+ Pod parser returns proper Bool instead of Int on passed config options
+ Fixed PERL6_TEST_DIE_ON_FAIL=1 exiting the test suite too soon
or dieing on failing tests inside TODOed subtests
+ Fixed failure to accept enums as types for optional arguments
+ Fixed blocking bug when using socket accept and threads
+ Fixed fatal bug when using Non-ASCII tokens in regex/grammars
+ Fixed missing adverbs and candidates in Cool.split; made same as Str.split
+ Fixed missing adverbs in Cool.trans; made same as Str.trans
+ Fixed NativeCall CArray hanging when created from empty list
+ Fixed various issues with reading chars from an async socket (uncatchable
exceptions on decode errors, and mis-handling of graphemes and multi-byte
sequences over packet boundaries)
+ Fixed "%%foo @@bar" interpolation trying to find %foo and @bar variables
+ Fixed mis-compilation and possible compiler crash when using a construct
like /$<cap>=@(1,2)/
+ Fixed a memory leak involving EVAL
+ Fixed a multi-dispatch cache unbounded growth bug involving calls
with many named arguments
+ Fixed warnings emitted when using hyper operators on two hashes
+ Channel.elems now returns a Failure rather than eating all values
+ Fixed type error ion IO::Path.rw
+ Fixed …, ???, and !!! yadas not working to stub classes
+ Fixed tab-completion issues with non-identifiers in REPL
+ Additions:
+ Coercions now work in return types
+ Added RAKUDO_EXCEPTIONS_HANDLER env var to control exceptions output
+ IO::Handle.slurp-rest now has :close flag
+ CompUnit::Repository::Installation now cleans up short-name
folders when empty
+ Added support for very large numbers in :42foo colon pairs
+ Added a .Map coercer for object hashes
+ All Unicode quotes can now be used as quoters inside qqww/qww
+ LEFT/RIGHT DOUBLE PARENTHESIS characters can now be used with q and others
+ Unicode digits can now be used with Match variables ($١), quote
pairs (:۳<12>), negative numbers (-١), and radix bases (:۳("22"))
+ Efficiency:
+ Numerous improvements in CUR, offering up to 10x faster module loading
+ Baggy.ACCEPTS(Baggy) is now about 25x faster
+ Baggy eqv Baggy is now at least 10x faster
+ Infix === now checks identicality, offering performance gains on large
objects, such as a Bag with 1000 elements
+ Many metaops are now about 10% faster
+ Made Junction.Bool|ACCEPTS about 2x faster
+ Improvement in performance of IO::Path::child
+ Made permutations() about 5x faster
+ Made List.permutations about 40x faster
+ Made combinations() about 1.8x faster
+ Made List.combinations about 7x faster
+ Made Unix's canonpath several times faster for simple paths
+ Made Buf|Blob.reverse 1.5x faster
+ Made .IO.lines about 10% faster on large files
+ Changed APIs:
+ The operator precedence configuration rule `O()` has been changed to be
more precompilation-friendly; rather than taking a string containing
colonpairs, it now takes named arguments directly. This is not
strictly a Perl 6 change, but rather a change in NQP, and thus only
applies if you're doing fairly involved hacking on the grammar. If the
sentences above made no sense to you, your code is not affected by
this change.
The following people contributed to this release:
Zoffix Znet, Elizabeth Mattijsen, Jonathan Worthington, Daniel Green,
Tom Browder, Jan-Olof Hendig, Will "Coke" Coleda, Stefan Seifert, LemonBoy,
Pawel Murias, Timo Paulssen, Itsuki Toyota, Christian Bartolomäus,
Arne Skjærholt, Moritz Lenz, Jonathan Stowe, Rob Hoelz, Armand Halbert,
Brock Wilcox, Wenzel P. P. Peppmeyer, Larry Wall, Altai-man, Steve Mynott,
Nick Logan, Aleks-Daniel Jakimenko-Aleksejev, Thor Michael Støre,
Jonas Kramer, Douglas L. Schrag, cygx, dmaestro, Sterling Hanenkamp,
Leon Timmermans
If you would like to contribute or find out more information, visit
<http://perl6.org>, <http://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 (#104), is tentatively scheduled for 2016-10-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, the most recent
incarnation of the “Using Perl 6” book, and other software that can
be used with the Rakudo compiler to enhance its utility.
......@@ -2,6 +2,10 @@
=head1 release_guide.pod - guide to Rakudo releases
B<< NOTE: this guide is for a manual release process. You may want
to use the automated process described in
L<docs/release_guide_automated.md|https://github.com/rakudo/rakudo/blob/nom/docs/release_guide_automated.md> >>
Rakudo’s development release cycle is the third Saturday of
each month.
......@@ -419,6 +423,7 @@ Previous releases were bundled as part of monthly Parrot releases.
2016-07-16 Rakudo #101 "2016.07" (Zoffix)
2016-07-18 2016.07.1 (Zoffix)
2016-08-20 Rakudo #102 "2016.08" (Zoffix)
2016-08-20 2016.08.1 (Zoffix)
=head1 COPYRIGHT
......
# Guide for Automated Release of Rakudo Compiler
This document describes the step to perform an automated release of the Rakudo
Compiler. While not required, it can be useful to be familiar with the
[manual release process](release_guide.pod), so you know what steps the build
robot is performing.
---
## Missing Pieces
Currently, the automated process does not handle the following items:
### Leap Seconds
Use the script to update the leap seconds table.
**IMPORTANT:** ensure the changes are correct. If future known leap seconds
were added manually, the script may end up removing them.
```bash
perl tools/update-tai-utc.pl
git diff
# Ensure changes look good
git commit -m 'Update leap seconds table' src/core/Rakudo/Internals.pm
git push
```
### Copyright
If it's a month relatively early in the calendar year, double-check that the
copyright date in the README file includes the current year. (It's not necessary
to update copyright dates in other files, unless you know that a given file has
been modified in a year not reflected by the file’s copyright notice.)
### Deprecations
Check if any DEPRECATED code needs to be removed because the end of the
deprecation cycle is reached. One way of doing this, is to grep on the
YYYYMM of the release (e.g. 201612 for the 2016.12 release). If you find
any occurrences, remove the code and make sure the spectest is still ok.
### JVM Backend
Due to several issues (test failures, failure with Inline::Perl5 loading)
JVM *Rakudo* backend is currently not made and tested. You can follow the
[manual release process](release_guide.pod) and [ask
Zoffix](https://twitter.com/zoffix) to enable the JVM backend logic.
---
## Sources
If needed, you can look at the [source of the release
bot](https://github.com/zoffixznet/na); the brunt of the work done by
[Perl-6-enhanced bash
scripts]https://github.com/zoffixznet/na/tree/master/lib/NA/ReleaseScript].
The [Perl6.Fail Web App source code](https://github.com/zoffixznet/r6)
is also available.
## Dates
Currently, the release happens on the third Saturday of the month, shortly
after [MoarMV](https://github.com/MoarVM/MoarVM/) is released by a separate
team. You can inquire the release robot in #perl6-dev IRC channel on when
the next release date is or view it on [Perl6.Fail release stats
page](http://perl6.fail/release/stats):
> &lt;Zoffix&gt; NeuralAnomaly: status<br>
> &lt;NeuralAnomaly&gt; Zoffix, [✔] Next release will be in 1 week and 5 days.
Since last release, there are 35 new still-open tickets (0 unreviewed and 0
blockers) and 0 unreviewed commits. See http://perl6.fail/release/stats for
details
## Preparation
### Perl6.Fail Web App
The [perl6.fail](https://perl6.fail) web app helps track RT tickets and
changelog entries, to ensure on the release date there are no release-blockers
and all changes have been recorded in [the changelog](ChangeLog).
See [perl6.fail/about](https://perl6.fail/about) for login credentials
information. Only release managers can mark tickets as reviewed. If the app
doesn't recognize you as a release manager, [ask
Zoffix](https://twitter.com/zoffix) to add you.
### Release-Blocking Tickets
Throughout the month, log in on [perl6.fail](https://perl6.fail) regularly and
review new tickets for whether they are blockers. Click the checkmark next to
reviewed tickets. Click the warning-sign to indicate the ticket is a release
blocker. Which tickets are blockers is left to your discretion, but anything
that has a large impact on users is worth being addressed prior to release.
### ChangeLog Entries
The app also lets you track which commits have been added to the
[the changelog](ChangeLog). The commits can be viewed in the *Commits* tab on
the [release stats page](http://perl6.fail/release/stats).
Add anything that should be known to users into the [the changelog](ChangeLog).
Once a commit has been reviewed, click the question-mark button next to
the commit sha to mark the commit as reviewed.
### Reminders
About a week before the release, NeuralAnomaly will automatically
remind #perl6-dev users about the upcoming release. You can also trigger the
reminder manually with the `remind` command:
> &lt;Zoffix&gt; NeuralAnomaly: remind<br>
> &lt;NeuralAnomaly&gt; Reminder! Next release will be in 1 week and 0 days.
Since last release, there are 125 new still-open tickets (15 unreviewed and 0
blockers) and 4 unreviewed commits. See https://perl6.fail/release/stats for
details
Also, a few days before the release, remind users to double check
[the changelog](ChangeLog) to ensure the changes you've been adding during the
month accurately reflect what the commits introduced.
## Release Date
The NeuralAnomaly release bot will accept some commands only from release
managers. Ensure you are connected to the IRC with the nick and hostname the
bot recognizes. [Ask Zoffix](https://twitter.com/zoffix) to add you to the
list, if needed.
### Initiate Release
On the release date, wait until the MoarVM release has been completed, then
issue the `release` command to NeuralAnomaly. If MoarVM hasn't been released,
there are unreviewed tickets, or blocking tickets, the bot will not proceed
and will tell you about it.
If the prerequisites are good, the bot will ask for the "secret number" to
proceed. This is mostly to prevent accidental triggering of the command. Tell
the bot the current day of the month—that's the secret number:
> &lt;Zoffix&gt; NeuralAnomaly, release<br>
> &lt;NeuralAnomaly&gt; test mode is OFF. This is the real deal—we are
releasing! Guess the number I'm think of to proceed.<br>
> &lt;Zoffix&gt; NeuralAnomaly: 17<br>
> &lt;NeuralAnomaly&gt; Good guess! Starting release [...]
The bot will then proceed with testing and releasing NQP and Rakudo,
informing about completed steps occasionally. You can watch the progress
live, at the URL given by NeuralAnomaly. **You can abort the process at any
time, by issuing `abort` command to the bot**
> &lt;Zoffix&gt; NeuralAnomaly: abort
> &lt;NeuralAnomaly&gt; Zoffix, what? Why?! What happened‽‽ Release process aborted.
The process will be automatically aborted if any test failures are encountered or
if any of the commands used during the release return a non-zero exit status.
An aborted process cannot be restarted, and you must start from the beginning.
### Final Confirmation
Once NeuralAnomaly successfully completes all of the testing and prepares the
tarballs, the bot will ask for the final confirmation. You confirm it by
issuing `go` command. This will cause the bot to upload the release tarballs to
[Rakudo.org](http://rakudo.org) and email the release announcement. Once that is
completed, NeuralAnomaly will announce on IRC that release has been completed.
> &lt;NeuralAnomaly&gt; all tests passed. Ready to finalized the release. Just say go<br>
> &lt;Zoffix&gt; NeuralAnomaly: go
### Wikipedia
Update the Wikipedia entry at http://en.wikipedia.org/wiki/Rakudo with the new
release version.
### Celebrate with the appropriate amount of fun
......@@ -162,16 +162,20 @@ our class CArray is repr('CArray') is array_type(Pointer) {
multi method new() { nqp::create(self) }
multi method new(*@values) { self.new(@values) }
multi method new(@values) {
nextsame unless @values;
my $result := self.new();
my int $n = @values.elems;
my int $i;
$result.ASSIGN-POS($n - 1, @values.AT-POS($n - 1));
while $i < $n {
$result.ASSIGN-POS($i, @values.AT-POS($i));
$i = $i + 1;
}
$result;
if @values.elems -> $n {
my int $elems = $n - 1;
my $result := nqp::create(self); # XXX setelems would be nice
$result.ASSIGN-POS($elems,@values.AT-POS($elems)); # fake setelems