Skip to content

2020.06

Compare
Choose a tag to compare
@Altai-man Altai-man released this 21 Jun 00:02
· 2637 commits to master since this release
2020.06
eda1a4b

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 /// or a/../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 using cleanup 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 and Proc::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.
  • Changes:
    • Support verbatim argument handling for Proc [709941c][9a75738]
    • Signatures of slurp and spurt 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 returns Seq instead of List [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 returns True now) [3b4794f][840d3e8]
  • Fixes:
    • Fix code objects created BEGIN time EVAL getting lost in precompilation [537f887][169f63d]
    • The is routine from Test module now handles types that cannot be stringified and
      compares them using raku 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 of IO::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 is gist [285717a]
    • Add :chomp named argument to Str.lines similar to the same named argument of IO::Handle.new [1bcc5d7]
  • 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 and IO::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 and IO::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 and IO::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 and not routines faster [d8c2650][8a3c36f][5c93dda][cb69cfc]
    • Optimize symbol lookup [c5f5d7e][dc6594d][5d61b3d]
    • Prevent $*OUT lookup for each eigenstate of Junction when calling print or put [4297cb0]
    • Make printf routine up to 5% faster [e46d459]
    • Streamline variable is and of handling [5561669]
    • Make Hash.sort a tiny bit faster [cd61724]
    • Various small optimizations [a907497][b50fd8b][65e17c4]
  • Internal:

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.

  1. See https://raku.org/