On behalf of the Rakudo development team, I’m very happy to announce the January 2020 release of Rakudo #133. 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.01:
- Changes:
- A big overhaul of role applying rules and behavior or submethods, constructors and destructors [38c72649][a8f61882][cddcd46a][61d3aef2][27147ed0][cbc4b839] [3f7caf57][f242bcfa][cd74a3a7][51055d0e][9369c68e][ad92abc3] [00fec7c3][6f0dd1ea][c9ac15cb][cb903667][d89a0c92][a08e1ff5] [c674a1d3][0654d3e5][fffb5c9c][232382f8][b47be208][44648fbe] [c2d5c20c][48fc44c2][7afffd61][17537ab5][b1e288c3][32e210cd] [fc4a5a3b][1e166e41][7a94c4e0][3eb63b3d][a4ad1a8e][526d38d4] [9e4087e1][aeb10ef5][c4f1cff0][940bf4d8][1f620408][b83e069d] [4d69fda5][c7a87053][13ae9298][0fb7a697][86b1ccbd][ca2cb4ab] [e843fd20][a92ade48][bdcf3149][93d0575c][23191207][595e0ca3] [2c4fa983][b51c1fc5][afcbeb59][eadc1582][548dea5f][1aad3481] [4a962e07][1d1678a8][0b6a9343][bb2600d9][5d10e91c][139d528b] [f2a41613][262b6fc7]
- Smartmatching typed Arrays against same-typed Positionals now
returns True (e.g.
Array[Str:D] ~~ Positional[Str:D]
), which returned False before [fb55ae29] - Class attributes and methods are now prioritized over those from roles [f19e2ee5][2fc87db1][4c265c7c][9357eddb][83d26ddd][9f2a2f6a][55b51a24]
- DateTime class now accepts picosecond precision [9eef0e63]
- Fixes:
- Fixed compile-time subroutine candidate matching when
is rw
trait is used on JVM [12d4514a][fae105b0][73d5e74d][d81212b2][5c65a126] - Improved error message for invalid Pod6 leading and trailing declarator blocks [26f63ff7]
- Prevented
ASSIGN-POS
method onAny
from decontainerizing, allowing its correct overloading in roles [ed8f5141] - Prevent
name
MOP method from returning aNQPMu
when no name is set by returning an empty string instead [dabf83a2] - Fixed relocatability of bundled native libraries [55b3ed56][0e4f8351]
- Made
Range.int-bounds(from,to)
always return correct result [8c3f2927] - Fixed a precompilation bug related to determining class language version [15a55801]
- Fix "expected IO::Handle:D but got IO::Handle" in parallel test runs [efadff2a]
- Fix calling a qualified method from role on JVM backend [5648a4f3]
- Fix
roundrobin
method, cross and zip operators on a 1-element lists [f602c02c][737dd1b1][87de5ee4] - Make MoarVM::Profiler.report work again [734047a0]
- Fixed compile-time subroutine candidate matching when
- Additions:
- Allow user to retain formatting of Pod6 leading declarator
blocks (
#|
) using RAKUDO_POD_DECL_BLOCK_USER_FORMAT env var, instead of always collapsing them into a single string. The latter remains the default behavior [9a4c83af] - Made
.perl
method call on signature of {...} display$_
variable from outer scope [e7c20386] - Add
$*RAKU
variable [a05e169e] Raku
is now allowed to be used as a language in EVAL [1c5d010f][632c0083]- Add
:$match
named parameter tocomb
subroutine when called onCool
object when the$matcher
argument is aRegex
[dd2f072d][a9cd6404] - Add
log2
subroutine, which acceptsCool
andNumeric
arguments, as well as its method form (Numeric.log2
) [f6254be1] - Allowed colon syntax on
$.foo
method, making$.foo: 42
work as well as equivalentself.foo: 42
does [4a1323ed][6abdf27a][0f86e49f] - Add
RAKU_EXCEPTIONS_HANDLER
env variable, which is not supported as an alias forPERL6_EXCEPTIONS_HANDLER
[90408d18]
- Allow user to retain formatting of Pod6 leading declarator
blocks (
- Build system:
- Renamed
PERL6_HOME
env var intoRAKUDO_HOME
, preserving backward compatibility. RakudoConfigure.pl
now accepts--rakudo-home
in addition to--perl6-home
[7cfdd598] - Add
--force-rebuild
command line option. Together with--gen-*
options is causes corresponding components to recompile irrelevant to their existence and version conformance [15255b0a][2022b9cd][1945b9d2] - Fix
set-env.sh
script [0b8ede6c] - Fix
raku
symlinks relocability [a00628e0] - Prevent silently swallowing errors on submodule update [db43d134]
- Use Visual Studio 2017 in AppVeyor [7ecc5bfd][7ce49472]
- Various tweaks and small improvements [75056dfa][8b7d0651][52a7bab9][d7d9a2f4][470c9b7e]
- Skip 'make test' on JVM backend [e5627b83]
- Renamed
- Efficiency:
- Make
Str.raku
between 1.5x to 100x as fast [09e66e50][a4b62fb1] - Make Array[Int].raku at least 5% faster [66cf6f81]
- Make
Mu.raku
about 40% faster [585227ee] - Make
Pair.raku
about 15% faster [0d96bedc] - Make
Pair.raku
between 0 and 10% faster [08aec410] - Make
IntStr.raku
about 2x as fast [2261ef11] - Make
NumStr.raku
about 60% faster [e262da1d] - Made
Str.chomp
between 10x and 100x faster [b9c0196f] - Made
Str.chop(N)
between 3x and 17x faster [b569e112] - Made
Str.chop
between 1.8x and 30x faster [f1963623] - Made
Str.trim-trailing
up to 2x as fast [657d36f1] - Made
Str.trim
between 1.5x and 3x faster [0d0d419f] - Made
Str.substr(N)
between 1.5 and 3x faster [4252a8c9] - Made
Str.substr(N,M)
about 1.5x faster [908dd251] - Made
Str.substr(N, Inf)
about 15% faster [25a29987] - Made
Str.trim-leading
between 20x and 90x faster [3941fef0] - Made
Str.parse-base
between 7x (with decimal point) and 12x (without) faster, decreased its memory pressure [74c8017c][3ce92453][9b8ce733] - Made
Str.Numeric
a few percent faster and 13x faster for an empty string [37474a7a] - Made Str.Int a few percent faster [b42957cc]
- Made DateTime.new(epoch) about 20% faster [9d895914]
- Made DateTime.new($epoch) about 50% faster [cd321254]
- Made the decont operator about 20x faster [872cb7c0]
- Improved efficiency of JIT for
split
subroutine [3e2cfb4d] - Fix regression in performance of async socket [4e9487ce]
- Micro-optimize
set_name
MOP method [88741d94] - Make
lazy gather
up to 15% faster [971174f4] - Make emit about 30% faster [aea2a36c]
- Make
take foo
about 20% faster [a91813d0] - Make
take-rw foo
about 20% faster [533a2ad9] - Make
take foo, bar
about 60% faster [e1aaa83c] - Make
take-rw foo, bar
about 60% faster [bed716be] - Make
succeed foo
30% andsucceed foo,bar
60% faster [63f11750] - Make Supply.lines a few percent faster [0f4ef3cb]
- Numerous micro-optimizations [f5583de4][05aff922][488f21a6][9c15d717][6c85e691][60a9ff62][779b0a2e]
- Make
- Internal:
- Removed SUBSTR-(START|CHARS)-OOR from Rakudo::Internals, they
are now
Str
private methods [ab99c2dd] - Simplify
Str.substr
implementation [99a0610a][1a891062][e3426579][f79102fa] - Fixed some regressions related to
v6.e.PREVIEW
usage [6c251f27][8d03bdff][94b4ca96][466f7de4][65847f71][a59fec7f][755c8030][0d2eb1cb] - Reflect Raku renaming on codebase [604ca34a][186c4ce6]
- Numerous small codebase improvements, including ones related to renaming process [8f30cc76][fc309419][540162c1][6a129499][1003bb93][1d8d62d4] [68cee0dd][2652d9c5][f9e30a02][ee66a6b1][a04af365][11808277] [0e2485a8][e8a9e07f][17d81160][d5a34f19][5162e6f5][6bd0dd51] [cfb655bc][b1a68be4][74aea829][80cbb3ef][83423ea0][d38cfef3] [d406d834][62bd2743][6bf6d347][e4efccc6][6f527cea][b7888d79] [7ce79f4d][5f335aa4][9a5579ff][784daae2][add2ec0d][abcf37f2] [b9fa673b][3d432429][f06c2426][f1abe9c6][bd2e0c7a][22905592] [8c4244f6][829f4ccb][4f48e3a5][27d1c4b5][5d8ef435][ccb92df2] [8ad3d244]
- Removed SUBSTR-(START|CHARS)-OOR from Rakudo::Internals, they
are now
The following people contributed to this release:
Vadim Belman, Elizabeth Mattijsen, Stefan Seifert, Daniel Green, Aleks-Daniel Jakimenko-Aleksejev, Patrick Böker, Stoned Elipot, Juan Julián Merelo Guervós, Will "Coke" Coleda, Tom Browder, Alexander Kiryuhin, Christian Bartolomäus, threadless-screw, Paweł Murias, Ben Davies, Rod Taylor, Bahtiar Gadimov, Timo Paulssen, Jan-Olof Hendig, Nguyễn Gia Phong, Richard Hainsworth, Vittore F. Scolari
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 find out more information, visit https://raku.org, https://rakudo.org/how-to-help, 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 (#134), is tentatively scheduled for 2020-02-22.
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.
Footnotes
-
See https://raku.org/ ↩