2020.06
On behalf of the Rakudo development team, I’m very happy to announce the
June 2020 release of Rakudo #136. Rakudo is an implementation of
the Raku1 language.
The source tarball for this release is available from
https://rakudo.org/files/rakudo.
Pre-compiled archives will be available shortly.
New in 2020.06:
- SPECIAL NOTES:
- Results of
dir
routine called with dirty base path are presented
as cleaned up for some paths (like///
ora/../a
) unlike
before. While compatibility with most of other cases is preserved
and no ecosystem fallout was observed, be cautious of the possible
observable changes if the code does not clean dirty paths usingcleanup
method. - Since this release, when you start Raku with "-" as a single positional parameter, it
will now check if STDIN is connected to a terminal. If it is, then
the REPL will be started, rather than appearing to freeze waiting
for the user to enter something and issue an EOF. If STDIN is not
connected to a terminal, then Raku will read from STDIN and process
that as the source of a program. - The
run
routine,Proc.spawn
andProc::Async.new
are
extended with a new argument:$win-verbatim-args
defaulting to
False
. If the argument is left off or set to False, the
arguments are quoted according to the Microsoft convention. This
is identical to Rakus previous behavior and thus backwards
compatible. When passing True the passed arguments are
concatenated with a single space. No other processing takes
place. This allows to manually quote the arguments as necessary.
- Results of
- Changes:
- Support verbatim argument handling for
Proc
[709941c][9a75738] - Signatures of
slurp
andspurt
routines not accepting redundant arguments is
now compile time error rather than run-time one [22f4344] - The
Distro.desc
method now states codename for MacOS [b4b2a5e] - The
gist
method output for multi-dimensional arrays is truncated now [cfc3e57][4bfe5bd] - Parametrization a variable type in form
my $foo is Type[Foo, Bar]
works for all types now [de43f19] - The
rotate
method now returnsSeq
instead ofList
[4b501bd] - Add CACHEDIR.TAG to mark cache dirs as cache [37646b8][c3bdb61][ef90599]
- Improve GNU C++ name mangling [4f672c2]
- Make
Instant.raku
output simpler [c0b5fb2] - Improve smartmatching against
Mu
/Any
/Junction
types
(Mu.new ~~ Mu
does not die anymore,any(Mu, Any) ~~ Mu
returnsTrue
now) [3b4794f][840d3e8]
- Support verbatim argument handling for
- Fixes:
- Fix code objects created BEGIN time EVAL getting lost in precompilation [537f887][169f63d]
- The
is
routine fromTest
module now handles types that cannot be stringified and
compares them usingraku
method now [c9e9462] - Fix various JVM and JS backend issues [8e5b610][2b81f97]
[12f8f1e][5b86436][1464b35][a059373][9fe471c] - Fix BEGIN time
EVAL
accidentally running CHECK phasers of the outer comp unit [eeb4f43][b874c68] - Fix results o
"١٢٣".Numeric
and"١٢٣".Int
[c2e8b22] - Fix race in
PIO
method ofIO::Handle
[f33ce01] - Fix
Date(now)
call [9dcbc5f] - Fix
.comb(Str)
to ensure non-overlapping results [8d5a0f7] - Fix
Instant.raku
for Rational values [f506cc0] - Fix sorting of 2 element native arrays [becb85e]
- Make sure
push-all
does not push when exhausted when splitting using a regex [077300c] - Improve error message for method calls placed after white space [4278e4c]
- Improve
X::Syntax::Variable::MissingInitializer
exception's error message [ee005d8] - Improve
X::Method::NotFound
exception's error message to only suggest a submethod if correct [b02a741] - Improve
malformed loop spec
related errors [d3c3e53] - Improve error message for case of too many directives in routine
sprintf
[c988f83] - Improve detection of a version control conflict marker to provide an error message [65e412f]
- Additions:
- Add
IO::Handle.do-not-close-automatically
method [61046d7][999d04a] - Add
IO::Path::Parts
class [4387f28][187312b][e9ea048][30ae200] - Add support for
printf($format, Junction)
[110324d] - Add
Supply.rotate
method [9f7c927] - Add
Capture.EXIST-POS
method [6a4f79e][b55ecdf][3372352] - Add
RAKU_REPL_OUTPUT_METHOD
environment variable which sets
the method used to stringify a value of an expression in REPL, default isgist
[285717a] - Add
:chomp
named argument toStr.lines
similar to the same named argument ofIO::Handle.new
[1bcc5d7]
- Add
- Efficiency:
- Make creation of regex captures faster [15961f9][272c463]
[ed65d73][e3fa44a][7f47db8][0b48651][537a6e4][f627d2c][6f6b2df][219199b] - Make file test methods like
.d
or.x
faster [c821bbc] - Make
Match.caps
about 35% faster [87e91de] - Make
Str.split(Regex)
up to 2x faster [9c74d98] - Make
Str.split(Regex, *%_)
up to 2x faster [a9796fe] - Make
dir
routine about 15% faster [700b743] - Make
Blob.join
between 4% and 11% faster [84ff64c] - Make
Blob.gist
about 2x as fast [b55667e] - Make
QuantHash
implementation a bit faster [4a728f2] - Make
IO::Spec::Win32.basename
about 1.7x as fast [ecd06c9] - Make
IO::Spec::Win32.tmpdir
about 1.8x as fast [6d427d4] - Make
IO::Spec::Win32.path
about 2x as fast [1a8e07c] - Make
IO::Spec::Unix.path
about 3.5x as fast [8dc58ab] - Make
IO::Spec::Unix.basename
andIO::Spec::Unic.extension
about 1.7x as fast [f89fad8] - Make
IO::Spec::Unix.tmpdir
about 1.8x as fast [a2860ea] - Make
WhateverCode.ACCEPTS
about 2x as fast [853e622] - Make
IO::Path.sibling
about 2x as fast [a5eb1d4] - Make
IO::Path.succ
andIO::Path.pred
about 3x as fast [26b9f38][7238b09] - Make
IO::Path.parent
about 2.7x as fast [71cb0c5] - Make
IO::Path.parent(N)
about 2x as fast [f93ce87] - Make
IO::Path.child
about 1.4x as fast [f5b2c24] - Make
IO::Path.add
about 1.25x as fast [718d305] - Make
IO::Path.dir
between 1.5x and 2.2x as fast [b63976a]
[6b22c1e][7691742][9b9d9f6] - Make
IO::Path.is-absolute
a bit faster [fc88b9c][bd7fcb2] - Make
IO::Path.spurt
up to 35% faster [7571f65] - Make
IO::Path.slurp
up to 4.7x as fast [d03fa4b][cde948a][36d89cf] - Make
slurp
routine up to 40% faster [f3baa38][fc3e1ae] - Make
spurt
routine a few % faster [da5825e] - Make
Str.Numeric
about 4.3x as fast [a0e5841] - Make
.IO
method andIO::Path.new
about 2x as fast [2a88990] - Make
IO::Spec.curupdir
about 25% faster [6a0eaab][16d93e2] - Make
"42".Int
about 4.3x faster [3ee1777] - Reduce overhead of
Code.ACCEPTS(value)
by 20% [2eec62f] - Make
so
andnot
routines faster [d8c2650][8a3c36f][5c93dda][cb69cfc] - Optimize symbol lookup [c5f5d7e][dc6594d][5d61b3d]
- Prevent
$*OUT
lookup for each eigenstate of Junction when callingprint
orput
[4297cb0] - Make
printf
routine up to 5% faster [e46d459] - Streamline variable
is
andof
handling [5561669] - Make
Hash.sort
a tiny bit faster [cd61724] - Various small optimizations [a907497][b50fd8b][65e17c4]
- Make creation of regex captures faster [15961f9][272c463]
- Internal:
- Set up CI with Azure Pipelines [ae07d68][43213e4][55529de]
[78fe25b][42c3799][4085cfd][5b4faed][5587574][fce783a][adfa192] - Fix
main-version.nqp
dependencies [b71cb3a] - Improve
say
,put
,print
,note
methods ofIO::Handle
[7a902b5]
[88d9822][627b39b][438c1d2][483cac3][2b38666] - Simplify
Shaped1Array.reverse
[de173a1] - Simplify
EVAL(:check)
code [afe8511] - Rework part of
Match
internals [0a84aa7] - Simplify
Kernel.signals
usingSignal
values [5644c70] - Simplify
Grammar.parse
code [f10e5bc][8be2406][1402c1d] - Allow debuggers for Rakudo to be specified by environment variables [48e073e]
- Default to using egdb when possible in rakudo-gdb-m which covers OpenBSD developer environments [b01b012]
- Introduce INTERPOLATE [417a591][777e7b6][3f9f23a][638517d][0590722]
- Various internal improvements to the code base [ef0c457][e71d3cb]
[37533ee][b3d933b][4afaab7][3796405][17bf5d5][d9defb6][2aac854]
[799d627][a56e62d][c1decf2][a69465a][26d88b9][44b2701][95f7d34]
[b5bf1bf][285717a][21c3ef8][4103a30][a616fe5][e645ff6][ea8c04d]
[ad9b9f4][9942ccc][1c94538][9f73351][e9f8035][a431968][519a572]
[4ba70b7][496e916][d984e7c][bf01f84][da9943a][150af9a][6f45945]
[92d0183][98dec90][792a0f0][902401b][4d1ef59][2bfaab6] - Update
INSTALL.txt
for the latest changes [8bb0235][e1db95e][bd5e19e] - Various small improvements to compiler's user-facing documentation [dac68b2]
[302bc8e][736ce71][10a8f6a][627ffd4][3d6756b][eab17e7][18ecb60]
[2cff6dd][77b2f2a][197bba9][621577b][d09cf9d][8a8f62c][a79efde]
[797c96d][8c3f013][11afa53][fbb0abc] - Various changes to documentation related to renaming process
[6ead4ce][142d03b][e0384ee][0ccd4cf][4d6031f][d53a3b1][de6ebd4][b003239]
- Set up CI with Azure Pipelines [ae07d68][43213e4][55529de]
The following people contributed to this release:
Elizabeth Mattijsen, Juan Julián Merelo Guervós, Patrick Böker,
Will "Coke" Coleda, Daniel Green, Stoned Elipot, Alexander Kiryuhin, Stefan Seifert,
Sizhe Zhao, Christian Bartolomäus, Tom Browder, Vadim Belman,
Jonathan Worthington, Tim Smith, Luis F. Uceta, andreoss, Suman Khanal,
Aleks-Daniel Jakimenko-Aleksejev, Nicholas Clark,
Luc St-Louis, Mike Swierczek, Timo Paulssen, Ben Davies,
Wenzel P. P. Peppmeyer, Donald Hunter, Jan-Olof Hendig, Jack Miles,
Mikhail Khorkov, 0racle, Brian Duggan, Dave Lewis, David Warring,
Jeremy Studer, Jimmy Zhuo, Juan Francisco Cantero Hurtado, Nick Logan,
Sylvain Colinet, Tim Siegel, Vittore F. Scolari, cygx, nwc10,
sztanyi, vendethiel
This release implements 6.c and 6.d versions of the Raku 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 2020 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.
If you would like to contribute or get more information, visit
https://raku.org, https://rakudo.org/community, ask on the
perl6-compiler@perl.org mailing list, or ask on IRC #raku on freenode.
Additionally, we invite you to make a donation to The Perl Foundation
to sponsor Raku development: https://donate.perlfoundation.org/
(put “Raku Core Development Fund” in the ‘Purpose’ text field)
The next release of Rakudo (#137), is tentatively scheduled for 2020-07-18.
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.
-
See https://raku.org/ ↩