Skip to content

Latest commit

 

History

History
192 lines (177 loc) · 9.77 KB

2020.01.md

File metadata and controls

192 lines (177 loc) · 9.77 KB

Announce: Rakudo compiler, Release #133 (2020.01)

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 on Any from decontainerizing, allowing its correct overloading in roles [ed8f5141]
    • Prevent name MOP method from returning a NQPMu 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]
  • 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 to comb subroutine when called on Cool object when the $matcher argument is a Regex [dd2f072d][a9cd6404]
    • Add log2 subroutine, which accepts Cool and Numeric arguments, as well as its method form (Numeric.log2) [f6254be1]
    • Allowed colon syntax on $.foo method, making $.foo: 42 work as well as equivalent self.foo: 42 does [4a1323ed][6abdf27a][0f86e49f]
    • Add RAKU_EXCEPTIONS_HANDLER env variable, which is not supported as an alias for PERL6_EXCEPTIONS_HANDLER [90408d18]
  • Build system:
    • Renamed PERL6_HOME env var into RAKUDO_HOME, preserving backward compatibility. Rakudo Configure.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]
  • 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% and succeed foo,bar 60% faster [63f11750]
    • Make Supply.lines a few percent faster [0f4ef3cb]
    • Numerous micro-optimizations [f5583de4][05aff922][488f21a6][9c15d717][6c85e691][60a9ff62][779b0a2e]
  • 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]

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

  1. See https://raku.org/